Xcode - 面向特定目标的本地化

8
我的项目包括多个目标,每个目标都用于不同的客户。有些客户需要特定的本地化,但我不希望所有客户都得到这种特定的本地化。由于本地化是在项目级别上处理的,我找不到一种方法只为特定目标添加本地化。
有什么建议吗?
寻找稳定的选项,而无需在每次构建之前删除未使用的本地化。

这应该会有所帮助:https://dev59.com/6mkv5IYBdhLWcg3wiRWo - Nitish
3个回答

5
为每个目标创建单独的“Localizeable.strings”。
将正确的字符串文件与每个字符串组链接起来。
然后在每个目标的“Build Phases”中设置正确的“strings”,如下所示: Setting Localizable resource for target

如果我有多个目标,我是否需要为每个目标都有一个Localizable.strings文件,还是只需为需要本地化的目标添加一个即可? - Adrian
你好 @Adrian,每个 localizable.strings 文件都是普通文件。在右侧窗格中(对于任何文件),您可以选择需要该文件的目标(在“目标成员资格”下)。每个文件可以附加到多个目标上。(代码也同样适用) - Yitzchak
我刚刚关机了,但明天早上我会再试一下。从WWDC视频到现在,我尝试过的每一个东西都假设了一个非常简单的应用程序,只有一个目标,并且没有任何效果。感谢您的快速回复。 - Adrian

3
我采用 @Yitzchak 的解决方案并做了额外的更改,成功解决了问题:
  • 在项目级别添加所需语言。
  • 从目标中删除原始的本地化文件。
  • 创建新的 Localizable.strings / InfoPlist.strings 文件并将其添加到目标中。
  • 在“本地化”选项中只选择相关的语言(参见下图)

enter image description here

enter image description here


對於上述解決方案的建議是:我們不需要刪除原始的本地化文件(如果有很多文件,這樣做會很有用),只需取消未在“目標成員資格”部分中需要現有文件的任何目標,當添加新文件時,只需選擇剩餘的目標。 - Trident
这样做不会导致所有语言都出现在AppStore上吗?即使是针对不使用特定语言的目标。 - Joel Rudsberg

2

使用构建阶段脚本从特定目标中删除不需要的语言。这将不会在应用程序或Appstore中显示已删除的语言。

选择你的目标,进入构建阶段,点击左上角的'+',然后选择新建运行脚本阶段,然后添加以下脚本。

# add language code to remove it during build.
for lang in "hi" "fr"
do
    if [ -e "${TARGET_BUILD_DIR}/${PRODUCT_NAME}.app/$lang.lproj" ]; then
        rm -r "${TARGET_BUILD_DIR}/${PRODUCT_NAME}.app/$lang.lproj"
    else
        echo "file does not exists"
    fi
done

您可以添加想要从目标中删除的语言代码。来自您的项目的其余本地化将反映在您的构建中。 enter image description here

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