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

Posted

技术标签:

【中文标题】使用附加字符串本地化 Info.plist 变量【英文标题】:Localizing Info.plist variable with appended string 【发布时间】:2015-01-06 13:12:32 【问题描述】:

我正在尝试本地化应用程序的名称,同时仍然能够根据构建配置附加字符串。所以目前设置为:

<key>CFBundleDisplayName</key>
<string>$PRODUCT_NAME$BUNDLE_DISPLAY_NAME_SUFFIX</string>

该设置定义为:

通过这种方式,我们可以为我们的不同 beta 版本添加后缀。问题是当我们尝试在本地化的InfoPlist.strings 中本地化应用显示名称时,像这样

CFBundleDisplayName = "Localized App Name";

我们覆盖存储在Info.plist 中的值,并丢失后缀字符。有什么好办法解决这个问题吗?我们希望避免拥有多个 Info.plist 文件。

【问题讨论】:

如何覆盖存储在 Info.plist 中的值?你手动做的? 由于缺乏声誉,无法发表评论,抱歉。 @Romain 的答案是正确的,但我花了一整天的时间让它工作。事情是在编译源阶段和复制捆绑资源阶段之后放置脚本。希望它会帮助别人。 【参考方案1】:

您将需要一个自定义脚本来执行此操作。这是对我有用的一个

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 的输出括在引号中

以上是关于使用附加字符串本地化 Info.plist 变量的主要内容,如果未能解决你的问题,请参考以下文章

如何本地化iOS info.plist文件中的字符串?

如何本地化 iOS info.plist 文件中的字符串?

如何在 iOS info.plist 文件中本地化字符串数组

在 info.plist 上放置一个资源字符串(来自 infoPlist.strings)

Info.plist

Xcode 找不到本地化的 info.plist