【问题标题】:iphone multilanguage supportiphone多语言支持
【发布时间】:2010-08-05 07:12:43
【问题描述】:

我正在开发一个必须支持不同语言的 Iphone 应用程序。

我看到语言必须在我的应用程序中设置,而不是在 iphone 设置中。那么,我是否必须强制该语言改为采用当前语言?我没有在互联网上找到示例。所有示例都需要应用程序的当前语言。我希望用户在应用程序启动时选择他的语言,然后我将设置一个 cookie,并且(以我不知道的方式)应用程序会自动引用我的 .lproj 不同语言的文件夹。

【问题讨论】:

    标签: ios iphone cocoa-touch multilingual


    【解决方案1】:

    这在 iOS 中使用默认的本地化机制是不可能的。默认情况下,系统会根据用户的系统语言选择 .lproj 文件夹,如果您已本地化 NIB 并使用 NSLocalizedString() 等,系统会自动进行本地化。

    如果你真的想改变这种行为并“覆盖”系统语言,你必须实现你自己的 NSLocalizedString 版本,它可以手动访问你想要的 .lproj 文件夹中的字符串文件。请注意,NIB 不使用您的自定义 NSLocalizedString 函数。因此,要么根本不使用 NIB,要么在代码中对 NIB 进行本地化,而不是使用不同的 NIB。

    【讨论】:

      【解决方案2】:

      你的问题不是很清楚。没有什么说“语言必须在我的应用程序中设置,而不是在 iphone 设置中”——实际上恰恰相反!

      Cocoa 有一个非常简洁且易于使用的本地化系统(抱怨一些糟糕的本地化工作流程)Here's the full skinny on it — 基本上,在 lproj 文件夹中有文件,然后使用 NSBundle 资源 API 来定位它们(​​NIB 加载和其他子系统自动使用它,所以你甚至不必在那里工作!)。

      【讨论】:

        【解决方案3】:

        IIRC,你想要 NSLocalizedStringFromTable。

        您为每种语言创建一个 .strings 文件:例如“EN.strings”、“JP.strings”等...

        这些文件可以从带有 table 参数的默认包加载到 NSLocalizedStringFromTable。

        当用户选择一种语言时,您切换从哪个表(.strings 文件)加载字符串。

        一个问题是 iOS 字符串仍将本地化到用户的设置,或者本地化到 Info.plist 中的任何应用程序。因此,您最终可能会使用多种语言。

        【讨论】:

          【解决方案4】:
          [[NSUserDefaults standardUserDefaults] setObject: [NSArray arrayWithObjects:@"it",@"en", nil] forKey:@"AppleLanguages"];
          

          如果 iPhone 语言设置为英语,我的 iPhone 应用程序将始终使用“it”。数组的第一个。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-11-08
            • 2011-02-27
            • 1970-01-01
            • 2010-09-18
            • 1970-01-01
            相关资源
            最近更新 更多