使用附加字符串本地化Info.plist变量

9
我正在尝试本地化一个应用程序的名称,同时仍然可以根据构建配置附加字符串。因此,目前它的设置如下:
<key>CFBundleDisplayName</key>
<string>${PRODUCT_NAME}${BUNDLE_DISPLAY_NAME_SUFFIX}</string>

该设置的定义如下:

Build Setting

这样我们可以为不同的测试版构建在应用程序后缀中添加后缀。问题是,当我们尝试在本地化的InfoPlist.strings中本地化应用程序显示名称时,就会出现以下问题。
CFBundleDisplayName = "Localized App Name";

我们覆盖了存储在 Info.plist 中的值,并且丢失了后缀字符。有没有什么好方法可以解决这个问题?我们希望避免使用多个 Info.plist 文件。

你如何覆盖存储在 Info.plist 中的值?您是手动执行此操作吗? - Brain89
由于声望不足,无法进行评论,抱歉。@Romain的答案是正确的,但我花了一整天的时间使其正常工作。重要的事情说三遍:将脚本放在“编译源代码阶段”和“复制Bundle资源阶段”之后。希望这能帮到其他人。 - drywet
1个回答

12

你需要一个自定义脚本来完成这个任务。这是一个对我有效的脚本。

PREFIX_IDENTIFIER="=com.mycompany.bundlenameprefix="
PREFIX=""

if [ $CONFIGURATION == "Debug" ]
then
    PREFIX="α "
fi

if [ $CONFIGURATION == "Enterprise" ]
then
    PREFIX="β "
fi

for i in `dirname "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"`/*.lproj/InfoPlist.strings
do
    plutil -convert json "$i"
    sed -i -e "s/${PREFIX_IDENTIFIER}/${PREFIX}/g" "$i"
    plutil -convert binary1 "$i"
done

然后在您的InfoPlist.strings文件中添加一个前缀到包名称,例如:

CFBundleDisplayName = "=com.mycompany.bundlenameprefix=My App";

很好的答案。对于任何正在进行故障排除的人来说,如果您的目标构建目录中有空格,则需要用引号括起dirname的输出。 - Tyler V

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