gpt4 book ai didi

java - getString() 只返回英文值

转载 作者:太空宇宙 更新时间:2023-11-04 13:38:01 28 4
gpt4 key购买 nike

这是我的 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);

最佳答案

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

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

  2. 当您的 Activity 在 OnActivityResult() 中从另一个 Activity 获取结果时,您的 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 的生命周期保证,您不应假设区域设置保持不变。

  • 如果您确实需要能够在本地更改应用的区域设置,则应保存用户指定的区域设置(例如在 SharedPreference 中),并在应用或您的 Activity 重新启动时获取并重新设置它(即至少在 OnCreate() 中)。请记住,Android 可以在您无法控制的情况下随时保存和重新启动您的 Activity ,并且您有责任妥善处理重新启动。
  • 关于java - getString() 只返回英文值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31515479/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com