drd*_*man 6 translation localization list dynamic internationalization
处理动态列表的翻译和本地化的最明智方法是什么?
假设我已经查询了数据库,并得到了一个 list ["Foos", "Bars", "Bazes"]。我们还假设列表总是至少包含两个项目 - 我一定会为单项目情况使用不同的翻译。
如果我需要诸如“我们的代码中有多种 Foos、Bars 和 Bazes 选择”之类的短语,我该怎么办?(假设列表项是动态的,所以我不能只是预翻译所有可能的排列,并且需要在运行时做一些事情。)
我至少看到以下问题:
我需要将所有项目变形为正确的形式(是否存在根据列表中的位置需要不同形式的语言?)
不同的地区可能对如何加入项目有截然不同的规则。
我的问题是,我什至不知道这里有什么工具可以帮助我。我没有任何特定的编程语言要求,尽管 Python 或 JavaScript 会是最好的。但我想我几乎可以运行任何东西,因为我可以构建一个 l10n 微服务并从我的项目中查询它。
在遇到这个问题之前,我已经使用过 GNU gettext,但是我还没有找到任何可以帮助我处理它的 API 和数据格式的东西。我能想象到的最好的方法是使用一些 DIY 技巧_("We have a wide choice of %s in our code", list_text)生成list_text。我不确定 XLIFF 格式是否也有类似的内容。我发现i18n-list-generator在故宫,但它的方式太simplicistic。
有没有人处理过这样的事情?你做了什么?是否有任何库可以处理这个问题——所以我可以看看它的 API 并了解它是如何做的?
小智 3
我的处理方法如下:
没有串联。所有字符串连接都需要通过带有占位符的格式字符串来完成。
仅使用支持命名/编号占位符的格式字符串。例如{FOO}或$1代替%s(这是为了允许参数重新排序)。命名占位符也更好,因为它们为翻译人员提供了更多上下文。假设我们使用{FOO}-style 占位符。
为了呈现列表,我将使用几个格式字符串,例如:joinItem = "{LIST}, {ITEM}"将项目附加到列表并joinLastItem = "{LIST} and {ITEM}"附加最后一个项目。这将允许人们渲染诸如 之类的字符串Foos, Bars and Bases,更改标点符号,甚至在必要时反转列表的顺序。
最后,您可以使用最终的格式字符串,例如weHaveTheseItems = "We have a wide choice of {ITEMS} in our code",假设{ITEMS}被替换为先前呈现的字符串。
无耻的自我推销:您可能想看看支持此类占位符以及复数形式的Plurr库(您可能需要此类消息)。{FOO}它支持 JavaScript 以及其他语言。