android POJO 中的多语言字符串 class

android multilingual strings in POJO class

我的应用程序是一个基本的记事本样式应用程序,其中主要 activity 是一个列表,每个项目都可以编辑。每个项目的数据包括项目的名称,然后是文本字段列表。我目前有一个 class 来管理项目如下:

public class Item implements Serializeable {
  private String name;
  private String review;
  public Item() {
    name = Resources.getSystem().getString(R.string.name_movie);
    description = Resources.getSystem().getString(R.string.description_like);
 }
  public Item(String itemname, String itemreview) {
//... followed by getters and setters
}

然后在

<string name="name_movie">movie</string>
<string name="name_movie">book</string>
<string name="name_movie">record</string>
<string name="description_like">good</string>
<string name="description_love">great</string>

等它们都被翻译成其他语言,我可以在代码中引用它们

R.string.name_movie
R.string.description_like

等我总结是因为你明白了。

问题出在我想根据字符串资源分配值的默认构造函数。不幸的是,获取系统资源需要上下文。这些是 POJO classes 并且没有上下文。此外,我的 main activity 将项目的数组列表保存到一个文件中,因此我使这些项目可序列化。因为有可序列化的,所以我需要一个无参数构造函数,所以我不能使用如下构造函数的静态成员变量作为上下文:

    public Item(Context context) {
      m_context = context;
    }

我的问题是 在 android 应用程序中访问可序列化的普通旧 java 对象中的多语言字符串的最佳方法是什么? 我' 审查了以下讨论,其中包括:getString Outside of a Context or Activity, Access string.xml Resource File from Java Android Code, and Static way to get 'Context' in Android?.

我可以通过哪些其他方式在这些对象中使​​用本地化字符串?我考虑过在我的项目中存储资源标识符而不是字符串,但我想让它保持打开状态以修改我的应用程序以获取用户输入的字符串,而不是仅仅从列表中选择。

正在使用应用程序class。 Extend Android Application class,添加一个静态变量Context,并在onCreate方法中为其赋值application context。 添加方法 get contact Wich return 您的应用程序上下文。 在你的 pojo 中,你可以通过 Application.MyMethod() 等访问它。 (不要忘记将您的应用程序 class 分配给您的清单。

解决方案是按照 Teddy Smith 的建议使用单例 class,然后在我的翻译中,每种语言都有一个字符串。例如,

 <string name="language">en</string>

然后在翻译编辑器中,我将语言字符串定义为西班牙语等的 sp。然后当我获得字符串资源“语言”的值时,可以确定我的应用程序使用哪种语言 运行。

这样做的目的是拥有一个多语言音频提示应用程序,其中包含特定于用户语言的定义的音频提示列表。

感谢帮助