मैं भाषा (एप्लिकेशन का लोकेल) प्रोग्रामेटिक रूप से बदलना चाहता हूं।एंड्रॉइड और मेनू स्थानीयकरण
मेरे लिए मुख्य समस्या मेनू लेबल अपडेट कर रही है।
मैंने कोशिश की निम्न विधि:
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if (shouldChangeMenuLabels) {
for (int i = 0; i < menu.size(); i++) {
MenuItem menuItem = menu.getItem(i);
switch (menuItem.getItemId()) {
case R.id.menu_main_about:
menuItem.setTitle(R.string.menu_about);
break;
case R.id.menu_main_preferences:
menuItem.setTitle(R.string.menu_prefs);
break;
}
}
shouldChangeMenuLabels = false;
}
लेकिन मुझे यकीन है कि यह बुरा विचार। मैं स्विच-केस स्टेटमेंट का उपयोग करने से बचना चाहता हूं क्योंकि यह सार्वभौमिक विधि नहीं है (मैं बस अन्य गतिविधियों में फंस नहीं सकता/मैं अमूर्त वर्ग नहीं कर सकता जो ऐसा करेगा)।
Btw, सभी मेनू मेनू/*। Xml फ़ाइलें में वर्णित किया गया है तो मैं कोड को डुप्लिकेट नहीं करना चाहती। किसी के पास विचार हैं?
पहले जवाब देने के लिए चिंतित: मैं निम्न कोड के साथ वातावरण बदल hae:
Locale locale = new Locale((String)newValue);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getApplication().getResources().updateConfiguration(config, getApplication().getResources().getDisplayMetrics());
लेकिन जैसा कि मैंने प्रत्येक गतिविधि के लिए घूर्णन नियंत्रित करना चाहते हैं, वे समाप्त हो गया कभी नहीं कर रहे हैं। शायद मैंने कुछ गलत किया?
मैंने यह किया। (मेरा मतलब है मूल्य-xx/string.xml और मान/string.xml)। क्या आपका मतलब मेनू-एक्सएक्स/mymenu.xml बनाना है? – davs
तो आपके पास स्ट्रिंग, menu_about, और मान-yy/string.xml के साथ स्ट्रिंग, menu_about के साथ मान-xx/string.xml है। आपने अपने फोन के लोकेल को वाई के लिए सेट किया है, और स्ट्रिंग वैल्यू वाई में बदल नहीं है? आप किस लोकल के साथ परीक्षण कर रहे हैं? http://developer.android.com/guide/topics/resources/providing-resources.html#BestMatch इस बात के बारे में वार्ता करता है कि यह किस मूल्य का उपयोग करने का निर्णय लेता है, हो सकता है कि आपके लोकेल को सही तरीके से कॉन्फ़िगर नहीं किया गया हो। –
मैं एन/आरयू लोकेशंस के साथ परीक्षण कर रहा हूं। लेकिन जैसा कि मैंने गतिविधियों को नष्ट नहीं किया है, मेनू अद्यतन नहीं किया गया है। इसलिए, मैंने मेनू साफ़ करने और स्क्रैच – davs