আমরা কীভাবে বর্তমান ভাষা অ্যান্ড্রয়েড ডিভাইসে নির্বাচিত পেতে পারি?
আমরা কীভাবে বর্তমান ভাষা অ্যান্ড্রয়েড ডিভাইসে নির্বাচিত পেতে পারি?
উত্তর:
আপনি যদি আপনার ডিভাইসের নির্বাচিত ভাষা পেতে চান তবে এটি আপনাকে সহায়তা করতে পারে:
Locale.getDefault().getDisplayLanguage();
Locale.getDefault().getLanguage();
সাধারণ ভাষার কোড (যেমন "ডি", "এন") পেতে ব্যবহার করতে পারেন ।
Locale.setDefault("ru")
এবং সিস্টেম সেটিংসে ভাষা ইংরাজীতে সেট করা থাকে তবে পদ্ধতিটি "রু"Locale.getDefault().getLanguage()
ফিরে আসবে , তবে "এন" নয় । আসল SYSTEM লোকেল / ভাষা পাওয়ার আরও কি পদ্ধতি আছে? আমি এখানে নথিভুক্ত সমাধান খুঁজে পাইনি , তবে এর চেয়েও আরও দুর্দান্ত সমাধান আছে?
Locale.getDefault().toString()
যা কোন স্ট্রিং দেয় যা লোকেলকে সম্পূর্ণরূপে সনাক্ত করে, যেমন "en_US"।
আমি আমার অ্যান্ড্রয়েড 4.1.2 ডিভাইসে লোকাল পদ্ধতিগুলি এবং ফলাফলগুলি পরীক্ষা করে দেখেছি:
Locale.getDefault().getLanguage() ---> en
Locale.getDefault().getISO3Language() ---> eng
Locale.getDefault().getCountry() ---> US
Locale.getDefault().getISO3Country() ---> USA
Locale.getDefault().getDisplayCountry() ---> United States
Locale.getDefault().getDisplayName() ---> English (United States)
Locale.getDefault().toString() ---> en_US
Locale.getDefault().getDisplayLanguage()---> English
Locale.getDefault().toLanguageTag() ---> en-US
Locale.getDefault().getDisplayLanguage()
ফিরে আসে"English"
আমার জন্য যা কাজ করেছিল তা হ'ল:
Resources.getSystem().getConfiguration().locale;
Resources.getSystem()
বিশ্বব্যাপী শেয়ারড রিসোর্সস অবজেক্টটি ফেরত দেয় যা কেবলমাত্র সিস্টেম সংস্থানগুলিতে অ্যাক্সেস সরবরাহ করে (কোনও অ্যাপ্লিকেশন সংস্থান নেই) এবং বর্তমান স্ক্রিনের জন্য কনফিগার করা হয়নি (ডাইমেনশন ইউনিট ব্যবহার করতে পারে না, অভিমুখের ভিত্তিতে পরিবর্তিত হয় না)।
যেহেতু getConfiguration.locale
এখন হ্রাস করা হয়েছে, অ্যান্ড্রয়েড নওগাতে প্রাথমিক লোকাল পাওয়ার পছন্দের উপায়টি হ'ল:
Resources.getSystem().getConfiguration().getLocales().get(0);
পূর্ববর্তী অ্যান্ড্রয়েড সংস্করণগুলির সাথে সামঞ্জস্যের গ্যারান্টি দেওয়া একটি সম্ভাব্য সমাধান হ'ল একটি সহজ চেক:
Locale locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
locale = Resources.getSystem().getConfiguration().getLocales().get(0);
} else {
//noinspection deprecation
locale = Resources.getSystem().getConfiguration().locale;
}
হালনাগাদ
সমর্থন লাইব্রেরি দিয়ে শুরু করে 26.1.0
আপনার অ্যান্ড্রয়েড সংস্করণটি পরীক্ষা করার দরকার নেই কারণ এটি একটি সুবিধাজনক পদ্ধতি পশ্চাৎসঙ্গতভাবে সরবরাহ করে getLocales()
।
কেবল কল করুন:
ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration());
ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration())
getLocales
করার উপায়। আমি আমার উত্তর আপডেট করেছি।
আপনি বর্তমান স্থানীয় ভাষা থেকে ভাষাটি 'এক্সট্র্যাক্ট' করতে পারেন। আপনি স্ট্যান্ডার্ড জাভা এপিআই এর মাধ্যমে বা অ্যান্ড্রয়েড প্রসঙ্গটি ব্যবহার করে লোকেলটি বের করতে পারেন। উদাহরণস্বরূপ, নীচের দুটি লাইন সমতুল্য:
String locale = context.getResources().getConfiguration().locale.getDisplayName();
String locale = java.util.Locale.getDefault().getDisplayName();
Locale.setDefault()
আরও কিছু লোকালের সাথে আগেই কল করুন এবং আপনি বিভিন্ন ফলাফল পান।
অন্যদের সময় বা / বা বিভ্রান্তি বাঁচাতে আমি এটি ভাগ করে নিতে চাই যে আমি জোহান পেলগ্রিম উপরে প্রস্তাবিত দুটি বিকল্পের চেষ্টা করেছি এবং আমার ডিভাইসে সেগুলি সমতুল্য - ডিফল্ট অবস্থান পরিবর্তন হয়েছে কিনা।
সুতরাং আমার ডিভাইসের ডিফল্ট সেটিংসটি হ'ল ইংরাজী (ইউনাইটেড কিন্ডোম) এবং এই অবস্থায় প্রত্যাশা অনুযায়ী জোহানের উত্তরের উভয় স্ট্রিং একই ফলাফল দেয় give আমি যদি তখন ফোনের সেটিংসে লোকেল পরিবর্তন করে (ইতালিয়ানো (ইতালি) বলি এবং আবার চালনা করি তবে জোহানের উত্তরের দুটি স্ট্রিংই লোকালটিকে ইতালীয়ানো (ইতালি) হিসাবে দেয়।
সুতরাং আমি জোহানের মূল পোস্টটি সঠিক হতে এবং গ্রেগমের মন্তব্যটি ভুল বলে বিশ্বাস করি।
স্থানীয় রেফারেন্সে বর্ণিত হিসাবে ভাষা পাওয়ার সর্বোত্তম উপায় হ'ল:
Locale.getDefault().getLanguage()
এই পদ্ধতিটি আইএসও 639-1 স্ট্যান্ডার্ট অনুযায়ী ভাষা আইডির সাথে স্ট্রিং দেয়
আপনি এটি ব্যবহার করতে পারেন
boolean isLang = Locale.getDefault().getLanguage().equals("xx");
যখন "এক্সএক্স" কোনও "এন", "ফরাসী", "এসপি", "আর" .... এর মতো কোনও ভাষা কোড হয়
যদি এপিআই স্তরটি 24 বা তার বেশি হয় তবে LocaleList.getDefault().get(0).getLanguage()
অন্যটি ব্যবহার করুনLocale.getDefault.getLanguage()
private fun getSystemLocale(): String {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return LocaleList.getDefault().get(0).getLanguage();
} else {
return Locale.getDefault.getLanguage();
}
}
রেফারেন্স: https://developer.android.com/guide/topics/res ્રો// বহুভাষিক- সমর্থন
জোহান পেলগ্রিমের উত্তর যুক্ত করতে
context.getResources().getConfiguration().locale
Locale.getDefault()
সমতুল্য কারণ android.text.format.DateFormat
শ্রেণি উভয়ই বিনিময়যোগ্য হিসাবে ব্যবহার করে, যেমন
private static String zeroPad(int inValue, int inMinDigits) {
return String.format(Locale.getDefault(), "%0" + inMinDigits + "d", inValue);
}
এবং
public static boolean is24HourFormat(Context context) {
String value = Settings.System.getString(context.getContentResolver(),
Settings.System.TIME_12_24);
if (value == null) {
Locale locale = context.getResources().getConfiguration().locale;
// ... snip the rest ...
}
আপনি সিস্টেম সংস্থান থেকে লোকেল পাওয়ার চেষ্টা করতে পারেন:
PackageManager packageManager = context.getPackageManager();
Resources resources = packageManager.getResourcesForApplication("android");
String language = resources.getConfiguration().locale.getLanguage();
উপরের উত্তরগুলি সহজ চীনা এবং ট্রেডিটিনাল চীনাগুলির মধ্যে পার্থক্য করে না।
Locale.getDefault().toString()
কাজ করে যা "zh_CN", "zh_TW", "en_US" এবং ইত্যাদি প্রদান করে
উল্লেখ: https://developer.android.com/references/java/util/Locale.html , আইএসও 639-1 ওল্ড।
এই সমাধানটি আমার পক্ষে কাজ করেছিল। এটি আপনাকে অ্যান্ড্রয়েড ডিভাইসের ভাষা (অ্যাপের স্থানীয় ভাষা নয়) ফিরিয়ে দেবে
String locale = getApplicationContext().getResources().getConfiguration().locale.getLanguage();
এটি "এন" বা "ডি" বা "ফরাসী" বা আপনার ডিভাইসের ভাষা সেট করা যাই হোক না কেন ফিরে আসবে।
কীবোর্ড বর্তমান জানতে আপনি এই কোডটি ব্যবহার করতে পারেন
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
InputMethodSubtype ims = imm.getCurrentInputMethodSubtype();
String locale = ims.getLocale();
দুটি ভাষা আছে।
ওএসের ডিফল্ট ভাষা:
Locale.getDefault().getDisplayLanguage();
আবেদনের বর্তমান ভাষা:
getResources().getConfiguration().locale.getDisplayLanguage();//return string
আপনি যদি কোন ভাষা চয়ন করেন তবে আপনি এই গ্রীকটি টাইপ করতে পারবেন না সহায়ক হতে পারে।
getDisplayLanguage().toString() = English
getLanguage().toString() = en
getISO3Language().toString() = eng
getDisplayLanguage()) = English
getLanguage() = en
getISO3Language() = eng
এখন এটি গ্রীক দিয়ে চেষ্টা করুন
getDisplayLanguage().toString() = Ελληνικά
getLanguage().toString() = el
getISO3Language().toString() = ell
getDisplayLanguage()) = Ελληνικά
getLanguage() = el
getISO3Language() = ell
আপনি যদি কোনও বর্তমান ভাষা পরীক্ষা করতে চান তবে @ সর্পের উত্তর (@ থরবার) ব্যবহার করুন:
val language = ConfigurationCompat.getLocales(Resources.getSystem().configuration)?.get(0)?.language
// Check here the language.
val format = if (language == "ru") "d MMMM yyyy г." else "d MMMM yyyy"
val longDateFormat = SimpleDateFormat(format, Locale.getDefault())
DateFormat.getDateInstance(DateFormat.LONG, Locale.getDefault()).format(Date())
।
if(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){
// your code here
}
আপনার ডিভাইসের ভাষা পাওয়ার সঠিক উপায়টি হল:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return context.getResources().getConfiguration().getLocales().get(0);
} else {
return context.getResources().getConfiguration().locale;
}
আশা করি এটা সাহায্য করবে.
Locale.getDefault().getDisplayLanguage()
Written
ভাষার জন্য আপনাকে নাম দেবে , উদাহরণস্বরূপ,English, Dutch, French
Locale.getDefault().getLanguage()
তোমাকে দিবে language code
উদাহরণস্বরূপ :en, nl, fr
উভয় পদ্ধতি স্ট্রিং ফিরে
public class LocalUtils {
private static final String LANGUAGE_CODE_ENGLISH = "en";
// returns application language eg: en || fa ...
public static String getAppLanguage() {
return Locale.getDefault().getLanguage();
}
// returns device language eg: en || fa ...
public static String getDeviceLanguage() {
return ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration()).get(0).getLanguage();
}
public static boolean isDeviceEnglish() {
return getDeviceLanguage().equals(new Locale(LANGUAGE_CODE_ENGLISH).getLanguage());
}
public static boolean isAppEnglish() {
return getAppLanguage().equals(new Locale(LANGUAGE_CODE_ENGLISH).getLanguage());
}
}
Log.i("AppLanguage: ", LocalUtils.getAppLanguage());
Log.i("DeviceLanguage: ", LocalUtils.getDeviceLanguage());
Log.i("isDeviceEnglish: ", String.valueOf(LocalUtils.isDeviceEnglish()));
Log.i("isAppEnglish: ", String.valueOf(LocalUtils.isAppEnglish()));
অন্যরা ডিভাইসের ভাষার জন্য ভাল উত্তর দিয়েছে,
আপনি যদি অ্যাপ্লিকেশন ভাষাটি করতে চান তবে এটি করার সহজতম উপায় হ'ল app_lang
আপনার strings.xml
ফাইলে একটি কী যুক্ত করা এবং পাশাপাশি প্রতিটি ল্যাংয়ের জন্য ল্যাং নির্দিষ্ট করা।
এইভাবে, যদি আপনার অ্যাপ্লিকেশনটির ডিফল্ট ভাষা ডিভাইসের ভাষা থেকে আলাদা হয় তবে আপনি সেটিকে আপনার পরিষেবার জন্য প্যারামিটার হিসাবে প্রেরণ করতে বেছে নিতে পারেন।
public void GetDefaultLanguage( ) {
try {
String langue = Locale.getDefault().toString(); // ---> en_US
/*
Log.i("TAG", Locale.getDefault().getLanguage() ); // ---> en
Log.i("TAG", Locale.getDefault().getISO3Language() ); // ---> eng
Log.i("TAG", Locale.getDefault().getCountry() ); // ---> US
Log.i("TAG", Locale.getDefault().getISO3Country() ); // ---> USA
Log.i("TAG", Locale.getDefault().getDisplayCountry() ); // ---> United States
Log.i("TAG", Locale.getDefault().getDisplayName() ); // ---> English (United States)
Log.i("TAG", Locale.getDefault().toString() ); // ---> en_US
Log.i("TAG", Locale.getDefault().getDisplayLanguage() ); //---> English
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
langue = Locale.getDefault().toLanguageTag(); // ---> en-US
url_Api = getUrlMicrosoftLearn(langue);
Log.i("TAG", url_Api );
Log.i("TAG", langue );
}else{
langue = langue.replace("_","-"); // ---> en-US
url_Api = getUrlMicrosoftLearn(langue);
Log.i("TAG", url_Api );
Log.i("TAG", langue );
}
}catch (Exception ex) {
Log.i("TAG", "Exception:GetDefaultLanguage()", ex);
}
}
public String getUrlMicrosoftLearn(String langue) {
return "https://docs.microsoft.com/"+langue+"/learn";
}
আমার সমাধানটি এরকম
@SuppressWarnings("deprecation")
public String getCurrentLocale2() {
return Resources.getSystem().getConfiguration().locale.getLanguage();
}
@TargetApi(Build.VERSION_CODES.N)
public Locale getCurrentLocale() {
getResources();
return Resources.getSystem().getConfiguration().getLocales().get(0);
}
এবং তারপর
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Log.e("Locale", getCurrentLocale().getLanguage());
} else {
Log.e("Locale", getCurrentLocale2().toString());
}
দেখানো ---> এন
ডিভাইস দেশ পেতে কোড এখানে। অ্যান্ড্রয়েড এমনকি ওরিওর সমস্ত সংস্করণের সাথে সামঞ্জস্যপূর্ণ।
সমাধান: যদি ফোনটি সেটআপের সময় ব্যবহার করা হয় বা বর্তমান ভাষা নির্বাচনের সময় ব্যবহারকারীর কাছে সিম কার্ড না পাওয়া থাকে get
public static String getDeviceCountry(Context context) {
String deviceCountryCode = null;
final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if(tm != null) {
deviceCountryCode = tm.getNetworkCountryIso();
}
if (deviceCountryCode != null && deviceCountryCode.length() <=3) {
deviceCountryCode = deviceCountryCode.toUpperCase();
}
else {
deviceCountryCode = ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration()).get(0).getCountry().toUpperCase();
}
// Log.d("countryCode"," : " + deviceCountryCode );
return deviceCountryCode;
}