【问题标题】:getString() only returns english valuesgetString() 只返回英文值
【发布时间】:2015-07-20 11:35:42
【问题描述】:

这是我的onActivityResult 方法的代码:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == Activity.RESULT_OK) {
        String contents = data.getStringExtra("SCAN_RESULT");
        if (contents.length() == 26) {
            BillBarcode barcode = new BillBarcode(contents);
            edtBillId.setText(barcode.extract(BillBarcode.BarcodePart.BillId));
            edtPaymentId.setText(barcode.extract(BillBarcode.BarcodePart.PaymentId));
            launchService();
        } else {
            Dialog dialog = new DialogBuilder()
                    .setTitle(getString(R.string.dialog_title_global_error))
                    .setMessage(getString(R.string.unknown_barcode))
                    .build(getActivity());

            dialog.show();
        }
    }
}

问题是getString(R.string.dialog_title_global_error)getString(R.string.unknown_barcode) 总是返回英文值,而我也有波斯语值并且语言环境也是波斯语。

问题只存在于这个方法中。

波斯语价值观:

<string name="unknown_barcode">بارکد قابل استفاده نیست.</string>

英文值:

<string name="unknown_barcode">Unknown barcode</string>

编辑

当用户通过此代码从语言页面选择波斯语时,我有一个设置页面并设置我的语言环境:

      String languageToLoad = "fa";
Resources res = context.getResources();
            // Change locale settings in the app.
            android.content.res.Configuration conf = res.getConfiguration();
            conf.locale = new Locale(languageToLoad);

【问题讨论】:

  • 您能发布string.xml 值吗?
  • 先设置波斯语本地
  • 它已经设置为波斯语
  • @dhke,调用子活动之前方法中的语言环境是 fa 但在 onActivityResult() 中是“en-US”!我应该再次将其设置为 fa 吗??
  • @HuseinBehbudiRad:您是否在应用程序内手动设置区域设置?如果是这样,请记住在startActivityForResult()onActivityResult() 之间,您的活动可能会被破坏。这可能是问题所在,但我还不确定是否隐藏了其他错误。另外:我对getApplicationContext() 的评论与这个问题无关,仅与@m0skit0 的评论有关。

标签: java android multilingual


【解决方案1】:

让我尝试在一个答案中汇总所有 cmets。您的问题是两个实现错误的组合:

  1. 您正在以编程方式设置当前Activitys 上下文的语言环境。但是,您这样做的方式不受支持,可能会产生不正确的结果。

  2. 当您的活动从OnActivityResult() 中的另一个活动获得结果时,您的Activity 要么完全重新启动,要么上下文配置重置为系统的默认语言环境。无论哪种方式,您在设置对话框中设置的语言环境都会丢失。

解决方案

  1. 此处概述了在本地更改应用程序区域设置的正确方法:Changing Locale within the app itself

特别是,虽然只更改配置类中的区域设置可能对您有用,但更改应用程序的区域设置显然不是正确的方法。正确地做这件事需要更多的工作:

  Locale locale; // set to locale of your choice, i.e. "fa"
  Configuration config = getResources().getConfiguration();
  config.setLocale(locale); // There's a setter, don't set it directly     
  getApplicationContext().getResources().updateConfiguration(
      config,
      getApplicationContext().getResources().getDisplayMetrics()
  );
  // you might even need to use getApplicationContext().getBaseContext(), here.
  Locale.setLocale(locale);

在应用程序上下文中设置区域设置应该在 Activity 重新启动后仍然存在,但根据 Android 的生命周期保证,您不应该假设区域设置仍然存在。

  1. 如果您确实需要能够在本地更改应用程序的区域设置,您应该保存用户指定的区域设置(例如在SharedPreference 中)并在应用程序或您的活动重新启动时获取并重新设置它(即至少在OnCreate())。请记住,Android 可以随时在您无法控制的情况下保存和重新启动您的活动,您有责任优雅地处理重新启动。

【讨论】:

    猜你喜欢
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多