iPhone本地化文件夹中的子文件夹

时间:2012-12-06 18:59:36

标签: iphone ios xcode localization

我想在我的iPhone项目中本地化一些图像。所以我创建了文件:

en.lproj/Images/iPad/btn-check-pressed~ipad.png
en.lproj/Images/iPadRetina/btn-check-pressed@2x~ipad.png
ru.lproj/Images/iPad/btn-check-pressed~ipad.png
ru.lproj/Images/iPadRetina/btn-check-pressed@2x~ipad.png

依此类推,并将它们添加到我的项目中。但Xcode在“本地化”列表中显示“英语0文件已本地化”,“俄语0文件已本地化”。

它还会显示警告

Warning: Multiple build commands for output file /Users/User/Library/Developer/Xcode/DerivedData/TestLocalizationDefaultPNG-ckplzmcjurofxrccjuvyzjaqketc/Build/Products/Debug-iphonesimulator/TestLocalizationDefaultPNG.app/btn-check-pressed~ipad.png

当我尝试构建项目时,

我的每个文件。所以,据我所知,它将所有文件复制到一个文件夹中,因为我的文件名称相同 - 只有其中一个可以存活。但是,如果我删除我的子文件夹:

en.lproj/btn-check-pressed~ipad.png
en.lproj/btn-check-pressed@2x~ipad.png
ru.lproj/btn-check-pressed~ipad.png
ru.lproj/btn-check-pressed@2x~ipad.png

一切正常。

是否有办法保留子文件夹?清单2-4中的http://developer.apple.com/library/ios/#documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html子文件夹用于音频文件,因此它应该是。

1 个答案:

答案 0 :(得分:2)

看起来iOS中本地化工作的唯一方式是不同的。您应该反转基础文件夹层次结构:首先进入实际的文件夹结构,并在要本地化的每个文件夹中,将相应的.lproj子文件夹放入本地化资源。所以在你的例子中应该是这样的:

/Images
 /iPad
  /en.lproj
    btn-check-pressed~ipad.png
  /ru.lproj
    btn-check-pressed~ipad.png
 /iPadRetina
  /en.lproj
    btn-check-pressed@2x~ipad.png
  /ru.lproj
    btn-check-pressed@2x~ipad.png

如果您打算使用大型层次结构,这可能是次优的,但这是开箱即用的唯一方法。

当然,您总是可以说您不需要Xcode支持并使用一些自定义构建规则以您喜欢的方式重新排列项目中的文件,然后在构建期间将它们复制到适当的结构中但我怀疑它的价值的烦恼。

更新:看起来XCode( 4.5 )构建脚本是主要恶棍。

根据我的实验,构建脚本应该至少为图像平整资源结构。因此,本地化应用程序可以在其中的唯一方式是:

/YourApp
 YouApp
 info.plist
 ....
 /en.lproj
   btn-check-pressed~ipad.png
   btn-check-pressed@2x~ipad.png
 /ru.lproj
   btn-check-pressed~ipad.png
   btn-check-pressed@2x~ipad.png

诀窍是默认情况下,XCode(从版本4.5开始)只有在如上所述的情况下才能展平您的项目结构,并且我没有看到改变此行为的标准方法。

当然,关于自定义构建脚本的原始评论仍然是正确的。