<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.ibtool.errors</key>
<array>
<dict>
<key>description</key>
<string>Interface Builder could not open the document "xx.storyboard" because it does not exist.</string>
</dict>
</array>
</dict>
</plist>
Iconv: ./xx/Base.lproj/xx.strings.new: No such file or directory
Rm: ./xx/Base.lproj/xx.strings.new: No such file or directory
Merging xx.strings changes for en.lproj...
Merging xx.strings changes for ja.lproj...
Command /bin/sh emitted errors but did not return a nonzero exit code to indicate failure
在故事板中,有2个子文件:xx.storyboard(Base)和xx.storyboard(Japanese)
在第一次构建中,不会发生错误。一切都很顺利。应用本地化非常好。
在第二个版本中,我在故事板中进行了一些更改(添加了一些新功能),然后发生错误。此外,xx.storyboard(日语)变为空白,这很奇怪。我花了很多精力翻译这些东西,现在我必须再做一次......
我认为脚本存在一些问题,即strings.new和strings.old ......
这是脚本:
#!/bin/sh
# Update storyboard string files
#
# by 2013 André Pinto andredsp@gmail.com
# based on http://forums.macrumors.com/showthread.php?t=1467446
storyboardExt=".storyboard"
stringsExt=".strings"
newStringsExt=".strings.new"
oldStringsExt=".strings.old"
localeDirExt=".lproj"
baselprojName="Base.lproj"
# Find Base internationalization folders
find . -name "$baselprojName" | while read baselprojPath
do
# Get Base project dir
baselprojDir=$(dirname "$baselprojPath")
# Find storyboard file full path inside base project folder
find "$baselprojPath" -name "*$storyboardExt" | while read storyboardPath
do
# Get Base strings file full path
baseStringsPath=$(echo "$storyboardPath" | sed "s/$storyboardExt/$stringsExt/")
# Get storyboard file name and folder
storyboardFile=$(basename "$storyboardPath")
storyboardDir=$(dirname "$storyboardPath")
# Create strings file only when storyboard file newer
newer=$(find "$storyboardPath" -prune -newer "$baseStringsPath")
[ -f "$baseStringsPath" -a -z "$newer" ] && {
echo "$storyboardFile file not modified."
continue
}
# Get New Base strings file full path and strings file name
newBaseStringsPath=$(echo "$storyboardPath" | sed "s/$storyboardExt/$newStringsExt/")
stringsFile=$(basename "$baseStringsPath")
echo "Creating default $stringsFile for $storyboardFile..."
ibtool --export-strings-file "$newBaseStringsPath" "$storyboardPath"
iconv -f UTF-16 -t UTF-8 "$newBaseStringsPath" > "$baseStringsPath"
rm "$newBaseStringsPath"
# Get all locale strings folder with same parent as Base
ls -d "$baselprojDir/"*"$localeDirExt" | while read localeStringsDir
do
# Skip Base strings folder
[ "$localeStringsDir" = "$storyboardDir" ] && continue
localeDir=$(basename "$localeStringsDir")
localeStringsPath="$localeStringsDir/$stringsFile"
# Just copy base strings file on first time
if [ ! -e "$localeStringsPath" ]; then
echo "Copying default $stringsFile for $localeDir..."
cp "$baseStringsPath" "$localeStringsPath"
else
echo "Merging $stringsFile changes for $localeDir..."
oldLocaleStringsPath=$(echo "$localeStringsPath" | sed "s/$stringsExt/$oldStringsExt/")
cp "$localeStringsPath" "$oldLocaleStringsPath"
# Merge baseStringsPath to localeStringsPath
awk '
NR == FNR && /^\/\*/ {
x=$0
getline
a[x]=$0
next
}
/^\/\*/ {
x=$0
print
getline
$0=a[x]?a[x]:$0
printf $0"\n\n"
}' "$oldLocaleStringsPath" "$baseStringsPath" > "$localeStringsPath"
rm "$oldLocaleStringsPath"
fi
done
done
done
Localizable.strings和InfoPlist.strings仍然很好。
任何人都有这方面的经验帮助我...是xcode,脚本文件或xx.strings文件的东西?我不明白......
我可以直接问脚本的创建者,但我认为在这里发布问题会更好。我是一个如此情人:)
答案 0 :(得分:1)
我认为这是解决方案:
转到xx.xcodeproj-&gt;靶&GT;构建阶段 - &gt;运行脚本 - &gt;勾选“仅在安装时运行脚本”
我不知道如何,为什么但这似乎解决了这个问题...我认为因为脚本运行时安装在ios模拟器上,所以当我构建时,它找不到xx.storyboard ...
仍欢迎任何其他答案。我仍然不能满足于这个,因为这个解决方案无法保证。
答案 1 :(得分:1)
我认为本地化只发生在安装应用程序期间。因此,由于脚本处理本地化资源,因此您的解决方法完全有理由继续工作。请注意,本地化中的许多内容都已更改,因此有必要查看位于Apple开发人员网站上的链接internationalization guide。该链接包含提供进一步说明的特定视频和编程主题。值得考虑的一些事情是,如果您只打算使用单个视图控制器,则应使用Autolayout。这将确保您使用每种语言正确翻译大小。
答案 2 :(得分:1)
我使用的是与您相同的脚本,并且遇到了与您相同的问题。然后我来自AppliedIS的found these articles,详细介绍了他们对I18n和L10n的处理过程。他们使用了这个脚本的更新版本,似乎更加强大。
它们还有一个脚本,用于从NSLocalizedString
语句中提取键,并为每个语言环境生成Localizable.strings
。该脚本在生成新条目时使用注释作为值,这非常聪明。
我现在已切换到这些,看起来更快(可能只是我; ooh, new == faster
),有更多输出(很适合调试),它也可以在没有Run script only when installing
的情况下工作。
看看吧! (我不会以任何方式与他们联系,只是一个快乐的用户)