Sunil Parmar
Sunil Parmar

Reputation: 1233

How to use all available string-arrays from all strings.xml?

  1. I am supporting multiple language using values/strings.xml in my app
  2. My current language is ENGLISH.
  3. I have stored icon names in DB, having different languages.
  4. Called following function with icon name in different languages.

    More Explanation:[[
    Suppose I search "Coffee" then it will return me index =3 because my language is ENGLISH.

    Now for next time i search "Kaffee" then it will not found any string like "Kaffee" because my current language is ENGLISH and it is using values/strings.xml file.

    but i need return index as 3.]]

    Need Result : I want to get return index = 3 every time, whatever is my current language.

    My thought : Any how I have to search iconName in all of these three languages, not only from current selected ENGLISH language.

    Question : So, it is possible to use all supported language's strings to search and get Correct index ?
    Please give some guidlines!

    getIndexOfIcon("Coffee"); --> returns index = 3
    getIndexOfIcon("Kaffee"); --> returns index = 0
    getIndexOfIcon("Café");--> returns 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;
    

    }


Following are the 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>     

Upvotes: 0

Views: 622

Answers (2)

Hareshkumar Chhelana
Hareshkumar Chhelana

Reputation: 24848

Try this way,hope this will help you to solve your problem...

Note : don't try to forget to set your current language after this code.

    @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;
    }

Upvotes: 1

Flitzpiepe
Flitzpiepe

Reputation: 167

I am not quite sure what you want to achieve, but i had a similar problem and solved it with this code:

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

COLUMN_NAME comes out of a query and i just ID'ed my strings with the same names. You might can use this to get what you need.

Upvotes: 0

Related Questions