28

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

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

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

所以我的问题如下:
如何从包含多个目标的项目中获得本地化的应用程序,并在没有 DRY 违规(重复代码)的情况下本地化我的应用程序名称。

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

4

6 回答 6

20

我在一个 XCode 项目中解决了这个问题,我相信它可以解决与您相同的问题,所以希望这会对您有所帮助。该解决方案包含两个从相同代码库构建的目标(具有不同的应用程序名称)并且完全本地化,包括应用程序的名称。(它构建了我的免费增值应用程序,名为Growth(法语:Croissance,西班牙语:Crecer)和名为Growth+(法语:Croissance+,西班牙语:Crecer+)的付费版本。

我还偶然发现了这些InfoPlist.string文件(仅包含应用程序的名称)。我通过在我的解决方案中使用子文件夹解决了这个问题,并更改了目标以包含相关子文件夹中的本地化 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 的构建设置包括 OnlyInAppA 下的 InfoPlist.strings 文件,而 AppB 的构建设置包括 OnlyInAppB 下的 InfoPlist.strings 文件。

在我个人看来,我使用的命名约定(OnlyInAppA/OnlyInAppB 文件夹、AppB/AppB plist 文件)非常明显,足以使这成为一种令人满意的方法。

编辑:

请查看这两个 XCode 4 屏幕截图,了解在哪里可以找到目标中更改的设置。

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

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

于 2012-06-29T11:33:38.163 回答
5

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

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

    创建文件夹

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

    创建文件

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

    将文件夹添加到目标

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

    删除旧 .strings 文件的目标依赖项

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

    本地化新文件 本地化新文件

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

    法语版 英文版

于 2014-02-12T19:32:08.527 回答
2

只需将所有 InfoPlist.strings 文件保存在单独的路径下。每个人都只是一个目标的成员。

还是我没看懂问题?

于 2012-05-09T22:32:23.670 回答
1

我有一个类似的设置,我的同一个软件支持多个域,每个域访问不同模块(例如博客、论坛)的完全相同的路径。为了保持每个域的个性,特别是当数据库服务不可用时,我将关键信息保留在文件中,基本上是元信息。对于本地化,我会保留一个变量,保留每个站点/项目的默认语言。您可以确定包含信息的文件拥有自己的域或将所有项目存储在同一个文件中,无论是您希望将其用于最终后备还是如果您只是缺少对任何/每个具有较低权限的人的进一步公共选项在您实施此类选项之前(用户能够覆盖语言选项)。

于 2012-05-20T20:45:39.687 回答
0

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

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

但我是从头开始的。我不知道您是否必须备份才能获得所需的行为。也许从任何本地化文件夹中保存各种 infoPlist.strings 文件,然后执行以下步骤,然后将当前 infoPList.strings 文件中的内容重新插入到以下步骤中新创建的文件中。

我正在使用 Xcode 4.3。步骤:

1) 在 info-plist.strings 中为您的默认语言设置您想要的字符串。你应该最终得到一个文件:

第一个 infoPlist.strings 文件

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

在此处输入图像描述

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

在此处输入图像描述

4)一旦您选择了您感兴趣的语言,它们将显示在左侧的项目导航器中,如下所示:

在此处输入图像描述

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

在此处输入图像描述

于 2012-06-28T04:22:10.517 回答
-3

尝试查看iTunesConnect_DeveloperGuide

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

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

于 2012-06-28T06:20:04.960 回答