使用不同的通用模块修改不同语言的特定字符串(Android)

时间:2016-12-21 13:43:34

标签: java android string android-studio multilingual

这里有一些非常奇怪的东西,我显然不明白发生了什么,但也许你们中的一个人可以在我脑子里开启......

我在AndroidStudio上有一个项目,有多个常用文件(和多种语言),用于不同的应用程序:

|Common core
|-   default module 1
|-   default module 2
|-   default images
|- | default strings
   |-   danish (default) in "values" folder
   |-   english in "values-en" folder
   |-   swedish in "values-sv" folder
|App one
|-   specific module 3
|-   specific module 4
|-   specific images
|- | specific strings
   |-   in "values" folder
|App two
...

仅供参考,在我的应用程序中,我有一个 AppApplication.java 文件,它是应用程序中调用的第一个文件,用于设置我的应用程序,如菜单配置,一些细节变量和语言设置。

现在,当我编译应用程序1(例如)使用来自公共核心的默认模块并且我想要更改默认模块中的任何字符串或图像时,我只是将它们放入特定图像/字符串应用程序文件夹,它们在常见的默认图像/字符串文件夹中具有相同的名称,它们将被覆盖。

这完全奏效了。我对此很满意。但是......真正的问题是......

当我想设置语言配置时:

情况#1

_"我想在我的应用1" _

中使用默认语言(丹麦语)

我的 AppApplication.java 文件没有调用任何特定的语言配置,一切都很好。 (在常见的核心文件中,我设置了本地" DK"默认情况下。)我的应用程序使用丹麦语,其中包含来自"的默认字符串的所有字符串。值"文件夹中。

如果我想在我的应用中更改某些特定字符串,我会将它们放入我的应用程序特定字符串"值"文件夹,它们覆盖默认字符串。 !完美!!

情况#2

_"我想在我的应用1" _

中使用瑞典语

我的 AppApplication.java 文件包含以下行:

LocaleAnswer[] localeAnswers = new LocaleAnswer[]{new LocaleAnswer(new Locale("sv", "SE"), "Swedish")};
    public LocaleAnswer[] getLocaleChoices(){
        return localeAnswers;
    }

我可以,没有任何问题,在我的LocaleAnswers数组中添加多种语言。通用核心将通过显示一个对话框询问你想在启动时使用哪种语言)< / p>

如果我的应用不需要修改任何默认字符串,那么,我没有任何特定的字符串文件需要担心,我们没问题。该应用程序编译良好,应用程序是瑞典语。你!!完美!!

但是,如果我需要更改字符串,我认为将此特定字符串放入我的应用程序中&#34;值&#34;夹。但不是 :( :( :( :( 该字符串未被覆盖。

我想我知道原因:项目编译了所有内容,然后当我运行我的应用程序时,关于语言的最后一次调用是在我的 AppApplication.java 文件中,它说要使用瑞典文件。因此,它根据要求使用瑞典文件,默认值为&#34; values-sv&#34;夹。行。

让我们尝试通过重命名我的&#34;值&#34;来绕过这一点。我的应用程序中的文件夹为&#34; values-sv&#34;,以便当应用程序调用瑞典语字符串文件时,它将使用我的特定应用程序字符串,并使用默认值来修改我尚未修改的字符串。哈哈哈你知道吗???我只是创建一个&#34;自动重启手机&#34; app:D。应用程序编译,但当它尝试安装时,手机正在重新启动,重新启动,并重新启动并重新启动。我必须在重启过程中在 SafeMode (音量减小+菜单)中启动手机,以便可以删除已安装的应用程序,然后正常重启手机。 Huuu:/那对我们没什么帮助。

让我们通过复制我的&#34; values-sv&#34;来试图绕过它。我的应用程序中的文件夹,并将其中一个重命名为&#34;值&#34;。所以,现在我有一个&#34;值&#34;和一个&#34; values-sv&#34;我的应用程序中的文件夹,两者都包含相同的字符串文件(具有我想要从默认字符串更改的特定瑞典字符串)。和TADAAAAMMM !!它正在工作!!

Coooooool,但是,怎么样?为什么?

问题

  1. 我不想在两个不同的文件夹中使用这个重复的字符串文件,以便修改我的字符串!当我选择除默认语言之外的特定语言而我的应用程序中只有一个字符串文件时,如何修改特定语言的默认字符串?
  2. 这个对于项目来说不是一个非常重要的问题,但是,当你只添加一个特定语言名称的字符串文件夹时,可能会非常有趣,例如&#34; values-sv&#34;在我的应用程序中它使整个手机重启?我会说该应用程序正在寻找默认值,这意味着&#34;值&#34;文件夹,因为没有,BOUM,错误!但为什么应用程序不会崩溃?为什么整个手机都在重启?
  3. 提前致谢;) 下进行。

1 个答案:

答案 0 :(得分:0)

的答案

  1. 事实上,在我的字符串文件中,我指定了一个&#34; content_provider_authority&#34;和#34; auth_account_type&#34;对于内容提供商。

    如果你在另一个&#34; values-xx&#34;中复制这两个字符串集。文件夹比默认值&#34;值&#34;一,手机崩溃并无限期重启。

    所以,我现在有一个&#34;价值观&#34;带有 strings.xml 文件的文件夹,其中仅包含&#34; content_provider_authority&#34;和&#34; auth_account_type&#34;。在我的&#34; values-sv&#34;文件夹我有另一个 strings.xml 文件,其中包含我想要修改的所有特定字符串的默认值&#34; values-sv&#34;文件夹,如果有一些。 :d

    效果很好,我可以毫无困难地定义默认语言,一种特定语言或多种语言选择!!

  2. 为什么手机重启会导致内容提供商冲突?为什么应用程序不会崩溃?不知道!!!

  3. 我还需要在&#34;值&#34;中设置 appName 字符串。文件夹而不是&#34; values-sv&#34;因为它不是可翻译的字符串。如果你不这样做,应用程序不会崩溃,但你的应用程序名称将是你的包名;)

    下进行。