热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

十八、本地化

十八、本地化这一章既快速又简单,但我们将学习如何让数百万潜在用户能够访问您的应用。我们将看到如何

十八、本地化

这一章既快速又简单,但我们将学习如何让数百万潜在用户能够访问您的应用。我们将看到如何添加额外的语言,以及为什么在添加多种语言时,通过字符串资源以正确的方式添加文本对我们有好处。

在本章中,我们将执行以下操作:


  • 通过添加西班牙语和德语,使笔记应用多语言化

  • 学习如何更好的使用字符串资源

我们开始吧。

用西班牙语、英语和德语给自己的应用做笔记

首先,我们需要给我们的项目添加一些文件夹——每种新语言一个。文本被归类为资源,因此需要进入res文件夹。按照以下步骤为项目添加西班牙语支持。

虽然本项目的源文件在Chapter18文件夹中提供,但仅供参考。您需要完成接下来描述的过程来实现多语言功能。

添加西班牙语支持

按照接下来的步骤添加西班牙语:


  1. 右键点击res文件夹,然后选择新建 | 安卓资源目录。在目录名字段中,键入values-es

  2. 现在我们需要添加一个文件,我们可以在其中放置我们所有的西班牙语翻译。

  3. 右键点击res,选择新建 | 安卓资源文件,在文件名字段输入strings.xml。在目录名字段中输入values-es

我们现在有一个strings.xml文件,任何设置为使用西班牙语的设备都将引用该文件。为了清楚起见,我们现在有两个不同的strings.xml文件。

增加德国支持

按照这些步骤添加德语语言支持。


  1. 右键单击res文件夹,然后选择新建 | 安卓资源目录。在目录名字段中,键入values-de

  2. 现在我们需要添加一个文件,我们可以在其中放置我们所有的德语翻译。

  3. 右键点击res,选择新建 | 安卓资源文件,在文件名字段输入strings.xml。在目录名字段中输入values-de

下面的截图显示了strings.xml文件夹的样子。您可能想知道strings.xml文件夹是从哪里来的,因为它不符合我们在前面步骤中创建的结构。

AndroidStudio 正在帮助我们按照 APK 格式的安卓操作系统的要求组织文件和文件夹。但是,您可以清楚地看到西班牙语和德语文件的标志以及它们的 (de)(es) 后缀:

Adding German support

类型

根据您的 AndroidStudio 设置,您可能看不到国旗图标。如果你能看到三个strings.xml文件,一个没有后缀,一个有(德),一个有 (es) ,那么你就可以继续了。

现在我们可以将翻译添加到我们刚刚创建的文件中。

添加字符串资源

正如我们所知,strings.xml文件包含应用将显示的单词,如重要、待办事项和想法等单词。通过为我们希望支持的每种语言准备一个strings.xml文件,我们可以让安卓根据用户的语言设置选择合适的文本。

当您阅读以下内容时,请注意,尽管我们将正在翻译的任何单词的翻译作为值,但是name属性保持不变。仔细想想,这是合乎逻辑的,因为这是我们在布局文件中引用的name属性。

让我们提供翻译,看看我们取得了什么成就,然后回来讨论我们将如何处理 Kotlin 代码中的文本。

实现该代码最简单的方法是从原始strings.xml文件中复制并粘贴代码,然后编辑每个name属性的值:


  1. 双击打开strings.xml文件。一定要选择西班牙国旗旁边的那个或者 (es) 后缀。编辑文件如下:

    ```kt

    Nota a sí mismo
    Configuración

    add
    Título
    Descripción
    Idea
    Importante
    Que hacer
    Cancelar
    Vale

    Configuración
    Configuración

    ```


  2. 双击打开文件。一定要选择德国国旗旁边的那个或者(德)后缀。编辑文件如下:

    ```kt
    Hinweis auf selbst
    Einstellungen

    add
    Titel
    Beschreibung
    Idee
    Wichtig
    zu tun
    Abbrechen
    Okay

    Einstellungen
    Einstellungen```



类型

如果您没有提供额外(西班牙语和德语)strings.xml文件中的所有字符串资源,那么丢失的资源将从默认文件中获取。

我们所做的是提供两个翻译。安卓知道哪个翻译是哪个语言的,因为它们被放置在文件夹中。此外,我们使用了一个字符串标识符(属性name)来引用翻译。回头看看前面的代码,你会发现相同的标识符被用于两个翻译以及原始的strings.xml文件。

类型

您甚至可以本地化为一种语言的不同版本,例如美国或英国英语。完整的代码列表可在http://stackoverflow . com/questions/7973023/什么是支持的语言列表-android 上的语言环境中找到。您甚至可以本地化资源,如图像和声音。在了解更多信息。

翻译是从谷歌翻译复制粘贴的,所以很可能有些翻译是不正确的。像这样便宜地进行翻译是一种有效的方法,可以让一个应用在对自己说不同语言的用户的设备上使用一组基本的字符串资源。一旦你开始需要任何深度的翻译,也许是故事驱动的游戏或社交媒体应用的台词,你肯定会受益于由人类专业人员完成的翻译。

这个练习的目的是展示安卓是如何工作的,而不是如何翻译。

我真诚地向任何讲西班牙语或德语的人道歉,他们可能会看到这里提供的翻译的局限性。

现在我们有了翻译,我们可以看到他们在行动——在某种程度上。

用德语或西班牙语写给自己的跑步笔记

运行应用,看看是否如预期工作。现在,我们可以更改本地化设置,以西班牙语查看它。不同的设备在如何做到这一点上略有不同,但像素 2 XL 模拟器可以通过点击自定义区域应用进行更改:

Running Note to self in German or Spanish

接下来,选择 es-ES ,然后点击屏幕左下方的SELECT‘ES’按钮,如下图截图所示:

Running Note to self in German or Spanish

现在,您可以以通常的方式运行该应用。这是一个截图,显示了该应用运行在西班牙语。我已经将几个图像并排进行了 photoshopped 处理,以显示 Note to self 应用的几个不同屏幕:

Running Note to self in German or Spanish

你可以清楚地看到,我们的 app 主要是翻译成西班牙语的。显然,用户输入的文本将使用他们所说的任何语言——这不是我们应用的缺陷。然而,仔细看图片,你会注意到我指出了几个文本仍然是英文的地方。我们的每个对话窗口中仍有一些未翻译的文本。

这是因为文本直接包含在我们的 Kotlin 代码中。正如我们所看到的,在多种语言中使用字符串资源,然后在我们的布局中引用它们是很容易的,但是我们如何从我们的 Kotlin 代码中引用字符串资源呢?

用 Kotlin 代码进行翻译

首先要做的是在三个strings.xml文件中创建资源。下面是需要添加到三个不同文件中的两个资源。

strings.xml(没有任何标志或后缀)中,在标签内添加这两个资源:

name="add_new_note">Add a new note
name="your_note">Your note

在带有西班牙国旗和/或后缀的strings.xml文件中,在标签内添加这两个资源:

name="add_new_note">Agregar una nueva nota
name="your_note">Su nota

在带有德国国旗和/或(德)后缀的strings.xml文件中,在标签内添加这两个资源:

name="add_new_note">Eine neue Note hinzufügen
name="your_note">Ihre Notiz

接下来,我们需要编辑一些 Kotlin 代码来引用资源,而不是硬编码的 String。

打开DialogNewNote.kt文件,找到这行代码:

builder.setView(dialogView).setMessage("Add a new note")

编辑它以使用我们刚刚添加的字符串资源,而不是硬编码文本,如下所示:

builder.setView(dialogView).setMessage(
resources.getString(
R.string.add_new_note))

新代码使用链接的setViewsetMessageresources.getString功能来替换先前硬编码的"Add a new note"文本。仔细看,你会发现发送到getString的参数是字符串R.string.add_new_note标识符。

R.string代码指的是res文件夹中的字符串资源,add_new_note是我们的标识。然后,安卓将能够根据运行该应用的设备的区域设置来决定哪个版本(默认、西班牙或德语)合适。

我们还有一个硬编码的字符串资源需要更改。

打开DialogShowNote.kt文件,找到这行代码:

builder.setView(dialogView).setMessage("Your Note")

编辑它以使用我们刚刚添加的字符串资源,而不是硬编码文本,如下所示:

builder.setView(dialogView).setMessage(
resources.getString(R.string.your_note))

新代码再次使用链接的setViewsetMessageresources.getString功能来替换先前硬编码的"Your note"文本。同样,发送到getString的参数是字符串标识符,在本例中是R.string.your_note

安卓现在可以根据运行该应用的设备的地区来决定哪个版本(默认、西班牙或德语)合适。下一个屏幕截图显示,新的笔记屏幕现在具有相应语言的开始文本:

Making the translations work in Kotlin code

您可以添加任意多的字符串资源。从第 3 章、探索 AndroidStudio 和项目结构中提醒大家,使用字符串资源是推荐的方式,可以将所有文本添加到所有项目中。本书中的教程(除了《自我笔记》)将倾向于对它们进行硬编码,以形成一个更紧凑的教程。

总结

我们现在可以通过我们的应用走向全球,并添加更灵活的字符串资源,而不是对所有文本进行硬编码。

在下一章中,我们将看到如何使用动画和插值器为布局添加酷炫的动画。**


推荐阅读
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 通过Web界面管理Linux日志的解决方案
    本指南介绍了一种利用rsyslog、MariaDB和LogAnalyzer搭建集中式日志管理平台的方法,使用户可以通过Web界面查看和分析Linux系统的日志记录。此方案不仅适用于服务器环境,还提供了详细的步骤来确保系统的稳定性和安全性。 ... [详细]
  • 本文详细解释了华为ENSP模拟器中常用的命令,涵盖用户模式、系统模式、接口模式和地址池视图模式下的操作。这些命令对于进行计算机网络实验至关重要,帮助用户更好地理解和配置路由器及PC机的通信。 ... [详细]
  • Struts与Spring框架的集成指南
    本文详细介绍了如何将Struts和Spring两个流行的Java Web开发框架进行整合,涵盖从环境配置到代码实现的具体步骤。 ... [详细]
  • This pull request introduces the ability to provide comprehensive paragraph configurations directly within the Create Note and Create Paragraph REST endpoints, reducing the need for additional configuration calls. ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • CentOS系统安装与配置常见问题及解决方案
    本文详细介绍了在CentOS系统安装过程中遇到的常见问题及其解决方案,包括Vi编辑器的操作、图形界面的安装、网络连接故障排除等。通过本文,读者可以更好地理解和解决这些常见问题。 ... [详细]
  • 在成功安装和测试MySQL及Apache之后,接下来的步骤是安装PHP。为了确保安全性和配置的一致性,建议在安装PHP前先停止MySQL和Apache服务,并将MySQL集成到PHP中。 ... [详细]
  • 方法:1 配置数据库basediros.path.abspath(os.path.dirname(__file__))  #获取当前文件的绝对路径appFlask(__name__ ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 在进行QT交叉编译时,可能会遇到与目标架构不匹配的宏定义问题。例如,当为ARM或MIPS架构编译时,需要确保使用正确的宏(如QT_ARCH_ARM或QT_ARCH_MIPS),而不是默认的QT_ARCH_I386。本文将详细介绍如何正确配置编译环境以避免此类错误。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
author-avatar
郭恭彦_522
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有