Unityå
¬å¼ããã±ã¼ã¸ã®Localizationã使ã£ãå¤è¨èªå¯¾å¿ã«ã¤ãã¦ãå®éã«ãªãªã¼ã¹æ¸ã¿ã®ã¢ããªã§ã©ã®ããã«å®è£
ãããè¸ã¾ãã¤ã¤å¯¾å¿æ¹æ³ãæ¸ãã¾ãã
åä½ç¢ºèªã¢ããª
R18ã®Androidã²ã¼ã ã§ãããæ¬ã¨ã³ããªã¼ã§æ¸ãã¦ããå
容ã¯ãã¡ãã®ã¢ããªã«å¯¾ãã¦è¡ã£ã¦ããããåä½ç¢ºèªããã®ã«ä¸çªé©ãã¦ãã¾ããè¨èªåæ¿ã¯ä½é¨çã§ç¢ºèªå¯è½ã§ãä½é¨çã¯R18表ç¾ã¯ç¡ãã§ãã
ãã以å¤ã§ã¯çå½é²åã²ã¼ã ã§è¡ã£ã¦ãã¾ãããã ãããã¡ãã¯9ãæåã«éçºãã¦ããããæ¬ã¨ã³ããªã¼å
容ã¨ä¸é¨ä¸è´ããªãåä½ããã¦ãã¾ãã
hyoromo.github.io
ç°å¢
ä»åã¯ä»¥ä¸ã®ç°å¢ã§è¡ãã¾ããã
- Unity2022.3.43f1
- Localization v1.5.2
ã¤ã³ã¹ãã¼ã«
Package ManagerãããLocalization ãã¤ã³ã¹ãã¼ã«ãã¾ãã
å
¬å¼ããã±ã¼ã¸ãªã®ã§Unity Registryã§æ¤ç´¢ããã°è¦ã¤ããã¾ãã
ãã¼ãã«ä½æ
Localizationã¯ã¨ã¯ã»ã«ã®ãããªè¡¨å½¢å¼ã§Keyã¨åè¨èªã®Valueãè¨å®ãã¦ããã¾ãããã®è¡¨å½¢å¼ãã¼ã¿ããã¼ãã«ã¨å¼ãã§ãããããã¾ãã¯ãã¼ãã«ãä½ãã¾ãã
1. Unityã®ä¸é¨ã¡ãã¥ã¼ãã Window > Asset Management > Localization Tables ãé¸æ
2. Localization Tablesãã¥ã¼ä¸ã«ãã Create ãã¿ã³æ¼ä¸ããAssets以ä¸ã¸Localization Settingsãä¿å
3. Localizatoin Tablesãã¥ã¼ã®ä¸é¨ã«2åã¿ãã表示ãããããã«ãªã£ãã®ã§ãå·¦å´ã® New Table Collection ãé¸æ
4. Typeã String Table Collection ã«ãããStringã¯ããã¹ããAsset Table Collectoinã¯ã¢ã»ãã(ç»åãªã©)ã§ããä»åã¯ããã¹ãã®ã¿è§£èª¬ãããããStringã®æ¹ãé¸ã³ã¾ãã
5. Nameã«ãã¼ãã«åãè¨å®ã
6. Locale Generatorãã¿ã³æ¼ä¸ãã対å¿è¨èªã«ãã§ãã¯ãä»ãã¾ãã
7. ãã§ãã¯ãä»ãçµããããGenerate Localesãã¿ã³æ¼ä¸ããä¿åå
ãé¸ã¶ã¨è¨èªå¥ã«è¨å®ãã¡ã¤ã«ãçæããã¾ãã
8. Localization Tablesãã¥ã¼ã«æ»ããCreateãã¿ã³ãæ¼ä¸ããä¿åå
ãé¸ã¶ã¨è¨èªå¥ã«ãã¼ãã«ãçæããã¾ãã
9. Localization Tablesãã¥ã¼ä¸é¨ã«ããã¿ãã® Edit Table Collection ãé¸æãã¾ãã
10. Add New Entryãã¿ã³ãæ¼ä¸ããã¨1è¡è¿½å ãããã®ã§ãKeyã«ããã¹ãå¼ã³åºãéã®ãã¼åãè¨å®ããå³å´ã®è¨èªåã«å½ã¦ã¯ã¾ãã»ã«ã¸å¯¾å¿ããã¹ããæ¸ãã¦ããã¾ãã
ã»ã«ã®è¨èªä¸¦ã³ãå¤æ´
ä¸å³ã®ããã«Localizatin Tablesã¿ãã®Edit Table Collectionä¸ã®ã»ã«è¨èªä¸¦ã³ãæ°ã«å
¥ããªãå ´åãä¸å³ã®ããã« Project Settings > Localization ã® Available Locales ããå¤æ´åºæ¥ã¾ãã
ããã¹ãã®ç»é²
Localizatin Tablesä¸ã§ããã¹ãç»é²
1. Localizatin Tablesã¿ãã®Edit Table Collectionä¸ã®Add New Entryãã¿ã³ãæ¼ããæ°ããè¡ã追å
2. ã»ã«ã®ä¸é¨ã«ããè¨èªã«å¯¾å¿ããããã¹ããå
¥å
3. (2) ããµãã¼ãè¨èªåã ãç¹°ãè¿ã
ç»é²ããããã¹ãã¯ã³ã¼ãã§åå¾ããäºã«ãªãã¾ããæ¹æ³ã«ã¤ãã¦ã¯å¾è¿°ãã¾ãã
TextMeshProã³ã³ãã¼ãã³ãä¸ã§ããã¹ãç»é²
1. Canvasã«ããã¹ã表示ããã³ã³ãã¼ãã³ã(TextMeshPro)ã追å
2. Inspectorä¸ã®TextMeshProã³ã³ãã¼ãã³ãã®å³ä¸ã«ããä¸ç¹ãªã¼ãã¼ã ã¯ãªã㯠> Localize ãé¸æ
3. Inspectorä¸ã®LocalizeStringEventã³ã³ãã¼ãã³ãã«ããã¹ãæ
å ±ãè¨å®ãã¦ãã
String Referenceã¯æ¢ã«ãã¼ãã«ç»é²ãã¦ãããã®ã使ãã¾ãããããã°è¨å®ããæ°è¦ã§ããã° None ã®ã¾ã¾ã«ãã
Table Collectionã¯æåã«ç»é²ãããã¼ãã«ãé¸æ
Entry Nameã¯ãã¼ãã«ä¸ã®Keyã¨ãªãã®ã§ã¦ãã¼ã¯ãªå¤ãè¨å®
Add Table Entryãã¿ã³ãæ¼ä¸ããã¨ãã¼ãã«ã«æ°ããè¡ã追å ããã
JapaneseãEnglishé
ç®ã«åè¨èªã§è¡¨ç¤ºãããããã¹ããå
¥å
ãªããå¾è¿°ããLocalization Scene Controlsãã¥ã¼ä¸ã§Track ChangesãONã«ãã¦ç´æ¥å ¥åããããã¹ãç»é²æ¹æ³ãããã¾ãã
Editorä¸ã§è¨èªãåãæ¿ãã¦ç¢ºèªããæ¹æ³
1. Window > Asset Management > Localization Scene Controls ã§ãã¥ã¼ãéã
2. Active Locale ã表示ãããè¨èªã«åãæ¿ãã
ããã¹ã表示
表示è¨èªãè¨å®ããããã¹ããåå¾ããã³ã¼ãã¯ä»¥ä¸ã®éãã§ãããµãã¼ãè¨èªã¯æ¥æ¬èª(ja)ãè±èª(en)ãéå½èª(ko)ãç°¡ä½å(zh)ãç¹ä½å(zh-TW)ã§ãã
â»ã½ã¼ã¹ã³ã¼ãã¯Unityãã¼ã¸ã§ã³å¤æ´çã§åä½ããªããªãå¯è½æ§ãããã¾ãããã®å ´åã¯ãèªèº«ã§ã®ä¿®æ£ããé¡ããã¾ãã
using System; using System.Threading.Tasks; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using UnityEngine.Localization; using UnityEngine.Localization.Settings; using System.Linq; using System.Text; [Serializable] public class LocalizationsInitDoneEvent : UnityEvent { } /// <summary> /// ãã¼ã«ã©ã¤ãºå¯¾å¿ãè¡ãã¯ã©ã¹ /// ä»ã¯ã©ã¹ããå ã«å®è¡ããªããã°ã¨ã©ã¼ãçºçãããããå®è¡é ãæ©ãã¦ãã /// </summary> [DefaultExecutionOrder(-100)] public class LocalizationsSingleton : MonoBehaviour { public enum LocalizeType { EN = 0, JP, KR, CN, TW, } public static readonly string[] LocaleCodeNames = { "ENG", "JPN", "KOR", "CHS", "CHT" }; public static readonly string[] LocaleCodes = { "en", "ja", "ko", "zh", "zh-TW" }; public const string TEXT_ASSETS_NAME = "TextTable"; private const string PREF_LOCALE = "PREF_LOCALE"; public static LocalizationsSingleton Instance; [SerializeField] private LocalizationsInitDoneEvent _initDoneEvent; private List<Locale> _locales = new List<Locale>(); private int _currentLocaleIndex; private async void Awake() { if (Instance == null) { Instance = this; DontDestroyOnLoad(gameObject); await Init(); } else { Destroy(gameObject); } } /// <summary> /// åæå /// </summary> private async Task Init() { _currentLocaleIndex = 0; // è¨å®ããè¨èªãããã°ããã¡ãã«åãæ¿ãã Locale currentLocale = LocalizationSettings.SelectedLocale; var localeCode = PlayerPrefs.GetString(PREF_LOCALE, ""); if (localeCode.Length != 0) { for (var i = 0; i < LocalizationSettings.AvailableLocales.Locales.Count; i++) { var locale = LocalizationSettings.AvailableLocales.Locales[i]; if (locale.Identifier.Code.ToString().Equals(localeCode)) { currentLocale = locale; LocalizationSettings.SelectedLocale = locale; break; } } } // è¨èªãåãæ¿ãã for (var i = 0; i < LocalizationSettings.AvailableLocales.Locales.Count; i++) { var locale = LocalizationSettings.AvailableLocales.Locales[i]; _locales.Add(locale); if (currentLocale == locale) { var currentCode = currentLocale.Identifier.Code; for (int j = 0; j < LocaleCodes.Length; j++) { var code = LocaleCodes[j]; if (currentCode.Equals(code)) { _currentLocaleIndex = j; } } } } await LocalizationSettings.InitializationOperation.Task; await LocalizationSettings.StringDatabase.PreloadTables(TEXT_ASSETS_NAME).Task; _initDoneEvent?.Invoke(); } /// <summary> /// è¨èªåæ¿ /// </summary> public async Task ChangeSelectedLocale(LocalizeType localizeType) { _currentLocaleIndex = (int)localizeType; var locale = Locale.CreateLocale(LocaleCodes[(int)localizeType]); LocalizationSettings.SelectedLocale = locale; PlayerPrefs.SetString(PREF_LOCALE, locale.Identifier.Code); await LocalizationSettings.InitializationOperation.Task; } public async Task<string> GetText(string key) { var table = await LocalizationSettings.StringDatabase.GetTableAsync(TEXT_ASSETS_NAME).Task; if (table.GetEntry(key) == null) { // ã¨ã©ã¼ãã³ããªã³ã° Debug.LogWarning("key=" + key + " ã®Valueãããã¾ããã§ãã"); } return table.GetEntry(key).Value; } /// <summary> /// 次ã®è¨èªã«åãæ¿ãã /// </summary> public void NextLocale() { _currentLocaleIndex++; if (_locales.Count <= _currentLocaleIndex) { _currentLocaleIndex = 0; } ChangeSelectedLocale((LocalizeType)_currentLocaleIndex); } public LocalizeType GetCurrentLocalizeType() { return (LocalizeType)_currentLocaleIndex; } public int GetCurrentLocalizeIndex() { return _currentLocaleIndex; } public string GetCurrentLocalizeCodeName() { return LocaleCodeNames[(int)_currentLocaleIndex]; } }
ããã¹ãåå¾ããããããSingletonã§ãã
ä¸çªæåã«èµ·åãããSceneã«é
ç½®ãã¦ããã¾ãã
åå¾å¯¾è±¡ã®ãã¼ãã«æå®
TEXT_ASSETS_NAMEå®æ°ã«è¨å®ãã¦ããåå㯠Localization Tablesãã¥ã¼ã® Edit Table Collction ã® Table Collection Name ã¨ãªã£ã¦ãã¾ããããããã©ã«ãå¤ããå¤æ´ãã¦ããå ´åã¯å®æ°ãå¤æ´ãã¦ãã ããã
åæå
Initã¡ã½ããã§ã¯PlayerPrefsã§éå»ã«ä¿åãããè¨èªãããã°ã表示è¨èªã¨ãã¦è¨å®ã
ããã»ã¼ããã¼ã¿ãç¡ããã°ã端æ«ã®è¡¨ç¤ºè¨èªãå
ã«è¨å®ã端æ«è¨èªããµãã¼ãå¤ã§ããã°è±èªãè¨å®ã
Initã¡ã½ãããå®äºããã LocalizationsInitDoneEvent ã«ç»é²ããã¤ãã³ããçºç«ããããã«ä½ã£ã¦ãã¾ãã
ããã¯ã²ã¼ã èµ·åæã«åæåãçµãã£ãããã³ããªã³ã°ãã¦ãã¾ãã
æåã§è¨èªåæ¿
ã¦ã¼ã¶ã¼æä½ã«ããè¨èªåæ¿ã¯ ChangeSelectedLocale ã NextLocale ã¡ã½ããã使ãã¾ãã
åè
ã¯è¨èªæå®ãå¾è
ã¯é çªã«è¨èªåæ¿ãè¡ããã¾ãã
表示è¨èªã®ããã¹ãåå¾
GetTextã¡ã½ããã§åå¾ã§ãã¾ãã
å©ç¨ä¾ã¨ãã¦ã¯ä»¥ä¸ã®ããã«å¼æ°ã«ãLocalizatin Tablesä¸ã§ããã¹ãç»é²ãã§ç»é²ããKeyã使ç¨ãã表示è¨èªã»ã«ã®ããã¹ããåå¾ãã¾ãã
private TextMeshProUGUI _messageText; private async void showText() { _messageText.text = await LocalizationsSingleton.Instance.GetText("HellowMessage"); }
Font Assetsçæ
TextMeshProã§ããã¹ãã表示ããã«ã¯Font Assetsãä½æããå¿
è¦ãããã¾ãã
ããã¦å¤è¨èªå¯¾å¿ããå ´åãTextMeshProã®Font Asettsã¯åããã©ã³ãã使ãã¨æ¥½ã§ãã
ããããæã«ãµãã¼ãè¨èªã®ç¨®é¡ãå¤ãNoto Sansãã©ã³ãã使ãã¨è¯ãã§ããã
- æ¥æ¬èª(è±èªå«ã)
Noto Sans Japanese - Google Fonts - éå½èª
Noto Sans Korean - Google Fonts - ç°¡ä½å
Noto Sans Simplified Chinese - Google Fonts - ç¹ä½å
Noto Sans Traditional Chinese - Google Fonts
1. ããããã®è¨èªãã©ã³ãã®ttfãã¡ã¤ã«ãUnityããã¸ã§ã¯ãã¸é
ç½®
2. ä¸ã¡ãã¥ã¼ãã Window > TextMeshPro > Font Asset Creator ãé¸æ
3. Font Asset Creatorãã¥ã¼ä¸ã§ä»¥ä¸ã®ããã«è¨å®
Source Fontã«å
ã»ã©è¿½å ããFont ttfãã¡ã¤ã«ãè¨å®
Custom Character List ã«è¡¨ç¤ºãããæåãè¨å®
4. Generate Font Atlasãã¿ã³ãæ¼ä¸
5. Saveãã¿ã³ãæ¼ä¸
ããã§Font Assetsãçæããã¾ããã
TextMeshProã³ã³ãã¼ãã³ãã®Font Assetã«å ã»ã©çæããFont Assetsãè¨å®ããã¨ãããã¹ãã表示ãããããã«ãªãã¾ãã
åºæ¬çãªè¨å®ã¯ä»¥ä¸ã§ãã
ããããã¯å®è·µçãªTipséã¨ãªãã¾ãã
Tips
Font Assetã®æ´æ°
1. Projectãã¥ã¼ä¸ã®Font Assetãé¸æ
2. Inspectorä¸ã®Update Atlas Textureãã¿ã³ãæ¼ä¸
TextMeshProçææã®ããã©ã«ã ãã©ã³ããè¨å®
Project Settings > TextMeshPro/Settings ã«ããé
ç® Default Font Asset ãå¤æ´ãã¾ãã
Fallback Font è¨å®
Font Assetã¯è¨èª(å
ãã©ã³ã)æ¯ã«ä½æãã¾ããã表示ããããã¹ãã¯1ç®æã ããå¤å¯¾1ã®é¢ä¿ã¨ãªãã¾ãã
ããã¯ã¡ã¤ã³ã¨ãªãFont Assetã®Fallback Fontã«ä»è¨èªã®Font Assetãè¨å®ããäºã§è§£æ±ºãã¾ãã
1. Font Assetãé¸æ
2. Inspectorä¸ã®Fallback Font Assetsã«ããFallback Listã¸ä»è¨èªã®Font Assetã追å
ããã§ã¡ã¤ã³ã®Font Assetã«åå¨ããªãæåããã£ãå ´åãFallback Listãé ã«ãã§ãã¯ãã¦åå¨ãããæå表示ãããããã«ãªãã¾ãã
ã§ãã1ã¤åé¡ããããä¸å³ã®ããã«ä½¿ãããFontAssetã«ãã£ã¦æåè£
飾ã«å·®ãåºã¦ãã¾ãå ´åãããã¾ãã
ããã®åå ã«ãªã£ã¦ããã®ã以ä¸é
ç®ãFontAssetæ¯ã«ãã©ãã©ãªããã§ããå¤ãçµ±ä¸ããäºã§åé¡ã解決ãã¾ãã
- Sampling Point Size
- Padding
- Atlas Resolution
è¨èªåæ¿æã«ããã¹ãåå¾ãç´ã
TextMeshProã³ã³ãã¼ãã³ãã¨åãGameObjectã¸GameObjectLocalizerãã¢ã¿ããããã¦ããå ´åãç¹ã«ä½ãããå¿
è¦ããã¾ããã
è¨èªåæ¿ãè¡ãããã¨èªåçã«ããã¹ããåãæ¿ãã£ã¦ããã¾ãã
åé¡ãªã®ã¯ã³ã¼ãä¸ã§è¨å®ããå ´åã§ãã
ãã¡ãã¯å度ã³ã¼ãã§è¨å®ãç´ããå¿
è¦ãªãããè¨èªåæ¿ã³ã¼ã«ããã¯é¢æ°ã§åè¨å®ãã¾ãã
void Start() { LocalizationSettings.SelectedLocaleChanged += UpdateLocalization; } void OnDestroy() { LocalizationSettings.SelectedLocaleChanged -= UpdateLocalization; } public async void UpdateLocalization(Locale locale) { _messageText.text = await LocalizationsSingleton.Instance.GetText("HellowMessage"); }
Localization Tablesã®ããã¹ããæ½åºãã¦Font Assetãçæããã¿ã¼ã³Aã
æ¹æ³ã2éãããã¾ãã
ã¾ãã¯ãã¿ã¼ã³Aã®æ¹æ³ã¯ä»¥ä¸ã®éãã
1. Localization Tablesãã¥ã¼ãéã
2. å³ä¸ããExport > Character Set... ãé¸æ
3. Export Character Setãã¥ã¼ãããFont Assetã«åããã¦è¨èªé¸æãã¦Export Selectedãã¿ã³ãæ¼ä¸
4. Font Asset Creatorãã¥ã¼ãããCharacter SetãCharacters from Fileã«å¤æ´
5. Character Fileé
ç®ã«å
ã»ã©Exportãããã¡ã¤ã«ãè¨å®
6. 以éã¯Font Assetçææã¨åãããã«ãAtlasãã¡ã¤ã«ãçæãã¦ä¿å
ãã®ãã¿ã¼ã³ã®åé¡ç¹ã¯3ã¤ã
- Exportãæåã§è¡ããããããã¹ãæ´æ°æ¯ã«ããã®ãæé
- ãã¥ã¼ãã³ã¨ã©ã¼ãçºçããå¯è½æ§ããã
- Font Assetéã§éè¤ããæåãå«ã¾ãã¦ãã¾ã
Localization Tablesã®ããã¹ããæ½åºãã¦Font Assetãçæããã¿ã¼ã³Bã
次ã«ãã¿ã¼ã³Bã®æ¹æ³ã¯ã以ä¸ã®ããã«ã¹ã¯ãªããã§è§£æ±ºãã¦ãã¾ãæ¹æ³ã§ããEditorãã©ã«ãã®ä¸ã¸è¿½å ãã¦ä½¿ç¨ãã¾ãã
â»ã½ã¼ã¹ã³ã¼ãã¯Unityãã¼ã¸ã§ã³å¤æ´çã§åä½ããªããªãå¯è½æ§ãããã¾ãããã®å ´åã¯ãèªèº«ã§ã®ä¿®æ£ããé¡ããã¾ãã
using UnityEngine; using UnityEditor; using UnityEngine.Localization; using System.Text; using System.IO; using System; using UnityEditor.Localization; public class LocalizationExtraction : MonoBehaviour { private static readonly string FIX_CHARS = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]abcdefghijklmnopqrstuvwxyz"; private static readonly string TABLE_COLLECTION_FILE_PATH = "Assets/DB/TextTable.asset"; private static readonly string TEXT_FILE_PATH = "Assets/Editor/Localizations/texts/"; [MenuItem("Tools/Localization/å ¨ã¦ã®ããã¹ããæ½åº")] private static async void AllText() { Debug.Log("Fontãã¡ã¤ã«æ´æ°ãéå§"); var ngWord = new StringBuilder(); var collection = AssetDatabase.LoadAssetAtPath<StringTableCollection>(TABLE_COLLECTION_FILE_PATH); for (int i = 0; i < LocalizationsSingleton.LocaleCodes.Length; i++) { var localeCode = LocalizationsSingleton.LocaleCodes[i]; var localizeText = ""; if (localeCode.Equals("en")) { continue; } else if (localeCode.Equals("ja")) { localizeText = FIX_CHARS; } localizeText += collection.GenerateCharacterSet(new LocaleIdentifier(localeCode)); // éè¤æåãåé¤ var charsToRemove = ngWord.ToString().ToCharArray(); foreach (char c in charsToRemove) { localizeText = localizeText.Replace(c.ToString(), String.Empty); } ngWord.Append(localizeText); // ãã¡ã¤ã«æ¸ãåºã var filePath = TEXT_FILE_PATH + localeCode.ToString() + ".txt"; StreamWriter sw = new StreamWriter(filePath, false); sw.WriteLine(localizeText);// ãã¡ã¤ã«ã«æ¸ãåºãããã¨æ¹è¡ sw.Flush(); sw.Close(); } AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); Debug.Log("Fontãã¡ã¤ã«æ´æ°ãå®äº"); } }
Unityã®ã¡ãã¥ã¼ä¸ãã Tools > Localization > å
¨ã¦ã®ããã¹ããæ½åº ã§ãã¡ã¤ã«ãè¨èªå¥(ãã ãè±èªã¨æ¥æ¬èªã¯åããã¡ã¤ã«)ã«æ¸ãåºããã¾ãã
FIX_CHARSã¯Localization Tablesã«åå¨ããªãããã¹ããè¨å®ãã¾ããã³ã¼ãä¸ã§åãè¾¼ãã§ããããã¹ãçã¯ãã¡ãã§é½åº¦è¿½å ãã ããã
ä»ã®å®æ°ã¯ç°å¢ã«å¿ãã¦é©å®å¤æ´ãã¦ãã ããã
ç¹ã« Assets/Editor/Localizations/texts/ ã«ãã©ã«ããåå¨ããããã«ãã¦ããã¦ãã ãããåå¨ããªããã©ã«ããæ°è¦ä½æããæ°ã®å©ããã¹ã¯ãªããã§ã¯ããã¾ããã®ã§ã
追å ããããã¡ã¤ã«ããã¿ã¼ã³Aã®ããã«Font Asset Creatorãã¥ã¼ä¸ã§æå®ãã¦Font Assetãæ´æ°ãã¾ãã
ç· ã
ã³ã¼ããè²¼ã£ã¦ããããã§é·ãã¦å¤§å¤ãã®ããã«è¦ãã¡ããããããã¾ããããåºæ¬ã¡ã³ãããå¿
è¦ããªãã®ã§ä¸åº¦ããã³ã¨è¨å®ããã°æ¥½ããªã¼ã¨æãã¾ãã
(2024/12/12追è¨) 対å¿è¨èªãå¾ããå¢ããæ¹æ³
æ°ããè¨èªã追å ããæ¢åTableã¸è¨èªè¿½å ããã«ã¯ä»¥ä¸ã®ããã«è¡ãã¾ãã
1. Project Settings > LocalizationãéããAdd Localeãã¿ã³æ¼ä¸
2. Add Localeãã¥ã¼ä¸ãã追å ãããè¨èªããã§ãã¯ããAdd Localesãã¿ã³æ¼ä¸
3. Projectãã¥ã¼ããã追å ããããã¼ãã«ãé¸æãã¦Inspectorãéã
4. ã¾ã 追å ããã¦ããªãè¨èªãããã°ãCreateããã¿ã³ã表示ãããã®ã§ãCreateãã¿ã³æ¼ä¸
ããã§Localization Tablesãã¥ã¼ã確èªããã¨ã追å è¨èªã®åãå¢ãã¾ãã