Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用不同的语言环境作为语言的默认语言环境?_Android_Android Resources - Fatal编程技术网

Android 如何使用不同的语言环境作为语言的默认语言环境?

Android 如何使用不同的语言环境作为语言的默认语言环境?,android,android-resources,Android,Android Resources,安卓目前使用西班牙作为Español的默认语言环境,但如果我想使用另一个语言环境,例如墨西哥,以便将Español的默认语言环境解析为其他语言环境,有没有办法 我的意思是,假设有人有西班牙人的字符串(西班牙)和西班牙人的字符串(墨西哥),他们会把西班牙的字符串放在文件夹values es中,墨西哥的字符串放在values es rMX中,所以其他地区的默认值是es,也就是西班牙字符串。我想让其他地区默认为墨西哥地区,并让西班牙字符串解析为西班牙人(西班牙) 我试过用西班牙人(墨西哥)作为es值,

安卓目前使用西班牙作为Español的默认语言环境,但如果我想使用另一个语言环境,例如墨西哥,以便将Español的默认语言环境解析为其他语言环境,有没有办法

我的意思是,假设有人有西班牙人的字符串(西班牙)和西班牙人的字符串(墨西哥),他们会把西班牙的字符串放在文件夹values es中,墨西哥的字符串放在values es rMX中,所以其他地区的默认值是es,也就是西班牙字符串。我想让其他地区默认为墨西哥地区,并让西班牙字符串解析为西班牙人(西班牙)

我试过用西班牙人(墨西哥)作为es值,用西班牙人(西班牙)作为es-rES值,但没有用。

文件--\u 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());
    }
}
}
导入android.app.Application;
导入android.content.res.Configuration;
导入android.content.res.Resources;
导入android.os.Build;
导入android.view.contexthemewrapper;
导入java.util.Locale;
公共类LocaleUtils{
公共静态最终字符串LAN_西班牙语=“es”;
公共静态最终字符串LAN_葡萄牙语=“pt”;
公共静态最终字符串LAN_ENGLISH=“en”;
私有静态语言环境;
公共静态void setLocale(区域设置){
sLocale=语言环境;
如果(sLocale!=null){
setDefault(sLocale);
}
}
公共静态void updateConfig(ContextThemeWrapper){
如果(sLocale!=null&&Build.VERSION.SDK\u INT>=
Build.VERSION\u code.JELLY\u BEAN\u MR1){
配置=新配置();
setLocale(sLocale);
applyOverrideConfiguration(配置);
}
}
公共静态void updateConfig(应用程序应用程序、配置){
if(sLocale!=null&&Build.VERSION.SDK_INT<
Build.VERSION\u code.JELLY\u BEAN\u MR1){
//包装配置以避免活动循环
配置配置=新配置(配置);
config.locale=sLocale;
Resources res=app.getBaseContext().getResources();
res.updateConfiguration(config,res.getDisplayMetrics());
}
}
}
您可以参考此链接,以便更好地了解您应该在应用程序上调用代码的事件

我试过用西班牙人(墨西哥)作为价值观,用西班牙人(西班牙)作为价值观,但这不起作用

我不确定你是怎么说的,但总的来说,这应该行得通

资源框架通常会尝试选择最具体的规则进行匹配,但如果找不到匹配项,则会退回到越来越多的通用规则。API 24+()上的locale还有另一个缺点,但一般模式仍然适用

你选择的“默认”语言和方言完全取决于你;没有什么规定您必须将英文文本放入
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)
这意味着:

  • 任何人只要将手机设置为西班牙语,就会看到西班牙语文本
  • 任何人只要将手机设置为任何其他西班牙语方言,就会看到墨西哥西班牙语文本
  • 任何将手机设置为任何其他语言的人都会看到英文文本