Urho3D本地化 国际化

本地化子系统提供了创建多语言应用程序的简单方法。

初始化

在使用子系统之前,需要加载本地化字符串集合。通常的做法是在应用程序启动时执行此操作。可以加载多个集合文件,每个集合文件只能定义一种或多种语言。例如:

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.必须将第二个参数传递给LoadJSONFile(“StringsLv.json”,“lv”)方法,以告诉解析器将加载哪种语言

{
    "string id 1": "value 1",
    "string id 2": "value 2",
    "string id 3": "value 3"
}

可以定义任意数量的语言。请记住,语言名称和字符串标识符区分大小写。“En”和“en”被认为是不同的语言。在加载过程中,按照查找顺序对语言进行编号。索引从零开始。第一个找到的语言被设置为初始激活

使用

Get函数以当前语言返回具有指定字符串标识符的字符串。

Text* t = new Text(context_);
t->SetName("Text1");
Localization* l10n = GetSubsystem<Localization>();
t->SetText(l10n->Get("string 1"));

      如果字符串id为空,将返回一个空字符串。如果找不到翻译,将不修改地返回id,并记录警告。使用SetLanguage()函数在运行时更改语言。

Localization* l10n = GetSubsystem<Localization>();
l10n->SetLanguage("language 2");

    语言更改后,将发送E_CHANGELANGUAGE事件。订阅它以执行必要的用户界面重新定位(文本、精灵等)

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);

其中文本值用作标识符。另请参见示例40_Localization。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘小舟舟,游大世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值