我们建议您将所有平台密钥(例如,web和移动)存储在同一个文件中项目为了避免复制翻译.问题是,不同的平台通常需要不同格式的占位符。为了克服这个问题,我们介绍了定位通用占位符.
这个特性的思想非常简单:所有占位符都可以存储在Lokalise in中通用的格式所以你不需要担心平台差异。然而,当你导出翻译对于选定的平台,这些通用占位符将自动替换为特定于平台的占位符。
而且,当一个翻译文件是上传对于Lokalise,它可以自动检测所有特定于平台的平台,并将它们转换为通用平台。
你可能也有兴趣了解一下自定义占位符.
指数
Lokalise占位符
普遍的占位符
你可以在Lokalise上使用以下通用占位符来表示各种数据类型:
[%s], [%1$s], [%s:name]
——字符串。[%i], [%1$i], [%i:name]
——整数。[% f]、[%。2 f]、[% 1 $。2 f]、[% .2f名称):
——浮动。
名称后缀:名称
仅在实际支持命名占位符的占位符格式中使用。对于其他格式,此后缀将被忽略。
特殊的占位符
lockalise还支持某些“特殊”占位符:
(%)
-将自动导出为% %
为printf
而且iOS
如果字符串包含至少一个占位符(将被导出为%
否则)。(空白)
-这个占位符仅仅意味着“翻译不存在”,它将作为一个空字符串导出。然而,它将被视为“翻译”在Lokalise。当您还没有正确的翻译,但您想假装它确实存在时,这个占位符可以派上用场。(真正的),(假)
-这些占位符将被导出为平台特定的布尔值。
请注意(空白)
,(真正的)
,(假)
占位符应该是给定翻译中的唯一文本,例如。这个句子是[错误的]
的使用是否不正确(假)
占位符,并将简单地导出为纯文本。
参考占位符
[% key_id key_id %):
表示键引用。请查询更多信息在相应的文章中.
通用占位符的使用
假设我们有一个手机版和一个网页版的应用。我们还有两个安卓版和网页版的英文翻译文件。
en.json
(网络)
{
"your_order": "这是您的订单,{{name}}!"
}
en.xml
(安卓)
<?xml version="1.0" encoding="UTF-8"?>
<资源>
这是你的订单,%s!字符串> < /
> < /资源
正如你所看到的,我们有相似的翻译键和值,但占位符是不同的,写为{{名称}}
(网络)和% s
(Android)。
导入带有占位符的翻译文件
让我们继续上传页面并选择我们的JSON和XML翻译文件。如果您上传这些文件时没有启用任何上传选项,您的密钥将自动合并为一个条目,因为它们具有相同的名称。问题是,其中一个翻译值将丢失,因为在一个键中不可能有相同语言的多个翻译。但是如果您丢失了其中一个翻译,这实际上意味着一个特定于平台的占位符也将丢失!
当然,您可以启用按文件区分键选项,这样键不会合并到单个条目中:相反,它们将被分配给不同的条目文件名两把钥匙都会被保留。这听起来像是一个很好的解决方案,但这意味着你将有两个几乎相同的文本需要翻译两次。
相反,让我们启用转换为通用占位符选项,以便所有占位符自动转换为通用占位符:
新闻导入文件然后返回编辑器。结果如下:
我们可以看到占位符被替换为一个通用的占位符。注意,您可以将所有占位符显示为块,而不是如上所述在下面的文章中.
现在我们有了一个链接到Web和Android平台以及JSON和XML文件的翻译键。尽管如此,我们不需要翻译相同的文本两次,而且我们的占位符也就位了!
下载翻译文件并替换为特定于平台的占位符
一旦你准备好了,让我们继续下载页面。选择一个导出格式:例如,Android资源(XML)或JSON:
接下来,选择占位符的格式在高级设置部分:
最后,点击构建和下载或预览.结果如下:
如您所见,通用占位符被正确地替换为{{名称}}
.伟大的工作!
平台特定的占位符格式
假设我们有以下字符串和Lokalise通用占位符:我的名字是[%s:name]。我有[%。2 f]美元。
.让我们看看如何将这些通用占位符替换为特定于平台的占位符。
printf
Printf-style占位符:我的名字是%s。我有%。2 f美元。
%我
转换为% d
.其他变体保持不变。
ios
iOS-style占位符:我的名字是%@。我有%。2 f美元。
% s
转换为% @
而且%我
转换为%李
(%李
用于同时支持32位和64位整数)。其他变体保持不变。
加护病房
ICU消息格式占位符:我的名字是{name}。我有bbb美元。
有名称的占位符将被导出为{名称}
,其他占位符将导出为{n}
在哪里n
占位符的位置索引。当用于ICU复数时,带有位置索引的占位符1
将导出为#
.
网
.NET占位符格式:我叫{0}。我有{0:0.00}美元。
symfony
Symfony占位符格式:我叫%name%。我有%placeholder_1%美元。
未命名的占位符将导出为placeholder_n
在哪里n
占位符的位置索引。
i18n
在许多工具和框架中使用的通用格式(例如,在基于javascript的应用程序的某些i18n解决方案中):我的名字是{{name}}。我有{{0}}美元
.
生
不会对占位符应用任何格式,因为它们将按原样导出。