热门标签 | 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 和项目结构中提醒大家,使用字符串资源是推荐的方式,可以将所有文本添加到所有项目中。本书中的教程(除了《自我笔记》)将倾向于对它们进行硬编码,以形成一个更紧凑的教程。

总结

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

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


推荐阅读
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
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社区 版权所有