gluon mobile android 应用程序默认语言环境是 en_US 但 phone 是西班牙语

gluon mobile android application default locale is en_US but phone is in spanish

我使用默认项目在 gluon 中测试 i18n:gluon 移动单视图。我添加了一条打印行以获取: Locale.getdefault() 。但是是英语 en_US 并且设备是西班牙语。我有另一个带有捆绑包的大型项目,我遇到了同样的问题。我将默认项目放在这个问题中,因为我发现最好只显示一小部分代码并复制它。 代码

package com.local;

 import com.gluonhq.charm.glisten.control.AppBar;
 import com.gluonhq.charm.glisten.control.Icon;
 import com.gluonhq.charm.glisten.mvc.View;
 import com.gluonhq.charm.glisten.visual.MaterialDesignIcon;
 import java.util.Locale;
 import javafx.geometry.Pos;
 import javafx.scene.control.Button;
 import javafx.scene.control.Label;
 import javafx.scene.layout.VBox;

 public class BasicView extends View {

  public BasicView() {
    
    Label label = new Label("Hello JavaFX World!");

    Button button = new Button("Change the World!");
    button.setGraphic(new Icon(MaterialDesignIcon.LANGUAGE));
    button.setOnAction(e -> {label.setText("Hello JavaFX Universe!");
    
    // i add this line to default : gluon mobile single view 
    System.out.println(Locale.getDefault());});
    
    VBox controls = new VBox(15.0, label, button);
    controls.setAlignment(Pos.CENTER);
    
    setCenter(controls);
}

@Override
protected void updateAppBar(AppBar appBar) {
    appBar.setNavIcon(MaterialDesignIcon.MENU.button(e -> System.out.println("Menu")));
    appBar.setTitleText("Basic View");
    appBar.getActionItems().add(MaterialDesignIcon.SEARCH.button(e -> System.out.println("Search")));
}

}

我在真实设备上安装 .apk 后从控制台得到这个

[vie. mar. 26 17:44:13 CLST 2021][INFO] [SUB] D/GraalCompiled(13989): en_US

pom 文件:

` <project xmlns="http://maven.apache.org/POM/4.0.0" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven- 
   4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

<groupId>com.local</groupId>
<artifactId>local</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>>local</name>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.release>11</maven.compiler.release>
    <javafx.version>16</javafx.version>
    <attach.version>4.0.11</attach.version>
    <client.plugin.version>0.1.38</client.plugin.version>
    <javafx.plugin.version>0.0.5</javafx.plugin.version>
    <mainClassName>com.local.Local</mainClassName>
</properties>

<dependencies>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>${javafx.version}</version>
    </dependency>
    <dependency>
        <groupId>com.gluonhq</groupId>
        <artifactId>charm-glisten</artifactId>
        <version>6.0.6</version>
    </dependency>
    <dependency>
        <groupId>com.gluonhq.attach</groupId>
        <artifactId>display</artifactId>
        <version>${attach.version}</version>
    </dependency>
    <dependency>
        <groupId>com.gluonhq.attach</groupId>
        <artifactId>lifecycle</artifactId>
        <version>${attach.version}</version>
    </dependency>
    <dependency>
        <groupId>com.gluonhq.attach</groupId>
        <artifactId>statusbar</artifactId>
        <version>${attach.version}</version>
    </dependency>
    <dependency>
        <groupId>com.gluonhq.attach</groupId>
        <artifactId>storage</artifactId>
        <version>${attach.version}</version>
    </dependency>
    <dependency>
        <groupId>com.gluonhq.attach</groupId>
        <artifactId>util</artifactId>
        <version>${attach.version}</version>
    </dependency>
</dependencies>

<repositories>
    <repository>
        <id>Gluon</id>
        <url>https://nexus.gluonhq.com/nexus/content/repositories/releases</url>
    </repository>
</repositories>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
        </plugin>

        <plugin>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-maven-plugin</artifactId>
            <version>${javafx.plugin.version}</version>
            <configuration>
                <mainClass>${mainClassName}</mainClass>
            </configuration>
        </plugin>

        <plugin>
            <groupId>com.gluonhq</groupId>
            <artifactId>client-maven-plugin</artifactId>
            <version>${client.plugin.version}</version>
            <configuration>
                <target>${client.target}</target>
                <attachList>
                    <list>display</list>
                    <list>lifecycle</list>
                    <list>statusbar</list>
                    <list>storage</list>
                </attachList>
                <mainClass>${mainClassName}</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

<profiles>
    <profile>
        <id>desktop</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <client.target>host</client.target>
        </properties>
        <dependencies>
            <dependency>
                <groupId>com.gluonhq.attach</groupId>
                <artifactId>display</artifactId>
                <version>${attach.version}</version>
                <classifier>desktop</classifier>
            </dependency>
            <dependency>
                <groupId>com.gluonhq.attach</groupId>
                <artifactId>lifecycle</artifactId>
                <version>${attach.version}</version>
                <classifier>desktop</classifier>
            </dependency>
            <dependency>
                <groupId>com.gluonhq.attach</groupId>
                <artifactId>storage</artifactId>
                <version>${attach.version}</version>
                <classifier>desktop</classifier>
            </dependency>
        </dependencies>
    </profile>
    <profile>
        <id>ios</id>
        <properties>
            <client.target>ios</client.target>
        </properties>
    </profile>
    <profile>
        <id>android</id>
        <properties>
            <client.target>android</client.target>
        </properties>
    </profile>
</profiles>

`

您面临的问题是用于构建本机映像的语言环境(通常是您机器上的默认语言环境,除非另有设置)是将在 运行 时间使用的语言环境,无论设置了什么语言环境。

GraalVM 中有关于此的 open issue。目前还没有明确的解决方案,但预计将在 GraalVM 21.1 中提供(仅几周后)。

目前,解决方法是在客户端插件配置中设置目标的语言环境,例如:

<nativeImageArgs>
    <arg>-Duser.language=es</arg>
    <arg>-Duser.country=ES</arg>
</nativeImageArgs>

然后再次 运行

mvn -Pandroid client:build client:package

生成的 APK 将使用 es_ES 资源包。

当然,这意味着您必须为您支持的每种语言构建不同的image/APK,这确实很不方便。