如何使用所有strings.xml中的所有可用字符串数组?

时间:2014-05-26 12:15:37

标签: android

  1. 我在我的应用中使用values / strings.xml支持多种语言
  2. 我目前的语言是ENGLISH。
  3. 我在DB中存储了图标名称,具有不同的语言。
  4. 使用不同语言的图标名称调用以下函数。

    更多说明:[[
    假设我搜索“Coffee”然后它会返回index = 3,因为我的语言是ENGLISH。

    现在我下次搜索“Kaffee”然后它将找不到像“Kaffee”这样的字符串,因为我当前的语言是ENGLISH,它使用的是values / strings.xml文件。

    但是我需要返回索引为3。]]

    需要结果:我希望每次都能获得返回索引= 3,无论我现在的语言是什么。

    我的想法:我必须在所有这三种语言中搜索iconName,而不仅仅是从当前选择的ENGLISH语言中搜索。 问题:那么,是否可以使用所有支持的语言字符串进行搜索并获得正确的索引?
    请给出一些指导!

    getIndexOfIcon( “咖啡”); - >返回index = 3
    getIndexOfIcon( “KAFFEE”); - >返回index = 0
    getIndexOfIcon( “咖啡馆”); - >返回index = 0

    public static int getIndexOfIcon(String iconName) {

    String[] predefined_icon_drawable_names; 
    predefined_icon_drawable_names = mContext.getResources().getStringArray(R.array.predefined_icon_drawable_names_array); 
    
    int indextOfIcon = 0;
    try 
    {
        indextOfIcon = Arrays.asList(predefined_icon_drawable_names).indexOf(iconName);
        if(indextOfIcon<0)
            indextOfIcon = 0;
    } 
    catch (Exception e) 
    {
        indextOfIcon = 0;
        e.printStackTrace();
    }
    return indextOfIcon;
    

    }


  5. 以下是strings.xml


    ENGLISH Language:/values/strings.xml
    <string-array name="predefined_icon_drawable_names_array">
            <item>Default</item>
            <item>Bath</item>
            <item>Brush Teeth</item>
            <item>Coffee</item>
    </string-array>
    
    GERMAN Language:/values-de/strings.xml
    <string-array name="predefined_icon_drawable_names_array">
            <item>Standard</item>
            <item>Bad</item>
            <item>Pinselzähne</item>
            <item>Kaffee</item>     
    </string-array>
    
    SPANISH Language:/values-es/strings.xml
    <string-array name="predefined_icon_drawable_names_array">
            <item>Por defecto</item>
            <item>Baño</item>
            <item>Cepillar dientes</item>
            <item>Café</item>       
    </string-array>     
    

2 个答案:

答案 0 :(得分:1)

试试这种方式,希望这可以帮助您解决问题...

注意:请勿在此代码后忘记设置当前语言。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        System.out.println("English Index : "+getIndexOfIcon(this,"en","Coffee"));
        System.out.println("GERMAN Index : "+getIndexOfIcon(this,"de","Kaffee"));
        System.out.println("SPANISH Index : "+getIndexOfIcon(this,"es","Café"));

    }

    public static int getIndexOfIcon(Context mContext,String languageCode,String iconName)
    {

        Locale locale;
        if(languageCode.equals("de")){
            locale = new Locale(languageCode,"DE");
        }else if(languageCode.equals("es")){
            locale = new Locale(languageCode,"ES");
        }else{
            locale = new Locale(languageCode,"EN");
        }
        Locale.setDefault(locale);
        Configuration config = new Configuration();
        config.locale = locale;
        mContext.getResources().updateConfiguration(config,mContext.getResources().getDisplayMetrics());

        String[] predefined_icon_drawable_names;
        predefined_icon_drawable_names = mContext.getResources().getStringArray(R.array.predefined_icon_drawable_names_array);

        int indextOfIcon = 0;
        try
        {
            indextOfIcon = Arrays.asList(predefined_icon_drawable_names).indexOf(iconName);
            if(indextOfIcon<0)
                indextOfIcon = 0;
        }
        catch (Exception e)
        {
            indextOfIcon = 0;
            e.printStackTrace();
        }
        return indextOfIcon;
    }

答案 1 :(得分:0)

我不太确定你想要达到什么目标,但我遇到了类似的问题并用这段代码解决了这个问题:

String localized = context.getResources().getString(context.getResources().getIdentifier(mCursor.getString(COLUMN_NAME), "string", context.getPackageName()));

COLUMN_NAME来自查询,我只是使用相同的名称来识别我的字符串。您可以使用它来获得所需的信息。