東莞大嶺山鎮(zhèn)網(wǎng)站建設(shè)新聞式軟文
本地化子系統(tǒng)提供了創(chuàng)建多語言應(yīng)用程序的簡單方法。
初始化
在使用子系統(tǒng)之前,需要加載本地化字符串集合。通常的做法是在應(yīng)用程序啟動時執(zhí)行此操作??梢约虞d多個集合文件,每個集合文件只能定義一種或多種語言。例如:
Localization* l10n = GetSubsystem<Localization>();
// 1st JSON file format
l10n->LoadJSONFile("StringsEnRu.json");
l10n->LoadJSONFile("StringsDe.json");// 2nd JSON file format
l10n->LoadJSONFile("StringsLv.json", "lv");
JSON文件必須采用UTF8編碼,無BOM。示例文件位于bin/Data目錄中。JSON文件必須具有以下格式之一:
1.LoadJSONFile(“StringsEnRu.json”)方法將自動從json文件中選擇語言
{"string id 1":{"language 1":"value11","language 2":"value12","language 3":"value13"},"string id 2":{"language 1":"value21","language 2":"value22","language 3":"value23"}
}
2.必須將第二個參數(shù)傳遞給LoadJSONFile(“StringsLv.json”,“l(fā)v”)方法,以告訴解析器將加載哪種語言
{"string id 1": "value 1","string id 2": "value 2","string id 3": "value 3"
}
可以定義任意數(shù)量的語言。請記住,語言名稱和字符串標(biāo)識符區(qū)分大小寫?!癊n”和“en”被認(rèn)為是不同的語言。在加載過程中,按照查找順序?qū)φZ言進(jìn)行編號。索引從零開始。第一個找到的語言被設(shè)置為初始激活。
使用
Get函數(shù)以當(dāng)前語言返回具有指定字符串標(biāo)識符的字符串。
Text* t = new Text(context_);
t->SetName("Text1");
Localization* l10n = GetSubsystem<Localization>();
t->SetText(l10n->Get("string 1"));
? ? ? 如果字符串id為空,將返回一個空字符串。如果找不到翻譯,將不修改地返回id,并記錄警告。使用SetLanguage()函數(shù)在運(yùn)行時更改語言。
Localization* l10n = GetSubsystem<Localization>();
l10n->SetLanguage("language 2");
? ??語言更改后,將發(fā)送E_CHANGELANGUAGE事件。訂閱它以執(zhí)行必要的用戶界面重新定位(文本、精靈等)
SubscribeToEvent(E_CHANGELANGUAGE, URHO3D_HANDLER(Game, HandleChangeLanguage));void Game::HandleChangeLanguage(StringHash eventType, VariantMap& eventData)
{Localization* l10n = GetSubsystem<Localization>();...Text* t = static_cast<Text*>(uiRoot->GetChild("Text1", true));t->SetText(l10n->Get("string 1"));
}
文本UI元素還支持自動翻譯,以避免手動操作。
Text* t2 = new Text(context_);
t2->SetText("string 2");
t2->SetAutoLocalizable(true);
其中文本值用作標(biāo)識符。另請參見示例40_Localization。