如何正确本地化Android资源以支持多种语言?

时间:2018-09-12 09:43:37

标签: android android-studio locale

我一直在研究将在不同国家/地区使用的Android应用程序。

因此,我遵循Android Developer Guide支持应用程序的不同语言,并使用Android Studio中的翻译编辑器来指定我要翻译的资源。但是,Android Studio预览版会向我显示正确的资源,但在运行应用程序时不会进行翻译,而是将其保留为默认值。我相信我可能已经错过了一些东西,但似乎找不到它。

以下图像显示了Android Studio中的目录和资源字符串:

Locale directories and resource files Strings in Translation Editor

默认字符串:

<resources>
    <string name="welcome_user">Welcome %1$s</string>
    <string name="logout">Logout</string>
    <string name="main_menu">Main menu</string>
    <string name="inventory">Inventory</string>
    <string name="login">Login</string>
</resources>

西班牙语字符串:

<resources>
    <string name="welcome_user">Bienvenido %1$s</string>
    <string name="logout">Cerrar sesión</string>
    <string name="main_menu">Menú principal</string>
    <string name="inventory">Inventario</string>
    <string name="login">"Iniciar sesión "</string>
</resources>

我通常以自己喜欢的方式引用布局xml中的资源

android:id="@+id/textWelcome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/welcome_user"

以下图像是当我将其设置为西班牙语语言环境(与上面的资源不同的String资源)时,Android Studio向我显示的内容,以及即使将设备语言设置为Español,在运行应用程序时显示的内容:

Spanish resources preview

Application

1 个答案:

答案 0 :(得分:0)

好的,我在搜索了相关文档和问题后在this帖子中找到了答案。问题不在于文件夹的结构或我如何检索资源。

我的resConfigs文件中的Android Gradle属性设置为仅支持与英语资源相关的语言资源。由于此设置,所有未指定的其他语言都被删除。

我添加了"es""nl"之后,一切都按预期显示。

productFlavors {
    dev {
        dimension "default"
        applicationIdSuffix '.dev'
        versionNameSuffix '-dev'
        resConfigs "en", "nl", "es" //The culprit I created and forgot 
    }