Android当前使用西班牙作为Español的默认语言环境,但是我说我想拥有另一个语言环境,例如墨西哥,以便将Español的默认语言环境解析为,我有办法吗?
我的意思是,说某人有西班牙文(西班牙)的字符串和西班牙文(墨西哥)的字符串,他们将西班牙的字符串放在值-es中,将墨西哥的字符串放在values-es-rMX中,所以其他语言环境将默认为values-es,即西班牙字符串。我想让其他语言环境默认为墨西哥语言环境,并让西班牙字符串解析为Español(西班牙)。
我已经尝试过将Español(墨西哥)用作Values-es,并在Español(西班牙)中使用values-es-rES,但这是行不通的。
答案 0 :(得分:0)
文件-_App.java
public class App extends Application {
public void onCreate(){
super.onCreate();
LocaleUtils.setLocale(new Locale("iw"));
LocaleUtils.updateConfig(this,
getBaseContext().getResources().getConfiguration());
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
LocaleUtils.updateConfig(this, newConfig);
}
}
onfile-_BaseActivity.java
public class BaseActivity extends AppCompatActivity {
public BaseActivity() {
LocaleUtils.updateConfig(this);
}
}
在文件LocaleUtils.java
import android.app.Application;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.view.ContextThemeWrapper;
import java.util.Locale;
public class LocaleUtils {
public static final String LAN_SPANISH = "es";
public static final String LAN_PORTUGUESE = "pt";
public static final String LAN_ENGLISH = "en";
private static Locale sLocale;
public static void setLocale(Locale locale) {
sLocale = locale;
if(sLocale != null) {
Locale.setDefault(sLocale);
}
}
public static void updateConfig(ContextThemeWrapper wrapper) {
if(sLocale != null && Build.VERSION.SDK_INT >=
Build.VERSION_CODES.JELLY_BEAN_MR1) {
Configuration configuration = new Configuration();
configuration.setLocale(sLocale);
wrapper.applyOverrideConfiguration(configuration);
}
}
public static void updateConfig(Application app, Configuration configuration) {
if(sLocale != null && Build.VERSION.SDK_INT <
Build.VERSION_CODES.JELLY_BEAN_MR1) {
//Wrapping the configuration to avoid Activity endless loop
Configuration config = new Configuration(configuration);
config.locale = sLocale;
Resources res = app.getBaseContext().getResources();
res.updateConfiguration(config, res.getDisplayMetrics());
}
}
}
您可以参考此链接以更好地理解,以及应该在应用程序click here fore more details
上的哪些事件上调用代码答案 1 :(得分:0)
我已经尝试过将Español(墨西哥)用作Values-es,并在Español(西班牙)中使用values-es-rES,但这是行不通的。
我不确定您尝试了什么使您这么说,但通常来说应该有效。
通常,资源框架将始终尝试选择最特定的规则进行匹配,但是如果找不到匹配项,则将退回到越来越多的通用规则。 API 24+(read more here)的语言环境还存在一些问题,但一般模式仍然适用。
您选择作为“默认”的语言和方言完全取决于您;没什么可说的,您不必在res/values/strings.xml
文件中放入英文文本。只要您对没有人看到这些默认字符串的特定匹配感到满意,就可以在其中输入所需的任何语言。
因此,您可以这样设计资源目录:
res/
values/
strings.xml (English text here)
values-es/
strings.xml (Mexican Spanish text here)
values-es-rES/
strings.xml (Spain Spanish text here)
这意味着: