【问题标题】:Change strings language in Android Activity在 Android Activity 中更改字符串语言
【发布时间】:2015-08-27 12:15:55
【问题描述】:

我正在做一个多语言的应用程序。我理解 string.xml 的概念,用于将应用语言设置为手机的默认语言。有什么方法可以覆盖这个吗?例如,如果我有一部在西班牙使用的西班牙手机,但我仍然想拥有英文版的应用程序?

【问题讨论】:

    标签: java android android-activity locale


    【解决方案1】:

    您可以通过一个简单的函数以编程方式更改应用的语言(区域设置)。您只需要实现一种类似于下面的方法,该方法接收一个字符串作为参数(例如英语的“en”,西班牙语的“es”),您可以在其中为您的应用程序配置语言环境并刷新您当前的活动来反映变化。在您再次手动更改之前,您应用的语言环境不会更改。

    public void setLocale(String lang) { 
        myLocale = new Locale(lang); 
        Resources res = getResources(); 
        DisplayMetrics dm = res.getDisplayMetrics(); 
        Configuration conf = res.getConfiguration(); 
        conf.locale = myLocale; 
        res.updateConfiguration(conf, dm); 
        Intent refresh = new Intent(this, AndroidLocalize.class); 
        startActivity(refresh); 
        finish();
    } 
    

    确保您导入以下包:

    import java.util.Locale; 
    import android.os.Bundle; 
    import android.app.Activity; 
    import android.content.Intent; 
    import android.util.DisplayMetrics; 
    import android.content.res.Resources;
    import android.content.res.Configuration;
    

    在你的活动标签内的清单中添加android:configChanges="locale|orientation"

    【讨论】:

    • 简单而快速@Andreu... +1 A mes... no hi ha molta gent de Barcelona per aqui ;)
    • 看起来好得令人难以置信。当我有机会时我会测试它,如果它像你说的那样有效,它绝对值得+50!
    • 好的,你检查的时候告诉我:)
    • 该死的,它像发条一样工作!我真的印象深刻。我通常以艰难的方式学习编程(一周的反复试验)。但是,我什至不会在一周内亲自找到答案。由于它正在重新启动应用程序,因此我必须在重新启动之前将其他设置保存到临时文件中,然后在重新启动时查看是否保存了临时文件,如果有,请读取它,设置我的设置并删除临时设置文件。但我真的很惊讶,你为我节省了很多时间和挫败感。盯上安德鲁!
    • 这个反馈是对我最好的奖励。谢谢你:)
    【解决方案2】:

    EDIT 正如正确提到的,这不是 OP 所要求的,但我仍将其留在这里,以防万一有人在这里试图解决我的回答。

    来自 Android 开发者页面:

    如何创建替代资源

    本地化应用程序的很大一部分是提供替代方案 不同语言的文本。在某些情况下,您还将提供 替代图形、声音、布局和其他特定于语言环境的 资源。

    一个应用程序可以指定许多 res// 目录,每个目录 具有不同的限定符。为一个替代资源创建一个 不同的语言环境,您使用指定语言或 语言-地区组合。 (资源目录的名称必须 符合提供备选方案中描述的命名方案 资源,否则无法编译。)

    例子:

    假设您的应用程序的默认语言是英语。认为 您还希望将应用程序中的所有文本本地化为 法语,以及应用程序中的大部分文本(除 应用程序的标题)到日语。在这种情况下,您可以创建 三个可选的 strings.xml 文件,每个文件都存储在特定于语言环境的文件中 资源目录:

    res/values/strings.xml
    Contains English text for all the strings that the application uses, including text for a string named title.
    res/values-fr/strings.xml
    Contain French text for all the strings, including title.
    res/values-ja/strings.xml
    Contain Japanese text for all the strings except title.
    

    如果您的 Java 代码引用 R.string.title,将会发生以下情况 在运行时:

    If the device is set to any language other than French, Android will load title from the res/values/strings.xml file.
    If the device is set to French, Android will load title from the res/values-fr/strings.xml file.
    

    请注意,如果设备设置为日语,Android 将查找 res/values-ja/strings.xml 文件中的标题。但因为没有这样 字符串包含在该文件中,Android 将回退到 默认,并且会从 res/values/strings.xml 文件。

    这里还有原始链接供参考:http://developer.android.com/guide/topics/resources/localization.html

    【讨论】:

    • 我认为 OP 并没有问这个问题,我认为他问的是如何以编程方式更改选定的语言环境(似乎他已经知道他可以设置不同的 strings.xml 文件)
    • 是的,这就是我所说的“我理解 string.xml 的概念,用于将应用程序语言设置为手机的默认语言”。不过还是谢谢官方的描述。我从来没有红过这个,但我很难学会:)所以它是+1 ;-)
    • 顺便说一句,我一直在四处寻找,但找不到。有人有链接到列出所有官方语言代码的地方(英语、hi-hindi、ja-japaneese、fr-法语等)吗?
    • 有人吗?我在link 找到了这个列表,但它不可能是完整的列表?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多