【问题标题】:priority in res folder in android?android中res文件夹的优先级?
【发布时间】:2012-08-08 05:14:09
【问题描述】:

我做了一个项目,我在其中使用不同语言的 xml,例如 language_hi.xml,language_en.xml。所以根据文档,我为每个 xml 创建了不同的文件夹。例如对于 language_hi.xml 我已经为 language_en 制作了es/values-hi 我已经制作了 res/values-en 并且在我的每个 xml 中的字符串名称是一样的,有什么方法可以在一个按钮单击时选择 language_en.xml 并在另一个事件上选择 language_hi.xml

这是我的 xml

res/values-hi/language_hi.xml

<string name="hello">sachit</string>

<string name="app">colon</string>

res/values-en/language_en.xml

<string name="hello">astro</string>

<string name="app">dev</string>

【问题讨论】:

  • 您的意思是希望能够更改应用程序运行的语言,还是希望从每个 XML 中挑选特定的字符串?
  • 例如我正在做这个 String s1=getResources().getString(R.string.hello);所以在这个阶段,s1 'sachit' 或 'astro' 中会有什么,因为字符串名称 hello 存在于两个 xml 中。那么有什么方法可以从欲望 xml 中选择欲望字符串

标签: android


【解决方案1】:

您可以选择Locale 在运行时使用;例如,将其设置为英语将导致使用 res\values-en\... 文件夹中的值。

为此,需要以下代码:

Resources res = getResources(); // From your context
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = new Locale("en"); // For English
res.updateConfiguration(conf, dm); // Now, update the language

但是,我强烈建议不要使用它。当用户运行应用程序时,他们希望它使用默认语言(在许多情况下是英语)或本地化语言。例如,当某人在俄罗斯时,给某人一个印地语应用程序真的不好。

请记住,如果您在整个应用程序中使用en,则从languages_hi.xml 获取值非常困难,而且实际上在任何情况下都不应该这样做。一个应用程序应该始终使用相同的语言,否则它会开始让用户感到困惑(处理语言之间翻译的应用程序除外)。但是,如果您有兴趣这样做(出于任何深奥的原因),您应该查看this answer

PS:我假设你知道这一点,但我还是应该提一下。如果电话使用的区域设置未使用res\values-xx\... 指定,则使用res\values\... 文件夹中的任何字符串。你可以找到关于这个here的信息。

【讨论】:

    【解决方案2】:

    不,没有。 Android 在运行时根据设备的语言决定语言。您可以强制更改设备的语言,但这不是一个好的解决方案。相反,您可以生成自己的解决方案,并且您可以自己更改每个字符串。例如,您可以根据自己的喜好设置语言选项。然后根据选择的语言,您可以显示该语言的字符串。假设您有一条消息,例如“请输入密码”。您可以编写一个方法 getStringAccordingToLanguage("password_warning")。如果语言为英文,此方法将返回“请输入密码”。你可以用这个方法代替字符串。

    【讨论】:

    • 根据我的经验,在应用程序上强制使用区域设置不会一次用于多个活动。您要么必须在每个 onCreate 上强制使用它,要么正确填写您的字符串文件并请求用户更改平板电脑的语言
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 2012-12-19
    相关资源
    最近更新 更多