我正在尝试本地化我的应用程序,并注意到Twitter和Facebook等应用程序会立即切换存储在服务器上的先前通知中使用的语言以匹配设备语言。他们是怎么做到的?
例如,有人对帖子发表评论,以便通知:
John commented "hi" on your post.
如果我的设备语言设置为法语,它后来被翻译成法语。
他们会存储本地化字符串,例如:
%@ commented %@ on your post.
然后以某种方式在通知中引用该字符串以及变量?
答案 0 :(得分:1)
有许多与本地化相关的工具,其中一个就像Phraseapp。这些工具的工作方式相当简单,本地化主要是前端驱动,而不是后端。
您为某些内容定义了一个键,该键也可以接受参数。所以在你的例子中,它可能看起来如下。
英语: user_commented_message
= %@ commented %@ on your post.
德语: user_commented_message
= %@ Kommentierte %@ auf Ihrem Beitrag.
将此保存到您的Localizable.strings
,与您的应用二进制文件一起提供的内容。
完成本地化后,您需要做的就是为通知创建正确的有效负载。在您的示例中,它将类似于以下内容:
{
aps = {
alert = {
"loc-args" = (
"John",
"hi"
);
"loc-key" = "user_commented_message";
};
badge = 1;
sound = default;
};
}
正如您所看到的,您在loc-args
部分中传递了两个参数,您可以在其中定义哪些参数,而不是键中的%@
。参数的顺序很重要,它们将以%@
部分中的loc-args
替换loc-key
。
在Localizable.strings
部分,您只需定义body
中应使用的密钥。从此开始,通知中心将根据设备语言设置显示通知,读取本地化字典,Twitter或Facebook服务器与其无关的内容。
如需进一步阅读,我建议您查看Apple notification programming guide。
修改强>
This帖子说您无法同时使用loc-args
和const str = 'stuff';
export {
str
};
。它是一种独特的EITHER ONE或OTHER关系。
如果它在您的应用中,而不仅仅是使用本地化。不要在服务器上发送硬编码语言内容或存储硬编码语言文本,请始终使用本地化密钥的每个文本内容。它仍然是前端驱动的,服务器应该只保留本地化的密钥,而不是内容本身。