有没有适用于iOS伪本地化的好工具?

16

我想开始查看我们在本地化 iOS 代码方面的全面性。虽然我们还没有准备好去找翻译人员,但我想开始测试使用伪本地化。将这个过程自动化到 Localizable.strings 文件中应该很容易,但我似乎找不到任何能够实现此功能的工具。实际上,如果有这样的工具,我会满意一个只将所有字符串更改为“NOT ENGLISH!” 的脚本。


即使其他人可能会将其标记为购物问题,但我还是要点赞+1。 - newenglander
5个回答

20
你可以使用Translate Toolkit来完成这一操作。首先,你需要使用prop2po转换器将.strings文件转换为PO格式:
$ prop2po Localizable.strings en.po

这将创建一个带有Localizable.strings文件中字符串作为源字符串的PO文件 (在本例中,我使用英语作为源语言)。
一旦您拥有了PO文件,可以使用podebug来重新编写它,以所需的重写格式重新编写。
$ podebug --rewrite=unicode en.po en_rewritten.po

最后将其转换回 .strings 格式(注意需要将原始的 Localizable.strings 文件作为模板传递):
$ po2prop en_rewritten.po rewritten.strings -t Localizable.strings

生成的文件将类似于这样:
"Account: %@" = "Ȧƈƈǿŭƞŧ: %@";

"Add command" = "Ȧḓḓ ƈǿḿḿȧƞḓ";

"Add connection." = "Ȧḓḓ ƈǿƞƞḗƈŧīǿƞ."

是的!这正是我正在寻找的。如果有人在某个时刻查看此内容并且安装时遇到问题(我有过这种情况),请使用“sudo python ./setup.py install”而不是指令中所说的“su ./setup.py install”。 - Mike
1
非常接近了,我已经成功完成了前两个步骤,但第三个步骤还没有成功:%po2prop -t Localizable.strings en_rewritten.po rewritten.strings 正在处理1个文件...po2prop:警告:处理错误:输入en_rewritten.po,输出rewritten.strings,模板Localizable.strings:'ascii'编解码器无法在位置10-11中编码字符:序数不在范围内(128) [###########################################] 100% - David Dunham
你的PO文件中的位置注释是否有非ASCII字符?如果是,bug 2101可能与之相关。 - julen
"$ prop2po Localizable.strings en.po" 对我来说没有起作用。我收到了“prop2po: warning: Error processing: input Localizable.strings, output en.po, template None: 'NoneType' object has no attribute 'split'”的警告。但是,我认为我不需要一个模板?希望你能给我一些提示。 - spikey
1
我怀疑你的文件编码与 prop2po 预期不符(.properties 文件的默认编码是 latin-1)。你可以传递 --encoding=<编码> 选项,或者使用 iconv 或类似工具将文件编码转换为 latin-1。 - julen
@spikey 字符串文件的默认编码实际上是UTF-16,尽管在实践中,我怀疑UTF-8非常普遍。如果您的Python环境没有安装chardet,则Translate Toolkit自动检测属性文件(其中字符串文件是子类型)不会尝试非常努力地查看是否有其他编码可以工作。根据@julen的建议,“--encoding=utf-8”可能会解决这个问题(utf-8是最可能的编码,因为utf-16对您而言失败了,并且也适用于ASCII文件,但不适用于任何ISO_8859-*编码)。 - Alex Dupuy

4
我发现这里还没有提到的两个解决方案:

1
Babble-on免费服务的优点是您可以得到两个文件:一个带有中文字符的ASIAN文件,这使得未翻译的字符串更容易识别,以及一个类似于法语和德语等语言的30%更长的EUROPEAN文件。这对于测试GUI非常有用。 - Localizer
另一个快速而免费的工具是http://www.pseudolocalize.com-单击即可获取伪本地化版本 - JerSchneid
@JerSchneid 无法使用 Localizable.strings 文件工作。 - Dan Rosenstark

3
尽管Translate Toolkit可以提供所需的解决方案,但我寻找了一个更简单的方法,使用bash脚本。创建[changesDictionary.txt]文件(请参见本帖子末尾的格式),并使用语言文件作为参数运行以下脚本:
#  This script translate iOS strings file into pseudo languge for texting usage.
#  the script create a sed change and replace file based on [changesDictionary.txt].
#  the loop run across the input string file (ie. myFyle.strings)
#    and replace the secong strings with the dictionary values.
#  since the strings file is in BOM format (http://en.wikipedia.org/wiki/Byte_order_mark)
#   the input is converted from UTF16 to UTF8.
sed -e 's/^"\(.*\)" = "\(.*\)"$/s\/\1\/\2\/g/' changesDictionary.txt  > changesDictionary.sed

FILENAME=$1

while read -r; do
if [[ $REPLY = '/*'* ]] ; then
    echo "$REPLY"
else
    if [[ $REPLY = '' ]] ; then
        echo "$REPLY"
    else
        if [[ $REPLY = '"'* ]] ; then
            changes2=$(echo "$REPLY" | cut -d= -f2 | sed -f changesDictionary.sed)
            changes1=$(echo "$REPLY" | cut -d= -f1 )
            echo "$changes1=$changes2"
                        echo "$REPLY"
        fi
    fi
fi
done < <(iconv -f UTF-16 -t UTF-8 $FILENAME) | iconv -f UTF-8 -t UTF-16 >$FILENAME.new

脚本会查找以下格式的[changeDictionary.txt]文件:
"a" = "á"
"b" = "β"
"c" = "ç"
"d" = "δ"
"e" = "è"
"f" = "ƒ"
"g" = "ϱ"
"h" = "λ"
"i" = "ï"
"j" = "J"
"k" = "ƙ"
"l" = "ℓ"
"m" = "₥"
"n" = "ñ"
"o" = "ô"
"p" = "ƥ"
"q" = "9"
"r" = "ř"
"s" = "ƨ"
"t" = "ƭ"
"u" = "ú"
"v" = "Ʋ"
"w" = "ω"
"x" = "ж"
"y" = "¥"
"z" = "ƺ"
"\ñ" = "\n"
"$δ" = "$d"
"$ï" = "$i"

您可以使用此示例或创建您自己的示例,请注意在文件中更改最后三个字符串。这是为了将行尾和参数恢复到常规状态。我选择这种方法来简化脚本(我认为性能并未优化)。

1
我们在Tethras(www.tethras.com)的服务中提供伪本地化。伪本地化是免费的。我们会强调您字符串中的所有字符,并将文本长度延长30%。这将帮助您不仅测试硬编码字符串,还可以让您看到由于翻译期间文本扩展而导致布局发生的变化。

示例:

普通文本

我们在Tethras(www.tethras.com)的服务中提供伪本地化作为其中一部分。其中一二三四五六种伪本地化是免费的。其中一二三四五六,我们会强调您字符串中的所有字符并将文本长度延长30%。这将有助于您测试不仅针对硬编码字符串,而且还可以在翻译过程中查看布局的变化。其中一二三四五六七八九十。

Localizable.strings

"Bring All to Front" = "Brïñg Áll tô ƒrôñt ôñè twô";
"Hide" = "Hïdè 12";
"Quit" = "Qúït 12";
"Hide Others" = "Hïdè Óthèrs ôñè ";

赞赏您在翻译之前测试应用的本地化适应性。这将在实际翻译过程中为您节省大量时间和精力。

-1

您可以使用由苹果提供的genstrings工具。在资源编程指南的字符串部分中有详细说明。


genstrings会生成我的Localizable.strings文件,这一点我已经做到了,但它生成的文件要么将键作为值,要么使用默认值。我正在寻找一种能够接收genstrings的输出,并将其值更改为伪本地化的工具。 - Mike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接