diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/I18nUtil.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/I18nUtil.java
index 643d9ace..16a47995 100644
--- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/I18nUtil.java
+++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/I18nUtil.java
@@ -1,6 +1,7 @@
package com.xxl.job.admin.core.util;
import com.xxl.job.core.util.JacksonUtil;
+import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;
@@ -9,6 +10,7 @@ import org.springframework.core.io.support.EncodedResource;
import org.springframework.core.io.support.PropertiesLoaderUtils;
import java.io.IOException;
+import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
@@ -21,15 +23,19 @@ import java.util.Properties;
public class I18nUtil {
private static Logger logger = LoggerFactory.getLogger(I18nUtil.class);
- private static final String i18n_file = "i18n/message.properties";
-
private static Properties prop = null;
public static Properties loadI18nProp(){
if (prop != null) {
//return prop;
}
try {
- Resource resource = new ClassPathResource(i18n_file);
+ // bild i18n prop
+ String i18n = PropertiesUtil.getString("xxl.job.i18n");
+ i18n = StringUtils.isNotBlank(i18n)?("_"+i18n):i18n;
+ String i18nFile =MessageFormat.format("i18n/message{0}.properties", i18n);
+
+ // load prop
+ Resource resource = new ClassPathResource(i18nFile);
EncodedResource encodedResource = new EncodedResource(resource,"UTF-8");
prop = PropertiesLoaderUtils.loadProperties(encodedResource);
} catch (IOException e) {
diff --git a/xxl-job-admin/src/main/resources/i18n/message_en.properties b/xxl-job-admin/src/main/resources/i18n/message_en.properties
index 689fda5d..9bf6dc10 100644
--- a/xxl-job-admin/src/main/resources/i18n/message_en.properties
+++ b/xxl-job-admin/src/main/resources/i18n/message_en.properties
@@ -1,6 +1,229 @@
admin_name=Job Scheduling Center
+admin_name_full=Distributed Task Scheduling Platform XXL-JOB
+admin_version=1.9.1(快照版本)
+## system
+system_tips=系统提示
+system_ok=确定
+system_close=关闭
+system_save=保存
+system_cancel=取消
+system_search=搜索
+system_status=状态
+system_opt=操作
+system_please_input=请输入
+system_please_choose=请选择
+system_success=成功
+system_fail=失败
+system_add_suc=新增成功
+system_add_fail=新增失败
+system_update_suc=更新成功
+system_update_fail=更新失败
+system_all=全部
+system_api_error=接口异常
+system_show=查看
+system_empty=无
+system_opt_suc=操作成功
+system_opt_fail=操作失败
+system_opt_edit=编辑
+system_opt_del=删除
+system_unvalid=非法
+system_not_found=不存在
+
+## daterangepicker
+daterangepicker_ranges_recent_hour=最近一小时
+daterangepicker_ranges_today=今日
+daterangepicker_ranges_yesterday=昨日
+daterangepicker_ranges_this_month=本月
+daterangepicker_ranges_last_month=上个月
+daterangepicker_ranges_recent_week=最近一周
+daterangepicker_ranges_recent_month=最近一月
+daterangepicker_custom_name=自定义
+daterangepicker_custom_starttime=起始时间
+daterangepicker_custom_endtime=结束时间
+daterangepicker_custom_daysofweek=日,一,二,三,四,五,六
+daterangepicker_custom_monthnames=一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月
+
+## dataTable
+dataTable_sProcessing=处理中...
+dataTable_sLengthMenu=每页 _MENU_ 条记录
+dataTable_sZeroRecords=没有匹配结果
+dataTable_sInfo=第 _PAGE_ 页 ( 总共 _PAGES_ 页,_TOTAL_ 条记录 )
+dataTable_sInfoEmpty=无记录
+dataTable_sInfoFiltered=(由 _MAX_ 项结果过滤)
+dataTable_sSearch=搜索
+dataTable_sEmptyTable=表中数据为空
+dataTable_sLoadingRecords=载入中...
+dataTable_sFirst=首页
+dataTable_sPrevious=上页
+dataTable_sNext=下页
+dataTable_sLast=末页
+dataTable_sSortAscending=: 以升序排列此列
+dataTable_sSortDescending=: 以降序排列此列
+
+## login
login_btn=Login
login_remember_me=Remember Me
login_username_placeholder=Please input username
-login_password_placeholder=Please input password
\ No newline at end of file
+login_password_placeholder=Please input password
+login_username_empty=请输入登录账号
+login_username_lt_5=登录账号不应低于5位
+login_password_empty=请输入登录密码
+login_password_lt_5=登录密码不应低于5位
+login_success=登录成功
+login_fail=登录失败
+login_param_empty=账号或密码为空
+login_param_unvalid=账号或密码错误
+
+## logout
+logout_btn=注销
+logout_confirm=确认注销登录?
+logout_success=注销成功
+logout_fail=注销失败
+
+## dashboard
+job_dashboard_name=运行报表
+job_dashboard_job_num=任务数量
+job_dashboard_job_num_tip=调度中心运行的任务数量
+job_dashboard_trigger_num=调度次数
+job_dashboard_trigger_num_tip=调度中心触发的调度次数
+job_dashboard_jobgroup_num=执行器数量
+job_dashboard_jobgroup_num_tip=调度中心在线的执行器机器数量
+job_dashboard_report=调度报表
+job_dashboard_report_loaddata_fail=调度报表数据加载异常
+job_dashboard_date_report=日期分布图
+job_dashboard_date_report_suc_count=成功调度次数
+job_dashboard_date_report_fail_count=失败调度次数
+job_dashboard_rate_report=成功比例图
+job_dashboard_rate_report_suc_count=成功调度次数
+job_dashboard_rate_report_fail_count=失败调度次数
+
+## job info
+jobinfo_name=任务管理
+jobinfo_job=任务
+jobinfo_field_add=新增任务
+jobinfo_field_update=更新任务
+jobinfo_field_id=任务ID
+jobinfo_field_jobgroup=执行器
+jobinfo_field_jobdesc=任务描述
+jobinfo_field_gluetype=运行模式
+jobinfo_field_executorparam=任务参数
+jobinfo_field_cron_unvalid=请输入格式正确的Cron
+jobinfo_field_author=负责人
+jobinfo_field_alarmemail=报警邮件
+jobinfo_field_alarmemail_placeholder=请输入报警邮件,多个邮件地址则逗号分隔
+jobinfo_field_executorRouteStrategy=路由策略
+jobinfo_field_childJobId=子任务ID
+jobinfo_field_childJobId_limit=子任务ID({0})不可与父任务重复
+jobinfo_field_childJobId_placeholder=请输入子任务的任务ID,如存在多个则逗号分隔
+jobinfo_field_executorBlockStrategy=阻塞处理策略
+jobinfo_field_executorFailStrategy=失败处理策略
+jobinfo_script_location=脚本位置
+jobinfo_shard_index=分片序号
+jobinfo_shard_total=分片总数
+jobinfo_opt_pause=暂停
+jobinfo_opt_resume=恢复
+jobinfo_opt_log=日志
+jobinfo_opt_run=执行
+jobinfo_glue_remark=源码备注
+jobinfo_glue_remark_limit=源码备注长度限制为4~100
+jobinfo_glue_rollback=版本回溯
+jobinfo_glue_jobid_unvalid=任务ID非法
+jobinfo_glue_gluetype_unvalid=该任务非GLUE模式
+
+## job log
+joblog_name=调度日志
+joblog_status=状态
+joblog_status_all=全部
+joblog_status_suc=成功
+joblog_status_fail=失败
+joblog_status_running=进行中
+joblog_field_triggerTime=调度时间
+joblog_field_triggerCode=调度结果
+joblog_field_triggerMsg=调度备注
+joblog_field_handleTime=执行时间
+joblog_field_handleCode=执行结果
+joblog_field_handleMsg=执行备注
+joblog_field_executorAddress=执行器地址
+joblog_clean=清理
+joblog_clean_log=日志清理
+joblog_clean_type=清理方式
+joblog_clean_type_1=清理一个月之前日志数据
+joblog_clean_type_2=清理三个月之前日志数据
+joblog_clean_type_3=清理六个月之前日志数据
+joblog_clean_type_4=清理一年之前日志数据
+joblog_clean_type_5=清理一千条以前日志数据
+joblog_clean_type_6=清理一万条以前日志数据
+joblog_clean_type_7=清理三万条以前日志数据
+joblog_clean_type_8=清理十万条以前日志数据
+joblog_clean_type_9=清理所有日志数据
+joblog_clean_type_unvalid=清理类型参数异常
+joblog_handleCode_200=成功
+joblog_handleCode_500=失败
+joblog_handleCode_501=失败重试
+joblog_kill_log=终止任务
+joblog_kill_log_limit=调度失败,无法终止日志
+joblog_kill_log_byman=人为操作主动终止
+joblog_rolling_log=执行日志
+joblog_rolling_log_refresh=刷新
+joblog_rolling_log_triggerfail=任务发起调度失败,无法查看执行日志
+joblog_rolling_log_failoften=终止请求Rolling日志,请求失败次数超上限,可刷新页面重新加载日志
+joblog_logid_unvalid=日志ID非法
+
+## job group
+jobgroup_name=执行器管理
+jobgroup_list=执行器列表
+jobgroup_add=新增执行器
+jobgroup_edit=编辑执行器
+jobgroup_del=删除执行器
+jobgroup_field_order=排序
+jobgroup_field_title=名称
+jobgroup_field_addressType=注册方式
+jobgroup_field_addressType_0=自动注册
+jobgroup_field_addressType_1=手动录入
+jobgroup_field_addressType_limit=手动录入注册方式,机器地址不可为空
+jobgroup_field_registryList=机器地址
+jobgroup_field_registryList_unvalid=机器地址格式非法
+jobgroup_field_registryList_placeholder=请输入执行器地址列表,多地址逗号分隔
+jobgroup_field_appName_limit=限制以小写字母开头,由小写字母、数字和中划线组成
+jobgroup_field_appName_length=AppName长度限制为4~64
+jobgroup_field_title_length=名称长度限制为4~12
+jobgroup_field_order_digits=请输入整数
+jobgroup_field_orderrange=取值范围为1~1000
+jobgroup_del_limit_0=拒绝删除,该执行器使用中
+jobgroup_del_limit_1=拒绝删除, 系统至少保留一个执行器
+
+## job conf
+jobconf_fail_alarm=失败告警
+jobconf_fail_retry=失败重试
+jobconf_route_first=第一个
+jobconf_route_last=最后一个
+jobconf_route_round=轮询
+jobconf_route_random=随机
+jobconf_route_consistenthash=一致性HASH
+jobconf_route_lfu=最不经常使用
+jobconf_route_lru=最近最久未使用
+jobconf_route_failover=故障转移
+jobconf_route_busyover=忙碌转移
+jobconf_route_shard=分片广播
+jobconf_idleBeat=空闲检测
+jobconf_beat=心跳检测
+jobconf_monitor=调度中心监控报警
+jobconf_monitor_detail=监控告警明细
+jobconf_monitor_alarm_title=告警类型
+jobconf_monitor_alarm_type=调度失败
+jobconf_trigger_admin_adress=调度机器
+jobconf_trigger_exe_regtype=执行器-注册方式
+jobconf_trigger_exe_regaddress=执行器-地址列表
+jobconf_trigger_address_empty=调度失败:执行器地址为空
+jobconf_trigger_run=触发调度
+jobconf_trigger_child_run=触发子任务
+jobconf_trigger_fail_retry=调度失败重试
+jobconf_exe_fail_retry=执行失败重试
+jobconf_callback_child_msg1={0}/{1} [任务ID={2}], 触发{3}, 触发备注: {4}
+jobconf_callback_child_msg2={0}/{1} [任务ID={2}], 触发失败, 触发备注: 任务ID格式错误
+jobconf_callback_msg1=触发{0}, 触发备注: {1}
+
+## help
+job_help=使用教程
+job_help_document=官方文档
\ No newline at end of file
diff --git a/xxl-job-admin/src/main/resources/xxl-job-admin.properties b/xxl-job-admin/src/main/resources/xxl-job-admin.properties
index 9c425aba..85ea29cb 100644
--- a/xxl-job-admin/src/main/resources/xxl-job-admin.properties
+++ b/xxl-job-admin/src/main/resources/xxl-job-admin.properties
@@ -16,4 +16,7 @@ xxl.job.login.username=admin
xxl.job.login.password=123456
### xxl-job, access token
-xxl.job.accessToken=
\ No newline at end of file
+xxl.job.accessToken=
+
+### xxl-job, i18n (default empty as chinese, "en" as english)
+xxl.job.i18n=en
\ No newline at end of file