【仅供内部供应商使用,不提供对外解答和培训】

Page tree

【仅供内部供应商使用,不提供对外解答和培训】

Skip to end of metadata
Go to start of metadata

一、特殊名词介绍

二、背景、场景介绍

国际化,是让开发者开发的功能能够同时适应多种语言环境的一种途径。帆软产品面向着各行各业、各个地域的用户。不同的用户语言习惯各不相同,通过国际化接口可以使得开发者开发的插件能够满足各种语言环境的需要。

一般主要在 前端界面展示( 通过JS控制)、日志、设计器界面展示 这3个场景中使用。

三、接口介绍

LocaleFinder.java
package com.fr.stable.fun;

/**
 * @author richie
 * @date 2015-07-09
 * @since 8.0
 * 插件中的国际化文件寻找接口
 */
public interface LocaleFinder extends Level {
    
    String MARK_STRING = "LocaleFinder";

    int CURRENT_LEVEL = 1;

    /**
     * 查找国际化文件的路径
     *
     * @return 国际化文件的路径
     */
    String find();
}


四、支持版本

产品线

版本

支持情况

备注

FR8.0支持
FR9.0支持
FR10.0支持
BI3.6支持
BI4.0支持
BI5.1支持
BI5.1.2支持
BI5.1.3支持

五、插件注册

plugin.xml
<extra-core>
        <LocaleFinder class="your class name"/>
</extra-core>


六、原理说明

接口注册逻辑:接口实例通过ExtraClassManager#addLocaleFinder 注册到 InterProviderFactory 这个国际化的工厂类中注入到具体的 InterProvider 实例中。

接口的生效逻辑:通过InterProviderFactory 获取到 InterProvider 实例,最后通过 getLocText 就可以获取到注入的相关国际化数据了


七、特殊限制说明

String find(); 方法返回的是一个相对于插件JAR的包内文件路径( 比如 com/tptj/demo/hg/locale/demo)。

国际化文件的命名规则:国际化文件按组定义,文件的后缀均为 properties。每一组国际化申明都必须包含一个默认文件 和可选支持的语言文件。

以 com/tptj/demo/hg/locale/demo 这个路径为例。其中com/tptj/demo/hg/locale表示的是实际的包路径,demo表示的是国际化的名称。如果国际化名为demo,则必须存在以下文件 com/tptj/demo/hg/locale/demo.properties

然后每一种支持的语言,增加一个对应的语言文件。比如 com/tptj/demo/hg/locale/demo_zh_CN.properties 表示的是中文国际化文件。

下面看一个实例:

demo.properties
Plugin-Demo_Hello_World=Hello World
Plugin-Demo_Number=number:{}

这是一个默认定义,当用户使用的语言环境没有对应的国际化定义时,则以默认的实现生效。

demo_zh_CN.properties
Plugin-Demo_Hello_World=你好世界
Plugin-Demo_Number=数字:{}
demo_en_US.properties
Plugin-Demo_Hello_World=Hello World
Plugin-Demo_Number=number:{}

上面这组国际化定义,声明了对简中和英文环境的支持

实际调用时:有以下几种调用方式

//设计器调用
InterProviderFactory.getDesignI18nProvider().getLocText("Plugin-Demo_Hello_World");
InterProviderFactory.getDesignI18nProvider().getLocText("Plugin-Demo_Number","100");
//或者
Toolkit.getLocText("Plugin-Demo_Hello_World");
Toolkit.getLocText("Plugin-Demo_Number","100");

//服务端调用
InterProviderFactory.getProvider().getLocText("Plugin-Demo_Hello_World");
InterProviderFactory.getProvider().getLocText("Plugin-Demo_Number","100");

//前端报表预览调用
FR.i18nText("Plugin-Demo_Hello_World");
FR.i18nText("Plugin-Demo_Number","100");

//前端决策平台或仪表板调用
BI.i18nText("Plugin-Demo_Hello_World");
BI.i18nText("Plugin-Demo_Number","100");

注:国际化定义中,可以通过 {} 进行动态拼接

常用的国际化列表为 

语言国际化key
简中zh 或 zh_CN
繁中zh_TW
英文en 或 en_US
日文ja_JP
韩文ko_KR


八、常用链接

demo地址:demo-locale-finder

九、开源案例

免责声明:所有文档中的开源示例,均为开发者自行开发并提供。仅用于参考和学习使用,开发者和官方均无义务对开源案例所涉及的所有成果进行教学和指导。禁止用于任何商业用途,若作为商用一切后果责任由使用者自行承担。

open-JSD-7944

open-JSD-7814

open-JSD-7803

open-JSD-7706

open-JSD-6952

open-JSD-6890