在Android应用程序中更改区域设置(到印地语)

时间:2015-06-13 12:14:14

标签: android locale hindi

为应用创建多语言支持,可以在应用设置中更改语言。

至于现在一切正常,英语,西班牙语,法语,俄语, 但对印地语和中国人不起作用。

1)我用原始语言指定语言名称 但在应用程序而不是हिन्दी我可以看到“印地语”。

\ RES \值喜\ arrays.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string-array name="languages">
        <item name="english">English</item>
        <item name="russian">Русский</item>
        <item name="spanish">Espagnol</item>
        <item name="russian">Français</item>
        <item name="chineese">中国</item>
        <item name="hindi">हिन्दी</item>
    </string-array>
    <string-array name="languagesValues">
         <item name="english">en</item>
        <item name="russian">ru</item>
        <item name="spanish">es</item>
        <item name="russian">fr</item>
        <item name="chineese">zh-CN</item>
        <item name="hindi">hi</item>
    </string-array>

</resources>

2)选择“印地语”后结束 - 实际上正在选择默认(英语) \ RES \值喜\的strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">लकी बीनने</string>
    <string name="score">0000</string>
    <string name="settings">सेटिंग</string>
    <string name="start_button">प्रारंभ</string>
    <string name="about_button">के बारे में</string>
    <string name="about">लियोनिद द्वारा बनाया गया</string>
    <string name="feedback">प्रतिक्रिया भेजें </string>
    <string name="high_score">उच्च स्कोर के</string>
    <string name="score_set">स्कोर निर्धारित किया गया है \r\nमें:</string>
    <string name="game_over">खेल खत्म</string>

...

在首选项中保存区域设置。

public class Settings extends PreferenceActivity {

    Locale myLocale;
    static boolean localeChanged;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);


        // language changing
        Preference langPreference = getPreferenceScreen().findPreference(
                "language");
        langPreference.setOnPreferenceChangeListener(languageChangeListener);
    }

    Preference.OnPreferenceChangeListener languageChangeListener = new OnPreferenceChangeListener() {

        @Override
        public boolean onPreferenceChange(Preference preference, Object newValue) {

            switch (newValue.toString()) {
            case "en":
                setLocale("en");
                break;

            case "ru":
                setLocale("ru");
                break;

            case "fr":
                setLocale("fr");
                break;

            case "es":
                setLocale("es");
                break;

            case "zh-CN":
                setLocale("zh-CN");
                break;

            case "hi":
                setLocale("hi");
                break;

            }

            localeChanged = true;
            return true;
        }
    };

    // * manually changing locale/
    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, Settings.class);
        startActivity(refresh);
        finish();
    }

有什么问题?我的代码或设备中有什么问题吗?

2 个答案:

答案 0 :(得分:3)

这取决于设备。此外,请转到Hindi - &gt;检查您的设备是否支持ChineseSettings种语言Language & input

答案 1 :(得分:1)

I。首先要做的是:

您的帖子有很多逻辑和拼写错误。 Lint将为此报告错误和警告,并且代码将无法编译。

请查看更正内容:

为应用创建多语言支持,并可以在应用设置中更改语言。

目前,英语,西班牙语,French,俄语, 但不适用于印地语和Chinese

1)我用原始语言指定语言名称 但是在应用程序中,而不是हिन्दी,我可以看到“印地语”。

\ res \ values-hi \ arrays.xml

<string-array name="languages">
    <item name="english">English</item>
    <item name="russian">Русский</item>
    <item name="spanish">Espagnol</item>
    <item name="french">Français</item>
    <item name="chinese">中国</item>
    <item name="hindi">हिन्दी</item>
</string-array>
<string-array name="languagesValues">
     <item name="english">en</item>
    <item name="russian">ru</item>
    <item name="spanish">es</item>
    <item name="french">fr</item>
    <item name="chinese">zh-CN</item>
    <item name="hindi">hi</item>
</string-array>

  

[评论]

     
      
  1. 拼写错误:用中文法语

  2.   
  3. 逻辑错误:两个数组中的键俄语中重复,第二次重复应为法语

    < / li>   

II。 @Chandrakanth答案的改进:

这取决于设备,并且您的设备似乎是,而您的代码是正确的。给您以下原因:

从我的答案开始, 我想引用您的问题:

As for now everything works fine for English, Spanish, French, Russian    
languages, but doesn't work for Hindi and Chinese.

使用中文和印地语时,使用的是以下语言环境,例如字符串资源:

<item name="chineese">zh-CN</item>
<item name="hindi">hi</item>

请重构为:

<item name="chinese">zh</item>
<item name="hindi">hi</item>

因此,您应该将values文件夹用作:

values-zh and values-hi

如果上述正确,则您的应用程序无法在某些设备中接受或识别values-zhvalues-hi

  1. 请分享您的设备品牌,制造商和型号,以便更多 可以做调查。

  2. 您的代码正常,因此您可以在其他任何应用程序中进行测试     和更新的设备。

  3. 请在更改语言环境之前调用该方法     在"setContentView"内部回叫"onCreate"

  4. 也许您可以检查您的设备是否支持印地语和中文     Settings --> Language & input进入语言。

  

我的设备中没有HindiChinese   设置,但仍然可以在hizh中识别语言环境   应用程序,尽管我必须安装相应的字体以防止   后备。

请注意,HindiChinese是来自不同时区的语言环境,因此很可能在相同的设备设置中找不到它们。

请确保您的代码正在其他设备上运行。如果没有,那么您必须遵循以下步骤。首先有一些基本理解:

首先 ,如果您在locale中更改了device settings,则对application level locale settings无效。也就是说,如果您的device locale设置为Spanish,并且您的Application level locale首选项设置为Hindi,则Hindi应该继续在每个{{1 fragment/activity中的}},如果其中每个组件中都有字符串application。现在,如果您将localizedlocale更改为Spanish,并且Chinese或设备重新启动,因为application存储在您的首选项中,则方法会更改zhChinese的语言环境,并继续在Application load中显示文本。

其次 ,例如,如果您的Chinese依赖于language:由于您有fontEnglish和应用程序中的Hindi语言环境支持,您必须在Chinese中拥有所有TTF fonts并将asset folder应用于Font-faceTextView,当您从EditText更改语言时,请适当选择Radio ButtonsCheck BoxSpinners等。这里的application settingsHindi语言环境需要Chinese文件夹中的每种字体TTF,并且必须在每个assets {{1}中使用}。

第三,也是最重要的 ,更改语言环境的最佳位置是{{1}中的component's被调用之前{{ 1}}方法。因此,一旦更改font-face,就必须将控件发送回setContentView(layout_id)屏幕,以便立即看到效果。

请参阅Android get hosting Activity from a view

您还可以看到How to use font assets using XML resources, in Android

Using styles for your components in Android

快乐编码:-)