具有本地化应用名称的多个目标的本地化项目

我最近将5个独立项目合并到一个项目中,以build立一个共同的代码库。 所以现在我有一个项目有5个目标。

每个目标具有相同的文件集,除了每个目标(例如Default.png,以及其他图标文件)不同的一些文件。 我的应用程序被翻译成7种语言,默认为英文。 其他语言是:瑞典语,荷兰语,德语,法语,波兰语和西class牙语。
现在我也想根据使用的语言翻译应用程序的名称。 例如,对于我的瑞典航空应用程序,这个应用程序应该被称为“Flyget ARN”(瑞典语),但英语应该被称为“航空ARN”(Aviation ARN)。 所有这些都不是问题,因为这是在InfoPlist.string完成的,但是将其与本地化应用程序相结合是一个问题。

我最近写了这个问题: 几个本地化仍然只显示英文 ,发现我不能合并几个.strings文件。 (见我写的答案)。

所以我的问题是以下几点:
如何从包含多个目标的项目获得本地化的应用程序,并且还可以本地化我的应用程序名称,而不会产生DRY违例(重复代码)。

更新
这仍然是一个问题,给出的答案不能解决我的问题。

我在一个XCode项目中破解了这个问题,我相信它解决了同样的问题,所以希望这会对你有所帮助。 该解决scheme包含两个从相同的代码库(使用不同的应用程序名称)构build的目标,并完全本地化,包括应用程序的名称。 (它构build了我的免费增值应用程序,称为增长 (法语: Croxt ,西class牙语: Crecer )和付费版本称为增长+ (法语: Croxt + ,西class牙语: Crecer + )。

我也偶然发现InfoPlist.string文件(其中只包含应用程序的名称)。 我通过在我的解决scheme中使用子文件夹来解决问题,并更改目标以包括来自相关子文件夹的本地化InfoPlist.strings集合。 具体来说,我有这样的结构:


    根
     +  -  en.lproj
     | +  -  Localizable.strings
     | +  -  SomeXib.xib
     +  -  es.lproj
     | +  -  Localizable.strings
     | +  -  SomeXib.xib
     +  -  fr.lproj
     | +  -  Localizable.strings
     | +  -  SomeXib.xib
     +  -  OnlyInAppA
     | +  -  en.lproj
     | | +  -  InfoPlist.strings
     | +  -  es.lproj
     | | +  -  InfoPlist.strings
     | +  -  fr.lproj
     | +  -  InfoPlist.strings
     +  -  OnlyInAppB
     | +  -  en.lproj
     | | +  -  InfoPlist.strings
     | +  -  es.lproj
     | | +  -  InfoPlist.strings
     | +  -  fr.lproj
     | +  -  InfoPlist.strings
     +  -  AppA.plist
     +  -  AppB.plist

除了不同的预处理器符号和不同的.plist文件之外,我的目标(除了不同的预处理器符号和唯一的区别)是AppA的构build设置包括OnlyInAppA下的Info.Plist.strings文件,而AppB的构build设置包括OnlyInAppB下的Info.Plist.strings文件。

我个人认为,我使用的命名约定(OnlyInAppA / OnlyInAppB文件夹,AppB / AppB plist文件)足以certificate这是一个令人满意的方法。

编辑:

请参阅这两个XCode 4截图,以查看在哪里find目标中更改的设置。

  1. 在目标版本设置中,指定了不同的plist文件(注意:添加新目标时,XCode自动为您执行此操作) 构建设置截图

  2. 在目标构build阶段的Copy Bundle Resources部分,从相关的OnlyInAppX子文件夹中selectInfoPlist.strings的版本(请注意,此截图中InfoPlist.strings旁边的灰色文本 – 这将显示另一个目标的不同位置) 。 您可以通过使用+/-button来实现这一点,并replace预期的文件。 构建阶段截图

如果这个问题仍然存在:我已经find了一个解决scheme,如何为您的项目中的每个目标本地化添加多个InfoPlist.string。 请按照以下步骤操作:

  1. 我假设你已经有了多个目标。
  2. 转到Finder中的项目文件夹。
  3. 为每个目标创build一个特定的文件夹:

    create folders

  4. 在每个文件夹中创build一个InfoPlist.strings文件:

    create files

  5. 将文件夹添加到目标, 指定项目中每个文件夹的正确(且仅限!)目标:

    add folders to targets

  6. 删除每个新目标的原始InfoPlist.strings文件的目标依赖关系。

    remove target dependencies for old .strings file

  7. 本地化新的InfoPlist.strings文件:

    localize new fileslocalize new files

  8. 构build目标并通过更改语言设置进行检查:

    french versionenglish version

只需将所有InfoPlist.strings文件保存在不同的path下。 每个人只会是一个目标的成员。

还是我不明白这个问题?

我有一个类似的设置,我的相同的软件支持多个域,每个域访问各种模块(例如博客,论坛)完全相同的path。 为了保留每个域的个性,尤其是当数据库服务不可用时,我保留文件中的重要信息,基本上是元信息。 对于本地化,我会保留一个variables保留每个网站/项目的默认语言。 您可以确定包含信息的文件以拥有自己的域,或者将所有项目存储在同一个文件中,无论使用哪种方式进行最终的备份,或者如果您只是没有进一步的公共选项,比你,直到你实现这样的选项(用户可以覆盖语言选项)。

我一直在为我的应用程序做这个。

当我更改手机的默认语言时,它会正确地选取我的每个infoPlist.strings文件中的名称。

但是我从零开始做这件事。 我不知道你是否需要备份来获得你想要的行为。 也许将任何本地化文件夹中的各种infoPlist.strings文件保存在一边,然后执行以下步骤,然后从您当前的infoPList.strings文件中重新插入内容到新创build的文件中,步骤如下。

我正在使用Xcode 4.3。 步骤:

1)在info-plist.strings中设置你想要的默认语言的string。 你应该得到一个单一的文件:

第一个infoPlist.strings文件

2)现在,打开文件检查器

在这里输入图像说明

3)在最右侧的检查员中,您现在可以单击导航器底部的+号:

在这里输入图像说明

4)一旦你select了你感兴趣的语言,他们将会出现在左边的项目导航器中,如下所示:

在这里输入图像说明

您也可以为Localizable.strings和其他文件(例如下面的示例照片中的index.html)执行此操作:

在这里输入图像说明

试试看看iTunesConnect_DeveloperGuide

并看到“添加新的本地化”

在这里您可以为每种语言编写一个本地化的应用程序名称

Interesting Posts