Android应用混合起来的语言,显示在同一时间

问题描述:

我有一个奇怪的行为,同时开发Android应用程序多国语言(我不是原来的开发商,我才刚刚开始更新它):Android应用混合起来的语言,显示在同一时间

的应用支持两种语言(每种语言只有一个字符串文件):德语和英语。

当应用程序运行时,某些视图显示英文,而其他视图显示德文文本。与此同时。

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

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

它甚至不一致:在我继续开发应用程序并更新两个字符串文件中的翻译时,最初以德语显示的某些视图(如Tab Bar)突然显示为英文。

我在编程方面不是新手,为其他平台(例如iOS)完成了大量多语言应用程序,所以我确定了解基本概念。我很确定我没有错误地获取字符串文件中的密钥。

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

任何想法,为什么会发生这种情况?或者如何调试呢?我会在哪里开始寻找为什么一些意见使用错误的语言,甚至随机?

更新我刚刚意识到“ge”可能不是德语的正确代码。令人惊讶的是,当我将“values-ge”文件夹重命名为“values-de”时,我突然在某些地方获得了预期的德文文本。但是,在其他地方,我现在可以在以前使用德语的地方获得英语。所以,它固定了一些观点,但打破了其他观点。我无法理解这一点。

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

+0

默认'strings.xml'是英文,但由于您的系统是德文,因此应该始终采用德文'strings.xml'。你使用Android特定的字符串,比如'android.R.string.ok'? – hopeman

+0

是的,我确实使用了R.string访问器。我甚至在调试器中仔细检查,并将行改为使用字符串文字。 –

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

+0

不,它们不会丢失。它们显然存在,连同出现的其他翻译后的字符串一起出现。正如我写的,我理解这些概念,当然我也检查了这些明显的错误。这是更安全的事情,我很确定。 –

原来,有几个问题我必须解决:

  1. 语言代码“GE”是错误的。正确的是“德”。
  2. 通过将文件夹名称从“values_ge”重命名为“values_de”并清理项目,甚至删除设备上的应用程序来解决此问题后,仍然会导致错误。最后,重启Android Studio之后,即使这个问题已经修复了。