当前位置: 首页 > 知识库问答 >
问题:

更改android应用程序中的语言环境(印地语)

慕容超
2023-03-14

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

至于现在,一切都适用于英语、西班牙语、法语、俄语,但不适用于印地语和汉语。

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

\res \ values hi \数组。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\values hi\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个答案

闻人望
2023-03-14

一、 第一件事:

你的帖子有很多逻辑和拼写错误<代码>Lint将报告此类错误和警告,代码将不会编译。

请参阅更正:

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

就目前而言,英语、西班牙语、法语、俄语都很好,但印地语和汉语都不行。

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

\res \ values hi \数组。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>

[评论]

>

  • 拼写错误:汉语、法语。

    逻辑错误:在两个数组中重复使用俄语键,第二次重复时,应该是法语。

    二、对@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-zh and values-hi
    

    如果上述是正确的,那么您的应用程序不接受或识别某些旧设备中的value s-zhvalue s-hi

    >

  • 请分享您的设备品牌、制造商和型号,以便进行更多调查。

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

    请在调用“onCreate”内的“setContentView”之前,调用更改语言环境的方法。

    也许您可以通过转到设置来检查您的设备是否支持印地语和中文-

    我有一些设备在设备设置中没有印地语和中文,但仍然可以在应用程序中识别语言环境,尽管我必须安装相应的字体以防止回退。

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

    请查看您的代码是否在其他新设备上运行。如果没有,那么您必须按照以下步骤操作。首先有一些基本的理解:

    首先,如果在设备设置中更改区域设置,则不会影响应用程序级区域设置。也就是说,如果您的设备区域设置设置为西班牙语,并且您的应用程序级区域设置首选项设置为印地语,那么如果这些组件中的每个组件都本地化了字符串,那么印地语应该继续显示在应用程序的每个片段/活动上。现在,如果您将语言环境从西班牙语更改为中文,并且重新启动了应用程序或设备,因为您的首选项中存储了zh,因此您的方法会在应用程序加载时将语言环境更改为中文,并继续以中文显示文本。

    其次,如果您的语言依赖于字体,例如:由于您的应用程序中有English印地语Chinese语言环境支持,您必须在资产文件中拥有所有TTF字体并将Font-face应用于TextViewEditTextRadio ButtonCheck BoxSpinner等适当地,当您从应用程序设置更改语言时。在这里,印地语中文语言环境需要TTF字体在资产文件夹中,并且必须用于每个组件的font-face如上所述。

    第三,也是最重要的,更改区域设置的最佳位置是在onCreate(Bundle restoreState)方法中调用活动setContentView(layout_id)之前。因此,一旦更改了区域设置,您必须将控件发送回仪表板/home屏幕,以便立即看到效果。

    请从视图中查看Android get hosting活动

    您还可以在Android中看到如何使用XML资源使用字体资产

    以及在Android中为组件使用样式

    快乐编码:-)

  • 高和通
    2023-03-14

    这取决于设备。此外,请转到设置检查您的设备是否支持印地语和中文--

     类似资料:
    • 问题内容: 我在Edittext的addTextChangedListener方法中已自定义,一切正常,但是当我更改语言(语言环境)时,我的addTextChangedListener无法正常工作。 我搜索了我的问题并找到了解决方案: 但我不知道如何使用此代码。 问题答案: 您可以尝试先转换为,然后将其投射到

    • 我在我的应用程序中使用日期格式化程序来显示一些日期。但我希望这个日期以阿拉伯语显示。所以我试图像这样改变格式化程序的区域设置: 但它不起作用。。 如果我改成这样: 会工作正常...但我希望日期显示在阿拉伯语... 如何做到这一点?我希望日期是例如١١ يناير ٢٠١٨..怎么办?

    • 我的Android应用程序支持两种语言:阿拉伯语和英语。阿拉伯语是默认语言。 现在,为了使阿拉伯语成为默认语言,我正在闪屏中将我的应用程序区域设置更改为阿拉伯语。并且我为区域设置更改维护了英语和阿拉伯语字符串文件。但是,当我单击其他一些随机片段(例如导航菜单项)时,我的应用程序静态字符串会更改回英语区域设置。 我想这是因为我的应用程序默认语言环境可能已更改为英语。此问题是随机生成的,未注意到任何特

    • 在我的应用程序中,用户应该能够切换区域设置(用于在页面上呈现文本的语言)。大量教程使用FacesContext.get货币实例()。getViewRoot()。setLocale()。例如:http://www.mkyong.com/jsf2/jsf-2-internationalization-example/.但是,这在JSF 2.0中根本不起作用(它在1.2中确实起作用)。这种语言从不切换。

    • 问题内容: 我有一个Spring应用程序,希望用户能够更改首选语言环境。当前,用户可以更改当前会话的语言环境,但是我希望能够保存users选项,以便每当他们登录时,使用已保存的语言环境(如果存在)。我有一个mysql数据库,用于存储用户区域设置首选项。我创建了一个自定义AuthenticationSuccessHandler,以处理将语言环境更改为已保存的语言环境的操作,该方法适用于已将语言环境保

    • 我熟悉Java,但只是学习Android编程。我非常喜欢他们的Hello,LinearLayout示例中的颜色栏,所以我一直在尝试将其扩展为一个可以用于我13个月大的孩子的小程序。我让它显示七种颜色的标签和四行。我想做的一件事(因为我会双语),就是能够动态更改区域设置显示语言,而无需退出应用程序,加载新区域设置,然后再次启动应用程序(这很有效,但很乏味)。因此,七个颜色条的标签适合所选语言,但我希