Android应用程序混合了多种语言,同时显示多种语言

Android应用程序混合了多种语言,同时显示多种语言,android,localization,Android,Localization,我在开发Android应用程序时有一个奇怪的行为(我不是最初的开发者,我只是刚刚开始更新它): 该应用程序支持两种语言(每种语言只支持一个字符串文件):德语和英语 当应用程序运行时,一些视图显示英语,而另一些视图显示德语文本。同时。 默认语言(即res/values/strings.xml)是英语,另一个文件是res/values ge/strings.xml。该应用程序在德国安卓系统(v7.0)上运行 因此,似乎有些观点认为他们应该使用应用程序的默认设置,而其他观点则坚持用户的系统语言选择 它

我在开发Android应用程序时有一个奇怪的行为(我不是最初的开发者,我只是刚刚开始更新它):

该应用程序支持两种语言(每种语言只支持一个字符串文件):德语和英语

当应用程序运行时,一些视图显示英语,而另一些视图显示德语文本。同时。

默认语言(即
res/values/strings.xml
)是英语,另一个文件是
res/values ge/strings.xml
。该应用程序在德国安卓系统(v7.0)上运行

因此,似乎有些观点认为他们应该使用应用程序的默认设置,而其他观点则坚持用户的系统语言选择

它甚至不一致:当我不断开发应用程序并更新两个字符串文件中的翻译时,一些视图,例如最初以德语显示的选项卡栏,突然以英语显示

我不是一个编程新手,已经为其他平台(比如iOS)开发了很多多语言应用程序,所以我肯定理解基本概念。我很确定我并不是把字符串文件中的键搞错了

我正在Mac上使用Android Studio 2.3.3,以防万一

你知道为什么会这样吗?或者如何调试它?我从哪里开始寻找一些视图为什么使用错误的语言,甚至是随机的

更新我才意识到“ge”毕竟可能不是德语的正确代码。而且,令人惊讶的是,当我将“values ge”文件夹重命名为“values de”时,我突然在某些地方得到了预期的德语文本。然而,在其他地方,我现在在以前学德语的地方学英语。因此,它修正了一些观点,但打破了其他观点。我搞不懂这个


此外,当我使用“E”代码(
newsimpledateformat(“E,dd.MM”)
)时,日期格式化程序会以英语输出一周的文本:我希望看到“Die,30.09.”,但得到“Thu,30.09.”。但这可能值得一个单独的问题。

我想到的第一件事是,德语
string.xml
文件中可能缺少一些字符串。系统基本上会使用您的系统语言,但如果在该文件中找不到所需的字符串,它将切换到默认文件,即英语
string.xml
,因此这可能是导致此行为的原因。

结果是,我必须解决几个问题:

  • 语言代码“ge”是错误的。正确的是“德”
  • 通过将文件夹名称从“values\u ge”重命名为“values\u de”并清理项目,甚至删除设备上的应用程序来修复此问题后,仍然会出错。最后,在重新启动Android Studio之后,这个问题也自行解决了

  • 默认的
    strings.xml
    是英语,但由于您的系统是德语的,因此应该始终使用德语
    strings.xml
    。您是否使用Android特定的字符串,例如
    Android.R.string.ok
    ?是的,我当然使用R.string访问器。我甚至在调试器中进行了双重检查,并将行改为使用字符串文字。不,它们没有丢失。它们与确实出现的其他翻译字符串一起清晰地出现。正如我所写,我确实理解这些概念,当然我也检查了这些明显的错误。我敢肯定,这是一件更为完美的事情。