【问题标题】:How does incremental localization work?增量本地化如何工作?
【发布时间】:2012-01-14 03:45:21
【问题描述】:

我正在尝试构建我的第一个本地化应用程序。我使用 NSLocalizedString 翻译了代码中的所有字符串(用于genstrings 工具)。现在我碰到ibtool。增量本地化如何工作?关于手册页,我应该这样写:

$ ibtool --previous-file path/to/prev.xib \
--incremental-file path/to/inc.xib --localize-incremental \
--write path/to/new.xib mod.xib

从哪里获取增量文件?据我了解,如果我使用版本控制(git/svn),“旧”文件是在几次提交之前,增量文件是 diff 和 path/to/new.xib 是新生成的 xib 文件。 mod.nib 对我来说是个谜。谁能解释我这是如何工作的?另外 - 如果没有以前的版本可用(即不增量,而是初始本地化),我如何开始 xib 的本地化?

【问题讨论】:

    标签: ios cocoa localization xib ibtool


    【解决方案1】:

    我认为他们对术语的选择,尤其是--incremental-file,正在引起混乱。这个想法是您有两种语言(源语言和目标语言)的旧版本 xib,并且您已经在源语言中对其进行了更改,并希望更新目标语言版本以匹配。

    让我们举个例子。您以前有英文(源语言)的 home.xib,并请人将其翻译成法文(目标语言)。从那以后,您开发了一个新功能,并且现在有了更新的英文版 home.xib,您在其中添加了一个 UILabel 和一个 UITextField 并移动了一些东西。您显示的命令可以帮助您获得法语版 home.xib 的更新版本,以便它具有新的 UILabel 和 UITextField,并且可以像英语一样移动内容。请注意,您在新的 UILabel 和 UITextField 中设置的任何文本内容都将以英语添加,然后需要翻译成法语 xib(但您可以通过添加 --import-strings-file 并在另一个文件中提供翻译来自动执行此操作) .

    因此,如果我们将您显示的命令映射到此示例:

    • --previous-file path/to/prev.xib 指定旧英文xib
    • --incremental-file path/to/inc.xib 指定古法语xib
    • --write path/to/new.xib 指定将要创建的新法语 xib
    • mod.xib 指定新的英文xib

    关于您如何启动流程的其他问题,实际上这取决于您将如何本地化您的 xib。您显然会创建 xib 的新语言版本(在 XCode 中,您只需将一种语言添加到 xib 的语言列表中,并且会自动创建本地化的 xib)。然后,如果您自己在 Interface Builder 中本地化它们,那么您只需在本地化的 xib 中进行相关更改(文本翻译和任何必要的调整大小)。或者,您可以将 xib 中的文本提取到 .strings 文件中,翻译它们,然后将它们注入这些 xib 的相关语言版本中。为此,您将再次使用 ibtool,但 --generate-strings-file 用于提取阶段,--import-strings-file 用于注入阶段。

    【讨论】:

    • 如果我使用版本控制,关于生成“旧英语 xib”的任何提示?
    • 假设您的所有 xib 都在版本控制中(它们绝对应该是!),旧的英文 xib 就在您的版本历史记录中可供您使用。我们正在假设英语是您的基本语言,也是您要翻译的语言。
    • 对,所以为了得到那个旧的英文文件,我应该从上次更新翻译的版本控制中检查它。这似乎有点乏味。我想我也无能为力了。感谢您的回答!
    • 作为替代方案,您可以从应用程序包中获取。当您更经常地进行本地化时,您会变得井井有条,并且每次进行本地化时都会保留所有版本的 xib,因此您也可以从这些文件中选择前一个版本!
    【解决方案2】:

    我为 git 项目编写了一个脚本,它自动执行必要的步骤(如上面的 answer 中所述)以将更改迁移到不同的语言。

    用法:

    migrate_changes.sh <target_language> <xib file without ending>
    

    示例:

    在您提交对英语 xib 文件的更改后,在资源文件夹的根目录运行脚本。

    migrate_changes.sh de MyViewController
    

    来源:

    #!/bin/sh
    
    LANG_FROM='en'
    LANG_TO=$1
    XIB_FILE=$2
    
    FROM_FILE=${LANG_FROM}.lproj/${XIB_FILE}.xib
    PREV_FILE=${LANG_FROM}.lproj/${XIB_FILE}_old.xib
    TO_FILE=${LANG_TO}.lproj/${XIB_FILE}.xib
    
    # checkout old version of xib file
    git show `git log -2 --format="%H" $FROM_FILE | tail -n 1`:./$FROM_FILE > $PREV_FILE
    
    # merge changes
    ibtool --previous-file $PREV_FILE --incremental-file $TO_FILE --localize-incremental --write $TO_FILE $FROM_FILE
    
    # remove previous version
    rm $PREV_FILE
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      • 2015-01-18
      • 1970-01-01
      • 2011-06-01
      相关资源
      最近更新 更多