我正在尝试本地化我的应用程序,并注意到诸如Twitter和Facebook之类的应用程序立即切换服务器上存储的以前的通知中使用的语言以匹配设备语言。他们怎么做?
例如,有人在帖子上发表评论,以便通知是:
John commented "hi" on your post.
如果我的设备语言设置为法语,则将其翻译成法语。
他们会存储一个局部字符串,例如:
%@ commented %@ on your post.
,然后以某种方式引用通知中的字符串以及变量?
那里有许多与本地化有关的工具,一种类似于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
部分中通过了2个参数,您几乎可以定义,应该显示的内容,而不是键中的%@
。参数的顺序很重要,它们将以与loc-args
部分相同的顺序替换%@
。
在loc-key
部分中,您几乎可以定义从Localizable.strings
中使用什么密钥。从此开始,通知中心将仅根据设备语言设置显示读取本地化字典,Twitter或Facebook服务器的内容的通知。
要进一步阅读,我建议您查看Apple Notification编程指南。
编辑
这篇文章说您无法同时使用
body
和loc-args
。这是独家关系。如果它在您的应用中,而不仅仅是使用本地化。请勿在服务器上发送硬编码的语言内容或存储硬编码语言文本,始终将每个文本内容与本地化密钥一起使用。它仍然是前端驱动的,服务器只能保留本地密钥,而不是内容本身。