如何使用gettext处理未定义长度列表?

时间:2011-10-01 16:18:05

标签: localization gettext

我想翻译以下格式的字符串:

  

删除文件toto,tata和titi。

第一个想法是使用Delete files %s,但后来我考虑了复数形式。

如果某种语言最后没有加上“和”,但是例如,最后一项和前一项的两个不同的单词会怎么样。

所以这里有两个问题:

  • 你知道这样的语言吗?
  • 你知道处理这种情况的更好方法吗?

1 个答案:

答案 0 :(得分:2)

这更复杂。

实际上,您似乎只需要在单数和复数形式之间进行选择(尽管语言可以有多种复数形式)。 所以基本上是Do you want to delete this file: %s?Do you want to delete these files: %s?。我不能说所有的语言,但这在波兰语中是可以的 但是,如果你想放入数量(这是一个相当好的主意),你最终会得到多个复数形式: Do you want to delete this file: %s(翻译时为Czy chcesz usunąć ten plik: {0}?)或Do you want to translate these %n files: %s翻译为Czy chcesz usunąć te %n pliki: %s?Czy chcesz usunąć tych %n plików: %s?

至于列表,CLDR charts可能是如何处理它们的良好信息来源 - 查找 listPattern 。下面我将介绍波兰图表中的一个片段:

enter image description here

{0}和{1}是占位符,您提供的列表如下所示:toto; tata i titi。我仍然不完全确定这是它应该是什么样的(波兰语我更倾向于toto, tata i titi)但理论上你可以使用这些信息创建一个列表。
在另一个答案中,我声称实际上不可能在一般情况下创建这样的列表(无论语言如何),并且人们倾向于使用列表视图控件进行选择或将数据作为垂直列表来避免问题。您的示例需要修改为:

These file(s) would be deleted:  
toto  
tata  
titi  
Are you sure?

这可能有问题(可能不适合屏幕),但这是人们经常采取的措施,以避免外语列表出现问题。