{"enrichment":{"faq":[{"a":"Localization in Godot starts by wrapping user-facing strings with the tr() function, then organizing translations in CSV or PO files. Use TranslationServer to load translation resources and switch locales at runtime. Create a translation file for each language, import it as a Translation resource, and add it to the project's localization settings. Godot automatically handles Control node translation when auto_translate_mode is enabled.","q":"How do I add multiple languages to a Godot game?"},{"a":"Localization's TranslationServer manages runtime locale switching. Call TranslationServer.set_locale(locale_code) to change the active language\u2014for example, set_locale(\"es\") for Spanish or set_locale(\"ar\") for Arabic. Load your translation resources via TranslationServer.add_translation(translation_resource) before switching. When you change the locale, all tr() calls automatically return strings in the new language, and Control nodes with auto_translate_mode enabled refresh their text.","q":"What is the godot translation server set locale workflow?"},{"a":"Localization supports right-to-left text through font configuration and layout settings. Assign RTL-compatible fonts (with proper Arabic or Hebrew glyphs) to your Control nodes. Use TextServer's text direction detection or explicitly set text_direction to TextServer.DIRECTION_RTL. For mixed-direction content, RichTextLabel handles bidirectional text automatically. Ensure your translation files contain properly shaped RTL text, and test in the editor preview with locale set to your target RTL language.","q":"How do I set up RTL support in Godot for Arabic and Hebrew?"},{"a":"Localization provides tr_n(singular_key, plural_key, count) for plural forms\u2014pass the count to select the correct form. For locale-aware number and date formatting, use OS.get_locale_language() to detect the current language, then apply region-specific formatting rules (e.g., comma vs. period for decimals). Store formatting patterns in your translation files or use helper functions that adapt based on TranslationServer.get_locale(). This ensures dates, currency, and numbers display correctly for each language.","q":"How should I handle pluralization and locale-aware formatting?"},{"a":"Localization recommends semantic, hierarchical key names that describe content rather than location\u2014use keys like \"menu_start_button\" or \"dialog_confirm_message\" instead of \"button_1\" or \"text_5\". Group related strings with prefixes (\"ui_\", \"dialog_\", \"error_\") for organization. Use lowercase with underscores, keep keys concise, and add context comments in CSV/PO files for translator clarity. This approach scales better and makes maintenance easier as your game grows.","q":"What's the best practice for translation key naming conventions?"},{"a":"Localization issues often stem from: translation resources not added to TranslationServer, tr() calls wrapping only some strings inconsistently, or auto_translate_mode disabled on Control nodes. Verify your CSV/PO files are imported as Translation resources and loaded before locale switches. Check that all user-facing text uses tr(key) or tr_n() calls. If text still doesn't update, ensure the locale code matches your translation file's language tag exactly (e.g., \"en\" vs. \"en_US\").","q":"Why aren't my translation keys displaying or updating on locale change?"}],"shadow_tags":["multi-language-support","string-externalization","right-to-left-text","plural-handling","locale-switching","character-encoding","translation-workflow","ui-adaptation","editor-preview","context-disambiguation"],"summary_rewrite":"Master multi-language game development by wrapping user-facing strings with tr(), organizing translations in CSV or PO files, and switching locales at runtime through TranslationServer. This skill covers semantic key strategies, automatic Control node translation, pluralization handling, and right-to-left text support for global audiences."},"files":[{"bytes":15864,"path":"skills/localization/SKILL.md","sha256":"d6b4dda2962bf14177cc3ef5e3f70a79e63dbda11f36acde79b54cad10eb1d7e","url":"https://skillfed.io/files/jame581/GodotPrompter/localization/46f7fd49/SKILL.md"}],"id":"jame581/GodotPrompter/localization","links":{"html":"https://skillfed.io/jame581/GodotPrompter/localization","md":"https://skillfed.io/jame581/GodotPrompter/localization.md","repo":"https://github.com/jame581/GodotPrompter"},"meta":{"agents_supported":[],"first_seen":"2026-07-28","forks":27,"language":"JavaScript","last_updated":"2026-07-27","license":"MIT","name":"localization","publisher":"jame581","stars":487},"relations":{"similar":[{"id":"ahmed-lakosha/odoo-plugins/odoo-i18n"},{"id":"crbnos/carbon/translate"},{"id":"travisjneuman/.claude/i18n-localization"},{"id":"skills-il/localization/hebrew-i18n"},{"id":"zebbern/claude-code-guide/localization-toolkit"},{"id":"jame581/GodotPrompter/dialogue-manager"},{"id":"daymade/claude-code-skills/i18n-expert"},{"id":"Donchitos/Claude-Code-Game-Studios/localize"},{"id":"daffy0208/ai-dev-standards/localization-engineer"},{"id":"yonatangross/orchestkit/i18n-date-patterns"}]},"slug":{"owner":"jame581","repo":"GodotPrompter","skill":"localization"},"version":"46f7fd49"}
