我们建议您将所有平台密钥(例如,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

接下来,选择占位符的格式高级设置部分:

最后,点击构建和下载预览.结果如下:

如您所见,通用占位符被正确地替换为{{名称}}.伟大的工作!

方法下载文件时也可以获得相同的结果APICLI

平台特定的占位符格式

假设我们有以下字符串和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}}美元

不会对占位符应用任何格式,因为它们将按原样导出。

这回答了你的问题吗?