【问题标题】:android multilingual strings in POJO classPOJO类中的android多语言字符串
【发布时间】:2020-11-19 10:02:58
【问题描述】:

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

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 类,没有上下文。此外,我的主要活动将一个项目数组列表保存到一个文件中,因此我使这些项目可序列化。因为有可序列化的,我需要一个无参数构造函数,所以我不能使用静态成员变量作为上下文的构造函数,如下所示:

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

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

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

【问题讨论】:

    标签: java android multilingual android-resources


    【解决方案1】:

    使用应用程序类。 扩展 Android Application 类,添加一个静态变量 Context 和 onCreate 方法为其分配应用程序上下文。 添加一个方法 get contact 它将返回您的应用程序上下文。 在您的 pojo 中,您可以通过 Application.MyMethod() 等访问它。 (不要忘记将您的应用程序类分配给您的清单。

    【讨论】:

    • 出于某种原因,我怀疑这对于对上下文进行静态引用会产生问题。这篇文章有更多信息stackoverflow.com/questions/5018545/…。但是,这似乎在我的应用程序中运行良好。谢谢!
    • 据我所知,我从来没有遇到过任何问题。没有泄漏左右。我主要使用 Application 来访问我的 Singleton。如果你有一个大的自定义库,而不是在这里和那里声明一些静态成员,这样就失去了对它们的跟踪。我几乎从不使用静态成员,但是当我需要静态访问单例时,我将它们存储在我的应用程序扩展中。我认为这是使用 Application 的一种方式...
    【解决方案2】:

    解决方案是按照 Teddy Smith 的建议设置单例类,然后在我的翻译中为每种语言设置一个字符串。例如,

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

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

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

    感谢您的帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      • 2014-07-18
      • 1970-01-01
      相关资源
      最近更新 更多