安卓应用中的字符串数组本地化不能正常工作

5
我已经在values文件夹中为默认的英语语言定义了一个字符串数组,如下所示。
<string-array name="movie">
        <item>11001#Action#1</item>
        <item>11002#Animation#1</item>
        <item>11003#Comedy#1</item>
        <item>11004#Documentary#1</item>
        <item>11005#Family#1</item>
        <item> 11006#Film-Noir#1</item>
        <item>11007#Horror#1</item>
        <item>11008#Musical#1</item>
        <item>11009#Romance#1</item>
    </string-array>

我的应用支持多种语言,比如简体中文,因此我在values-zh-rCN/string.xml文件中定义了另一个string-array来支持简体中文,像这样:

<string-array name="movie">
        <item>11001#动作片#1</item>
        <item>11002#动画片#1</item>
        <item>11003#喜剧#1</item>
        <item>11004#记录片#1</item>
        <item>11005#家庭#1</item>
        <item> 11006#黑色电影#1</item>
        <item>11007#恐怖片#1</item>
        <item>11008#音乐剧#1</item>
        <item>11009#爱情片#1</item>
    </string-array>

当我的应用程序正在运行并选择默认的英语语言时,会显示数组数据,但当我选择简体中文或其他语言而不是英语的手机语言时,数组数据不会显示。这个问题有哪些可能的解决方案?


你找到解决方案了吗?如果是,请分享答案。 - K Pradeep Kumar Reddy
3个回答

4
string.xml 中编写您的文本作为字符串项,然后将它们用于 arrays.xml 中。 例如:

string.xml(英语):

<string name="array_power_unit_item_00">By Watt.</string>
<string name="array_power_unit_item_01">By KiloWatt.</string>
<string name="array_power_unit_item_02">By Ampere and Volt.</string>
<string name="array_power_unit_item_03">By MilliAmpere and Volt.</string>

string.xml(阿拉伯语):

<string name="array_power_unit_item_00">بالواط.</string>
<string name="array_power_unit_item_01">بالكيلو واط.</string>
<string name="array_power_unit_item_02">بالأمبير و الفولت.</string>
<string name="array_power_unit_item_03">بالميلي أمبير و فولت.</string>

arrays.xml:

<string-array name="arraypowerunit" translatable="false">
<item>@string/array_power_unit_item_00</item>
<item>@string/array_power_unit_item_01</item>
<item>@string/array_power_unit_item_02</item>
<item>@string/array_power_unit_item_03</item>
</string-array>

在应用设置中手动更改区域设置并重新创建活动后,我的手机仍然接收到数组字符串的本地化版本。其他所有功能都正常工作。 - JerabekJakub

1

使用此方法获取资源并从该资源获取数组。这将百分之百有效。

public static Resources getResourcesBasedOnLanguage(Activity activity) {
    Configuration confTmp =new Configuration(activity.getResources().getConfiguration());
    confTmp.locale = new Locale("EN");
    DisplayMetrics metrics = new DisplayMetrics();
    activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
    return new Resources(activity.getAssets(), metrics, confTmp);
}

这对我有效,谢谢。唯一让我担心的是 Resources 构造函数已被弃用。 - JerabekJakub

1
<string name="abcd">喜剧</string>
<string name="efgh">记录片</string>

<array name="array_abcd">
     <item>@string/abcd</item>
     <item>@string/efgh</item>
</array>

如果我这样更改,需要修改Java代码吗?在哪里定义字符串数组和字符串值? - Abaneel Jahid
你确定这是解决这个问题的方案吗? - Abaneel Jahid
请自己尝试一下。我敢肯定110%……如果这个方法有效,请接受这个答案。 - Narendra Sorathiya
当然可以。但是我需要在哪里定义数组和单个字符串呢?在字符串值中吗?还是需要为数组定义array.xml文件? - Abaneel Jahid
你现在在吗? - Abaneel Jahid
两者都在您在问题中定义的字符串文件中。 - Narendra Sorathiya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接