3.9K Star 22.6K Fork 7.8K

GVPdromara / hutool

 / 详情

能否增加国际化支持

已完成
创建于  
2024-04-12 18:04

用ResourceBundle读取中文配置文件乱码,能不能增加读取setting文件的方式读取国际化配置

评论 (3)

时光似水戏流年 创建了任务

Setting本身支持自定义编码的,可以自定义编码。

不是编码,是方便读取配置,比如


import cn.hutool.setting.Setting;

import java.util.concurrent.ConcurrentHashMap;

public class SettingExt {

    static final  String[] extensionName = new String[]{".setting", ".ini"};

    static final ConcurrentHashMap<String, Setting> map = new ConcurrentHashMap<>();

    /**
     * 名字
     */
    String name;
    /**
     * 分隔符  读取特定语言时, 资源文件名称等于name+separator+locale
     */
    String separator;

    public SettingExt(String name, String separator) {
        this.name = name;
        this.separator = separator;
    }

    public static SettingExt init(String name, String separator) {
        SettingExt settingExt = new SettingExt(name, separator);
        Setting load = settingExt.load(null);
        map.put(name, load);
        return settingExt;
    }

    public String get(String key) {
        return get(key, null);

    }

    public String get(String key, String locale) {
        String lk = name;
        if (locale != null && !locale.isEmpty()) {
            lk = lk + separator + locale;
        }
        if (map.containsKey(lk)) {
            return map.get(lk).getStr(key);
        }
        Setting def = load(null);

        if (locale != null) {
            try {
                Setting load = load(locale);
                Setting setting1 = def.addSetting(load);
                map.put(lk, setting1);
            } catch (Exception e) {
                map.put(lk, def);
            }
        } else {
            map.put(lk, def);
        }
        return get(key, locale);
    }


    private Setting load(String locale) {
        String lk = name;
        if (locale != null && !locale.isEmpty()) {
            lk = lk + separator + locale;
        }
        return new Setting(lk + extensionName[0]);
    }
}

这样我读取配置信息,只需要

        SettingExt init = SettingExt.init("i18n/localeStr", "_");
        String dataPanelAccPauses = init.get("data_panel_acc_pauses");
        System.out.println("dataPanelAccPauses = " + dataPanelAccPauses);
        String s = init.get("data_panel_acc_pauses", "fv");
        System.out.println("s = " + s);
Looly 任务状态待办的 修改为已完成
Looly 添加了
 
question
标签
Looly 任务状态已完成 修改为待办的
Looly 任务状态待办的 修改为已完成

可以使用SettingUtil.get(name + "_" + "cn")

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
1463 loolly admin 1578914022
Java
1
https://gitee.com/dromara/hutool.git
git@gitee.com:dromara/hutool.git
dromara
hutool
hutool

搜索帮助