diff --git a/common/src/main/resources/static/layer/3.1/layer.js b/common/src/main/resources/static/layer/3.1/layer.js
index 4afb4994..61a04305 100644
--- a/common/src/main/resources/static/layer/3.1/layer.js
+++ b/common/src/main/resources/static/layer/3.1/layer.js
@@ -1,41 +1,12 @@
/**
-
@Name:layer v3.0.3 Web弹层组件
@Author:贤心
@Site:http://layer.layui.com
@License:MIT
-
*/
-
;!function(window, undefined){
"use strict";
-var i18n = {
- btnOk: '确定',
- btnCancel: '取消',
- title: '信息',
- promptTipA: '最多输入',
- promptTipB: '个字符',
- noPicture: '没有图片',
- photoError: '当前图片地址异常
是否继续查看下一张?',
- photoNextPage: '下一张',
- photoClose: '不看了'
-};
-
-if (window.lang == 'en'){
- i18n = {
- btnOk: 'Ok',
- btnCancel: 'Cancle',
- title: 'Information',
- promptTipA: 'Enter ',
- promptTipB: 'character at most.',
- noPicture: 'No picture',
- photoError: 'Current image address error.
Next slide?',
- photoNextPage: 'The next',
- photoClose: 'Close'
- };
-}
-
var isLayui = window.layui && layui.define, $, win, ready = {
getPath: function(){
var js = document.scripts, script = js[js.length - 1], jsPath = script.src;
@@ -44,7 +15,7 @@ var isLayui = window.layui && layui.define, $, win, ready = {
}(),
config: {}, end: {}, minIndex: 0, minLeft: [],
- btn: [i18n.btnOk, i18n.btnCancel],
+ //btn: [layer.i18n.btnOk, layer.i18n.btnCancel], // ThinkGem
//五种原始层模式
type: ['dialog', 'page', 'iframe', 'loading', 'tips']
@@ -53,6 +24,17 @@ var isLayui = window.layui && layui.define, $, win, ready = {
//默认内置方法。
var layer = {
v: '3.0.3',
+ i18n: { // ThinkGem 国际化支持
+ btnOk: '确定',
+ btnCancel: '取消',
+ title: '信息',
+ promptTipA: '最多输入',
+ promptTipB: '个字符',
+ noPicture: '没有图片',
+ photoError: '当前图片地址异常
是否继续查看下一张?',
+ photoNextPage: '下一张',
+ photoClose: '不看了'
+ },
ie: function(){ //ie版本
var agent = navigator.userAgent.toLowerCase();
return (!!window.ActiveXObject || "ActiveXObject" in window) ? (
@@ -133,7 +115,8 @@ var layer = {
}
return layer.open($.extend({
content: content,
- btn: ready.btn,
+ //btn: ready.btn,
+ btn: [layer.i18n.btnOk, layer.i18n.btnCancel],
yes: yes,
btn2: cancel
}, type ? {} : options));
@@ -210,7 +193,7 @@ Class.pt.config = {
shade: 0.3,
fixed: true,
move: doms[1],
- title: i18n.title,
+// title: layer.i18n.title, // ThinkGem 替换 config.title 为 layer.i18n.title,支持国际化
offset: 'auto',
area: 'auto',
closeBtn: 1,
@@ -229,10 +212,10 @@ Class.pt.config = {
//容器
Class.pt.vessel = function(conType, callback){
var that = this, times = that.index, config = that.config;
- var zIndex = config.zIndex + times, titype = typeof config.title === 'object';
+ var zIndex = config.zIndex + times, titype = typeof layer.i18n.title === 'object';
var ismax = config.maxmin && (config.type === 1 || config.type === 2);
- var titleHTML = (config.title ? '
'
- + (titype ? config.title[0] : config.title)
+ var titleHTML = (layer.i18n.title ? '
'
+ + (titype ? layer.i18n.title[0] : layer.i18n.title)
+ '
' : '');
config.zIndex = zIndex;
@@ -249,7 +232,7 @@ Class.pt.vessel = function(conType, callback){
+ '
'
+ ''+ function(){
var closebtn = ismax ? '' : '';
- config.closeBtn && (closebtn += '');
+ config.closeBtn && (closebtn += '');
return closebtn;
}() + ''
+ (config.btn ? function(){
@@ -292,7 +275,8 @@ Class.pt.creat = function(){
switch(config.type){
case 0:
- config.btn = ('btn' in config) ? config.btn : ready.btn[0];
+ //config.btn = ('btn' in config) ? config.btn : ready.btn[0]; ThinkGem
+ config.btn = ('btn' in config) ? config.btn : layer.i18n.btnOk;// ThinkGem
layer.closeAll('dialog');
break;
case 2:
@@ -309,7 +293,7 @@ Class.pt.creat = function(){
+ doms[4] + '' + times +'">';
break;
case 3:
- delete config.title;
+ delete layer.i18n.title;
delete config.closeBtn;
config.icon === -1 && (config.icon === 0);
layer.closeAll('loading');
@@ -318,7 +302,7 @@ Class.pt.creat = function(){
conType || (config.content = [config.content, 'body']);
config.follow = config.content[1];
config.content = config.content[0] + '';
- delete config.title;
+ delete layer.i18n.title;
config.tips = typeof config.tips === 'object' ? config.tips : [config.tips, true];
config.tipsMore || layer.closeAll('tips');
break;
@@ -1020,7 +1004,7 @@ layer.prompt = function(options, yes){
return layer.open($.extend({
type: 1
- ,btn: [i18n.btnOk,i18n.btnCancel]
+ ,btn: [layer.i18n.btnOk,layer.i18n.btnCancel]
,content: content
,skin: 'layui-layer-prompt' + skin('prompt')
,maxWidth: win.width()
@@ -1035,7 +1019,7 @@ layer.prompt = function(options, yes){
if(value === ''){
prompt.focus();
} else if(value.length > (options.maxlength||500)) {
- layer.tips(i18n.promptTipA + (options.maxlength || 500) + i18n.promptTipB, prompt, {tips: 1});
+ layer.tips(layer.i18n.promptTipA + (options.maxlength || 500) + layer.i18n.promptTipB, prompt, {tips: 1});
} else {
yes && yes(value, index, prompt);
}
@@ -1287,9 +1271,9 @@ layer.photos = function(options, loop, key){
}, options));
}, function(){
layer.close(dict.loadi);
- layer.msg(i18n.photoError, {
+ layer.msg(layer.i18n.photoError, {
time: 30000,
- btn: [i18n.photoNextPage, i18n.photoClose],
+ btn: [layer.i18n.photoNextPage, layer.i18n.photoClose],
yes: function(){
data.length > 1 && dict.imgnext(true,true);
}
diff --git a/common/src/main/resources/static/select2/4.0/i18n/ja_JP.js b/common/src/main/resources/static/select2/4.0/i18n/ja_JP.js
new file mode 100644
index 00000000..34782622
--- /dev/null
+++ b/common/src/main/resources/static/select2/4.0/i18n/ja_JP.js
@@ -0,0 +1,24 @@
+(function() {
+ if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd)
+ var e = jQuery.fn.select2.amd;
+ return e.define("select2/i18n/zh_CN", [], function() {
+ return { errorLoading : function() {
+ return "結果に載せることはできない。"
+ }, inputTooLong : function(e) {
+ var t = e.input.length - e.maximum, n = "" + t + "文字を削除してください";
+ return n
+ }, inputTooShort : function(e) {
+ var t = e.minimum - e.input.length, n = "少なくとも" + t + "文字を入力してください";
+ return n
+ }, loadingMore : function() {
+ return "より多くの……"
+ }, maximumSelected : function(e) {
+ var t = "選択するしかない" + e.maximum + "項目別";
+ return t
+ }, noResults : function() {
+ return "一致する項目を見つけることができなかった"
+ }, searching : function() {
+ return "検索しています……"
+ } }
+ }), { define : e.define, require : e.require }
+})();
\ No newline at end of file
diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/db/InitCoreData.xlsx b/modules/core/src/main/java/com/jeesite/modules/sys/db/InitCoreData.xlsx
index 3d43987e..bdc67539 100644
Binary files a/modules/core/src/main/java/com/jeesite/modules/sys/db/InitCoreData.xlsx and b/modules/core/src/main/java/com/jeesite/modules/sys/db/InitCoreData.xlsx differ
diff --git a/modules/core/src/main/resources/db/upgrade/core/mssql/mssql_4.1.5.sql b/modules/core/src/main/resources/db/upgrade/core/mssql/mssql_4.1.5.sql
index 69da9d5a..9f17255f 100644
--- a/modules/core/src/main/resources/db/upgrade/core/mssql/mssql_4.1.5.sql
+++ b/modules/core/src/main/resources/db/upgrade/core/mssql/mssql_4.1.5.sql
@@ -1,10 +1,10 @@
-- 新增文件管理模块
-INSERT INTO js_sys_module(module_code, module_name, description, main_class_name, current_version, upgrade_info, status, create_by, create_date, update_by, update_date, remarks)
+INSERT INTO ${_prefix}sys_module(module_code, module_name, description, main_class_name, current_version, upgrade_info, status, create_by, create_date, update_by, update_date, remarks)
VALUES ('filemanager', '文件管理', '公共文件柜、个人文件柜、文件分享', 'com.jeesite.modules.filemanager.web.FilemanagerController', '4.1.4', NULL, '0', 'system', getdate(), 'system', getdate(), NULL);
-- 员工附属机构关系表
-CREATE TABLE [js_sys_employee_office]
+CREATE TABLE [${_prefix}sys_employee_office]
(
[id] varchar(64) NOT NULL UNIQUE,
[emp_code] varchar(64) NOT NULL,
@@ -12,3 +12,7 @@ CREATE TABLE [js_sys_employee_office]
[post_code] varchar(64),
PRIMARY KEY ([emp_code], [office_code])
);
+
+-- 新增日语(日本语)语言包
+INSERT INTO ${_prefix}sys_dict_data(dict_code, parent_code, parent_codes, tree_sort, tree_sorts, tree_leaf, tree_level, tree_names, dict_label, dict_value, dict_type, is_sys, description, css_style, css_class, status, create_by, create_date, update_by, update_date, remarks, corp_code, corp_name, extend_s1, extend_s2, extend_s3, extend_s4, extend_s5, extend_s6, extend_s7, extend_s8, extend_i1, extend_i2, extend_i3, extend_i4, extend_f1, extend_f2, extend_f3, extend_f4, extend_d1, extend_d2, extend_d3, extend_d4)
+VALUES ('1126375062364020736', '0', '0,', 60, '0000000060,', '1', 0, '日本語', '日本語', 'ja_JP', 'sys_lang_type', '1', '', '', '', '0', 'system', getdate(), 'system', getdate(), '', '0', 'JeeSite', '', '', '', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
diff --git a/modules/core/src/main/resources/db/upgrade/core/mysql/mysql_4.1.5.sql b/modules/core/src/main/resources/db/upgrade/core/mysql/mysql_4.1.5.sql
index f04e066e..9470458c 100644
--- a/modules/core/src/main/resources/db/upgrade/core/mysql/mysql_4.1.5.sql
+++ b/modules/core/src/main/resources/db/upgrade/core/mysql/mysql_4.1.5.sql
@@ -1,10 +1,10 @@
-- 新增文件管理模块
-INSERT INTO js_sys_module(module_code, module_name, description, main_class_name, current_version, upgrade_info, status, create_by, create_date, update_by, update_date, remarks)
+INSERT INTO ${_prefix}sys_module(module_code, module_name, description, main_class_name, current_version, upgrade_info, status, create_by, create_date, update_by, update_date, remarks)
VALUES ('filemanager', '文件管理', '公共文件柜、个人文件柜、文件分享', 'com.jeesite.modules.filemanager.web.FilemanagerController', '4.1.4', NULL, '0', 'system', now(), 'system', now(), NULL);
-- 员工附属机构关系表
-CREATE TABLE js_sys_employee_office
+CREATE TABLE ${_prefix}sys_employee_office
(
id varchar(64) NOT NULL COMMENT '编号',
emp_code varchar(64) NOT NULL COMMENT '员工编码',
@@ -13,3 +13,7 @@ CREATE TABLE js_sys_employee_office
PRIMARY KEY (emp_code, office_code),
UNIQUE (id)
) COMMENT = '员工附属机构关系表';
+
+-- 新增日语(日本语)语言包
+INSERT INTO ${_prefix}sys_dict_data(dict_code, parent_code, parent_codes, tree_sort, tree_sorts, tree_leaf, tree_level, tree_names, dict_label, dict_value, dict_type, is_sys, description, css_style, css_class, status, create_by, create_date, update_by, update_date, remarks, corp_code, corp_name, extend_s1, extend_s2, extend_s3, extend_s4, extend_s5, extend_s6, extend_s7, extend_s8, extend_i1, extend_i2, extend_i3, extend_i4, extend_f1, extend_f2, extend_f3, extend_f4, extend_d1, extend_d2, extend_d3, extend_d4)
+VALUES ('1126375062364020736', '0', '0,', 60, '0000000060,', '1', 0, '日本語', '日本語', 'ja_JP', 'sys_lang_type', '1', '', '', '', '0', 'system', now(), 'system', now(), '', '0', 'JeeSite', '', '', '', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
diff --git a/modules/core/src/main/resources/db/upgrade/core/oracle/oracle_4.1.5.sql b/modules/core/src/main/resources/db/upgrade/core/oracle/oracle_4.1.5.sql
index d299a830..1dde2a66 100644
--- a/modules/core/src/main/resources/db/upgrade/core/oracle/oracle_4.1.5.sql
+++ b/modules/core/src/main/resources/db/upgrade/core/oracle/oracle_4.1.5.sql
@@ -1,10 +1,10 @@
-- 新增文件管理模块
-INSERT INTO js_sys_module(module_code, module_name, description, main_class_name, current_version, upgrade_info, status, create_by, create_date, update_by, update_date, remarks)
+INSERT INTO ${_prefix}sys_module(module_code, module_name, description, main_class_name, current_version, upgrade_info, status, create_by, create_date, update_by, update_date, remarks)
VALUES ('filemanager', '文件管理', '公共文件柜、个人文件柜、文件分享', 'com.jeesite.modules.filemanager.web.FilemanagerController', '4.1.4', NULL, '0', 'system', sysdate, 'system', sysdate, NULL);
-- 员工附属机构关系表
-CREATE TABLE js_sys_employee_office
+CREATE TABLE ${_prefix}sys_employee_office
(
id varchar2(64) NOT NULL UNIQUE,
emp_code varchar2(64) NOT NULL,
@@ -12,9 +12,12 @@ CREATE TABLE js_sys_employee_office
post_code varchar2(64),
PRIMARY KEY (emp_code, office_code)
);
-COMMENT ON TABLE js_sys_employee_office IS '员工附属机构关系表';
-COMMENT ON COLUMN js_sys_employee_office.id IS '编号';
-COMMENT ON COLUMN js_sys_employee_office.emp_code IS '员工编码';
-COMMENT ON COLUMN js_sys_employee_office.office_code IS '机构编码';
-COMMENT ON COLUMN js_sys_employee_office.post_code IS '岗位编码';
+COMMENT ON TABLE ${_prefix}sys_employee_office IS '员工附属机构关系表';
+COMMENT ON COLUMN ${_prefix}sys_employee_office.id IS '编号';
+COMMENT ON COLUMN ${_prefix}sys_employee_office.emp_code IS '员工编码';
+COMMENT ON COLUMN ${_prefix}sys_employee_office.office_code IS '机构编码';
+COMMENT ON COLUMN ${_prefix}sys_employee_office.post_code IS '岗位编码';
+-- 新增日语(日本语)语言包
+INSERT INTO ${_prefix}sys_dict_data(dict_code, parent_code, parent_codes, tree_sort, tree_sorts, tree_leaf, tree_level, tree_names, dict_label, dict_value, dict_type, is_sys, description, css_style, css_class, status, create_by, create_date, update_by, update_date, remarks, corp_code, corp_name, extend_s1, extend_s2, extend_s3, extend_s4, extend_s5, extend_s6, extend_s7, extend_s8, extend_i1, extend_i2, extend_i3, extend_i4, extend_f1, extend_f2, extend_f3, extend_f4, extend_d1, extend_d2, extend_d3, extend_d4)
+VALUES ('1126375062364020736', '0', '0,', 60, '0000000060,', '1', 0, '日本語', '日本語', 'ja_JP', 'sys_lang_type', '1', '', '', '', '0', 'system', sysdate, 'system', sysdate, '', '0', 'JeeSite', '', '', '', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
diff --git a/modules/core/src/main/resources/db/upgrade/core/postgresql/postgresql_4.1.5.sql b/modules/core/src/main/resources/db/upgrade/core/postgresql/postgresql_4.1.5.sql
index 7fc9a256..36c927cf 100644
--- a/modules/core/src/main/resources/db/upgrade/core/postgresql/postgresql_4.1.5.sql
+++ b/modules/core/src/main/resources/db/upgrade/core/postgresql/postgresql_4.1.5.sql
@@ -1,10 +1,10 @@
-- 新增文件管理模块
-INSERT INTO js_sys_module(module_code, module_name, description, main_class_name, current_version, upgrade_info, status, create_by, create_date, update_by, update_date, remarks)
+INSERT INTO ${_prefix}sys_module(module_code, module_name, description, main_class_name, current_version, upgrade_info, status, create_by, create_date, update_by, update_date, remarks)
VALUES ('filemanager', '文件管理', '公共文件柜、个人文件柜、文件分享', 'com.jeesite.modules.filemanager.web.FilemanagerController', '4.1.4', NULL, '0', 'system', now(), 'system', now(), NULL);
-- 员工附属机构关系表
-CREATE TABLE js_sys_employee_office
+CREATE TABLE ${_prefix}sys_employee_office
(
id varchar(64) NOT NULL UNIQUE,
emp_code varchar(64) NOT NULL,
@@ -12,9 +12,12 @@ CREATE TABLE js_sys_employee_office
post_code varchar(64),
PRIMARY KEY (emp_code, office_code)
) WITHOUT OIDS;
-COMMENT ON TABLE js_sys_employee_office IS '员工附属机构关系表';
-COMMENT ON COLUMN js_sys_employee_office.id IS '编号';
-COMMENT ON COLUMN js_sys_employee_office.emp_code IS '员工编码';
-COMMENT ON COLUMN js_sys_employee_office.office_code IS '机构编码';
-COMMENT ON COLUMN js_sys_employee_office.post_code IS '岗位编码';
+COMMENT ON TABLE ${_prefix}sys_employee_office IS '员工附属机构关系表';
+COMMENT ON COLUMN ${_prefix}sys_employee_office.id IS '编号';
+COMMENT ON COLUMN ${_prefix}sys_employee_office.emp_code IS '员工编码';
+COMMENT ON COLUMN ${_prefix}sys_employee_office.office_code IS '机构编码';
+COMMENT ON COLUMN ${_prefix}sys_employee_office.post_code IS '岗位编码';
+-- 新增日语(日本语)语言包
+INSERT INTO ${_prefix}sys_dict_data(dict_code, parent_code, parent_codes, tree_sort, tree_sorts, tree_leaf, tree_level, tree_names, dict_label, dict_value, dict_type, is_sys, description, css_style, css_class, status, create_by, create_date, update_by, update_date, remarks, corp_code, corp_name, extend_s1, extend_s2, extend_s3, extend_s4, extend_s5, extend_s6, extend_s7, extend_s8, extend_i1, extend_i2, extend_i3, extend_i4, extend_f1, extend_f2, extend_f3, extend_f4, extend_d1, extend_d2, extend_d3, extend_d4)
+VALUES ('1126375062364020736', '0', '0,', 60, '0000000060,', '1', 0, '日本語', '日本語', 'ja_JP', 'sys_lang_type', '1', '', '', '', '0', 'system', now(), 'system', now(), '', '0', 'JeeSite', '', '', '', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
diff --git a/modules/core/src/main/resources/db/upgrade/core/versions b/modules/core/src/main/resources/db/upgrade/core/versions
index a33d2623..095e8c03 100644
--- a/modules/core/src/main/resources/db/upgrade/core/versions
+++ b/modules/core/src/main/resources/db/upgrade/core/versions
@@ -10,4 +10,5 @@
4.1.1
4.1.2
4.1.3
-4.1.4
\ No newline at end of file
+4.1.4
+4.1.5
\ No newline at end of file
diff --git a/modules/core/src/main/resources/i18n/core/common/i18n_en.properties b/modules/core/src/main/resources/i18n/core/common/i18n_en.properties
index df92d158..884e8765 100644
--- a/modules/core/src/main/resources/i18n/core/common/i18n_en.properties
+++ b/modules/core/src/main/resources/i18n/core/common/i18n_en.properties
@@ -15,6 +15,7 @@ sys.login.accountDisabled=This Account has disabled.
sys.login.accountFreezed=This Account has freezed.
sys.login.accountAudited=This Account has audited.
sys.login.accountInvalid=This Account has invalid.
+sys.login.tickOutMessage=The account has been removed by the administrator. Please login again.
sys.login.multiAddrMessage=The account has been logged in elsewhere. Please login again.
sys.login.failedNumLock=Login failed, try too many times, the account has been locked, please {0} in minutes after retry.
diff --git a/modules/core/src/main/resources/i18n/core/common/i18n_ja_JP.properties b/modules/core/src/main/resources/i18n/core/common/i18n_ja_JP.properties
new file mode 100644
index 00000000..c6d00a9c
--- /dev/null
+++ b/modules/core/src/main/resources/i18n/core/common/i18n_ja_JP.properties
@@ -0,0 +1,74 @@
+
+# =========== 登录登出相关 ===========
+
+sys.login.notLongIn=ログインしていないか、またはログインがタイムアウトしました。もう一度ログインしてください
+sys.login.success=ログイン成功!
+sys.login.getInfo=情報取得成功!
+sys.login.failure=ログインID或いはパスワードに誤りがあります。もう一度にゅうしてください。
+sys.login.error=申し訳ございません。ただいまシステムへアクセスできません。しばらくお待ちしてから再度お試してください!
+sys.logout.success=ログアウト成功!
+
+# =========== 账号登录相关 ===========
+
+sys.login.accountIsBlank=ログインIDを入力してください。
+sys.login.validCodeError=確認コードに誤りがあります。
+sys.login.accountDisabled=このアカウントは無効されています。
+sys.login.accountFreezed=このアカウントは凍結されています。
+sys.login.accountAudited=このアカウントは審査中です。
+sys.login.accountInvalid=このアカウントは存在しません。
+sys.login.tickOutMessage=アカウントは管理者によってオンラインから削除されました。もう一度ログインしてください。
+sys.login.multiAddrMessage=アカウントは他の場所でログインしています。もう一度ログインしてください。
+sys.login.failedNumLock=ログインに失敗しました。試行回数が多すぎます。アカウントがロックされています。{0}分後にもう一度お試しください。
+
+# =========== 用户管理相关 ===========
+
+sys.user.loginCodeExists=ログインアカウントは既に存在します
+sys.user.userCodeNotExists=ログインコードが存在しません
+sys.user.userNameNotBlank=ユーザー名を入力してください
+sys.user.infoSaveSuccess=ユーザー情報保存成功
+
+# =========== 用户密码安全策略 ===========
+
+sys.user.oldPasswordError=旧パスワードが間違っています。再入力してください
+sys.user.confirmPasswrodError=新パスワードは新パスワード確認とは異なります。再入力してください
+sys.user.passwordModifySuccess=パスワード変更に成功
+sys.user.passwordModifyNotRepeat=新パスワードを以前の{0}回以内の設定記録と同じにすることはできません。
+sys.user.passwordModifySecurityLevel=設定したパスワードが弱いパスワードであるため、パスワードの更新に失敗しました。
+sys.user.initPasswordModifyTip=パスワードはまだ初期パスワードです、パスワードを変更してください
+sys.user.passwordModifyTip=パスワードは{0}日間変更されていません。パスワードを変更してください。
+sys.user.passwordError=ログインパスワードが正しくありません。再入力してください
+sys.user.pwdQuestionModifySuccess=合言葉変更成功
+sys.user.pwdQuestionAnswerError=合言葉違います
+
+# =========== 错误页面相关 ===========
+
+sys.error.400.title=リクエストパラメーターに誤りがあります
+sys.error.400.message=リクエストパラメーターに誤りがあります。このパラメーターの解析ができません。
+sys.error.403.title=権限がありません
+sys.error.403.message=該当操作の権限がありません!
+sys.error.403.message.p1=申し訳ございません。このページのアクセス権限がありません。適当ではない場合システム管理者へ連絡してください。
+sys.error.404.title=ページが存在しません
+sys.error.404.message=アクセスしたページは存在しません!
+sys.error.404.message.p1=このエラーは次のような理由で発生する可能性があります:
+sys.error.404.message.p2=アドレスURLが正しく入力されておらず、リンクの有効期限が切れています。
+sys.error.404.message.p3=アクセスしているアドレスURLは:
+sys.error.404.message.p4=質問がある場合は、管理者に連絡してください。.
+sys.error.500.title=システム内部エラー
+sys.error.500.message=アクセスしたページは問題が発生しました!
+sys.error.500.message.p1=申し訳ございません。アクセスしたページは問題が発生しました,システム管理者へ連絡してください。
+sys.error.returnButton=前のページに戻る
+
+# =========== 文件上传相关 ===========
+
+sys.file.uploadFileIsEmpty=サーバーに該当ファイルはありません。
+sys.file.uploadValidNotBlank=ファイル検証番号とファイル名を入力してください。
+sys.file.uploadValidImage=画像のみアップロードできます({0})
+sys.file.uploadValidVideo=動画のみアップロードできます({0})
+sys.file.uploadValidFile=文書のみをアップロードできます({0})
+sys.file.uploadValidAll=フォーマットが正しくありません({0})
+sys.file.uploadValidSize=サイズは{0}を超過できません
+sys.file.uploadValidContent=ファイルコンテンツフォーマットは許可されていません。
+sys.file.uploadSuccessSeconds=セカンドアップロード成功,時間{0}
+sys.file.uploadSuccess=アップロード成功,時間{0}
+sys.file.downloadFileNotExist=ファイルが存在しません!
+sys.file.chunkUploading=アップロード中 {0}/{1}
diff --git a/modules/core/src/main/resources/i18n/core/common_view/i18n_en.properties b/modules/core/src/main/resources/i18n/core/common_view/i18n_en.properties
index cc9e60c2..7b968981 100644
--- a/modules/core/src/main/resources/i18n/core/common_view/i18n_en.properties
+++ b/modules/core/src/main/resources/i18n/core/common_view/i18n_en.properties
@@ -1,8 +1,6 @@
# =========== common ===========
-英语=English
-
保\ 存=Save
关\ 闭=Close
确定=Ok
diff --git a/modules/core/src/main/resources/i18n/core/common_view/i18n_ja_JP.properties b/modules/core/src/main/resources/i18n/core/common_view/i18n_ja_JP.properties
new file mode 100644
index 00000000..fb62bcf0
--- /dev/null
+++ b/modules/core/src/main/resources/i18n/core/common_view/i18n_ja_JP.properties
@@ -0,0 +1,81 @@
+
+# =========== common ===========
+
+保\ 存=保存
+关\ 闭=閉じる
+确定=はい
+清除=クリア
+关闭=閉じる
+查询=検索
+重置=リセット
+新增=作成
+增行=行作成
+刷新=リフレッシュ
+查看=詳細
+展开=展開
+展开一级=一階層展開
+折叠=収束
+折叠全部=全部収束
+操作=操作
+更多操作=他の操作
+
+基本信息=基本情報
+详细信息=詳細情報
+扩展字段=拡張項目
+
+# =========== imageclip ===========
+
+图片裁剪=画像編集
+选择图片=画像選択
+放大=拡大
+缩小=縮小
+向左移动=左へ移動
+向右移动=右へ移動
+向上移动=上へ移動
+向下移动=下へ移動
+逆时针旋转=左回り
+顺时针旋转=右回り
+水平反转=水平反転
+左右反转=左右反転
+
+# =========== treeselect ===========
+
+选项选择=オプション選択
+显示搜索=フィルター表示
+隐藏搜索=フィルター非表示
+关键字=キーワード
+搜索=検索
+展开=開く
+折叠=隠す
+不能选择根节点=ルート要素の選択ができません
+不能选择父节点=親要素の選択ができません
+请重新选择=もう一度選択してください
+
+# =========== fileupload ===========
+
+文件=ファイル
+文档=ドキュメント
+图片=画像
+音频或视频=音声 or 動画
+请上传=アップロード
+开始上传=アップロード
+或将照片拖到这里,最多可选\ {0}\ 张=画像をここにドラッグしてください、最大 \ {0} \ 枚可能
+或将文件拖到这里,最多可选\ {0}\ 个=ファイルをここにドラッグしてください、最大 \ {0} \ 個可能
+
+# =========== iconselect ===========
+
+图标选择=アイコン選択
+提示:双击选择图标。=ツールチープ: ダブルクリックでアイオンの選択ができます.
+
+# =========== ueditor ===========
+
+目录标题=ディレクトリタイトル
+暂无大纲标题=アウトラインのタイトルはまだありません
+
+# =========== validcode ===========
+
+验证码=検証コード
+请填写验证码=検証コードを入力してください
+验证码不正确.=検証コードが正しくありません
+看不清,点击图片刷新=はっきり見えない場合、画像更新をクリックしてリフレッシュできます.
+
diff --git a/modules/core/src/main/resources/i18n/core/sys/i18n_ja_JP.properties b/modules/core/src/main/resources/i18n/core/sys/i18n_ja_JP.properties
new file mode 100644
index 00000000..a55ea1c5
--- /dev/null
+++ b/modules/core/src/main/resources/i18n/core/sys/i18n_ja_JP.properties
@@ -0,0 +1,254 @@
+# =========== 通用字典 ===========
+
+是=はい
+否=いいえ
+男=男
+女=女
+正常=正常
+删除=削除
+停用=無効
+冻结=凍結
+待审=診察
+驳回=却下
+草稿=草稿
+
+# =========== 通用字段 ===========
+
+状态=状態
+备注信息=備考
+创建者=作成者
+创建时间=作成日時
+更新者=更新者
+更新时间=更新日時
+排序号=ソート
+
+# =========== 功能标题 ===========
+
+系统管理=システム管理
+组织管理=組織管理
+用户管理=ユーザー管理
+机构管理=機構管理
+公司管理=会社管理
+岗位管理=職位管理
+
+用户选择=ユーザー選択
+机构选择=事務所選択
+公司选择=会社選択
+区域选择=区域選択
+日期选择=日付選択
+日期时间=日時
+
+# =========== 登录页 ===========
+
+登录=ログイン
+
+请填写登录账号.=ログインIDを入力してください.
+登录账号=ログインアカウント
+
+登录密码,鼠标按下显示密码=押下するとパスワードを表示します.
+请填写登录密码.=パスワードを入力してください.
+登录密码=パスワード
+
+公共场所慎用,下次不需要再填写帐号=次回からログインIDの入力が不要にします.
+记住账号=ログインID記憶
+公共场所慎用,下次不需要再填写帐号和密码=次回からパスワードの入力が不要にします.
+自动登录=パスワード記憶
+
+登录验证成功,正在进入...=ログイン中、少々お待ちください...
+正在验证登录,请稍候...=登録を行っています...
+立即登录=ログイン
+
+注册账号=アカウント作成
+忘记密码=パスワードを忘れた
+
+# =========== 主框架页 ===========
+
+仪表盘=計器盤
+全屏=最大化
+切换主题=テーマ切替
+
+个人中心=マイページ
+修改密码=パスワード変更
+退出登录=ログアウト
+系统切换=システム切替
+当前租户=当面テナント
+租户切换=テナント切り替え
+在线人员=オンラインスタッフ
+
+在线=オンライン
+注销=ログアウト
+
+# =========== 消息提醒 ===========
+
+消息=メッセージ
+你有=見読
+条消息=件メッセージ
+查看全部消息=全部見る
+查看消息=開く
+系统消息=システムメッセージ
+您有\ {0}\ 条新消息,由于消息太多,这里为您合并,请点击查看按钮看详情。=見読メッセージ {0} 件, 省略で表示しているため, クリックで一覧を見る.
+
+# =========== 个人中心 ===========
+
+修改密保=セキュリティ変更
+个人信息=個人情報
+
+修改头像=アバター変更
+
+个性签名=署名
+上次登录=前回ログイン
+时间=時間
+首次登录=初めてログイン
+
+旧密码=旧パスワード
+新密码=新パスワード
+确认新密码=新パスワード確認
+
+您还未设置过密保问题,您可以根据登录密码设置新的密保问题及答案。=セキュリティ合言葉が設定されていません。ログイン後新しいセキュリティ合言葉を設定してください。.
+旧的密保问题及答案=古いセキュリティ合言葉
+旧密保问题=古いセキュリティ合言葉の質問
+旧密保问题答案=古いセキュリティ合言葉の答え
+新的密保问题及答案=新しいセキュリティ合言葉
+新密保问题=新しいセキュリティ合言葉の質問
+新密保问题答案=新しいセキュリティ合言葉の答え
+
+# =========== 用户管理 ===========
+
+组织机构=機構
+新增用户=ユーザー作成
+编辑用户=ユーザー編集
+导出=導入
+导入=を導く
+
+停用用户=ユーザー無効
+确认要停用该用户吗?=このユーザーを無効にしてもよろしいですか?
+启用用户=ユーザー有効
+确认要启用该用户吗?=このユーザーを有効にしてもよろしいですか?
+删除用户=ユーザー削除
+确认要删除该用户吗?=このユーザーを削除してもよろしいですか?
+用户分配角色=ユーザーロール設定
+分配角色=ロール設定
+用户分配数据权限=ユーザーデータ権限設定
+数据权限=データ権限
+用户密码重置=パスワードリセット
+确认要将该用户密码重置到初始状态吗?=ユーザーのログインパスワードをリセットします。よろしいですか?
+重置密码=パスワードリセット
+
+保存用户失败,登录账号''{0}''已存在=ユーザーの保存に失敗しました。ログインアカウント '' {0} ''は既に存在します
+保存用户''{0}''成功=ユーザー ''{0}'' 保存成功
+停用用户失败,不允许停用当前用户=ユーザー無効に更新する処理失敗。このユーザーは無効にすることできません
+停用用户''{0}''成功=ユーザー ''{0}'' 無効設定成功
+启用用户''{0}''成功=ユーザー ''{0}'' 有効設定成功
+重置用户''{0}''密码成功=ユーザー ''{0}'' のパスワードを初期化成功しました
+删除用户失败,不允许删除当前用户=ユーザー削除失敗. このユーザーを削除することができません
+删除用户''{0}''成功=ユーザー ''{0}'' 削除成功
+用户分配数据权限成功=ユーザーデータ権限設定成功
+
+账号=アカウント
+昵称=ニックネーム
+邮箱=メール
+手机=携帯
+电话=電話
+姓名=氏名
+机构=機構
+公司=会社
+岗位=職位
+
+归属机构=所属機構
+归属公司=所属会社
+登录账号=アカウント
+登录账号已存在=ログインアカウントがすでに存在します
+用户昵称=ニックネーム
+电子邮箱=メール
+手机号码=携帯電話
+办公电话=会社電話
+权重(排序)=レベル(ソート)
+权重越大排名越靠前,请填写数字。=重要度が大きいほど前に表示します。数字を入力してください.
+
+员工编号=社員コード
+员工姓名=氏名
+所在岗位=所属職位
+英文名=英語氏名
+
+附属机构=付属機構
+附属岗位=付属職位
+
+角色名称=ロール名称
+角色编码=ロールコード
+
+# =========== 機構管理 ===========
+
+新增机构=機構追加
+编辑机构=機構編集
+
+停用机构=機構無効にする
+确认要停用该机构吗?=機構無効にします、よろしいですか?
+启用机构=機構有効にする
+确认要启用该机构吗?=機構有効にします、よろしいですか?
+删除机构=機構削除
+确认要删除该机构及所有子机构吗?=機構及び子機構を削除します、よろしいですか?
+新增下级机构=子機構追加
+
+保存机构''{0}''成功=機構 ''{0}'' 保存成功
+该机构包含未停用的子机构!=有効な子機構が含まれています!
+停用机构''{0}''成功=機構 ''{0}'' 無効にする処理成功
+启用机构''{0}''成功=機構 ''{0}'' 有効にする処理成功
+删除机构''{0}''成功=機構 ''{0}'' 削除成功
+
+上级机构=親機構
+机构名称=機構名称
+机构代码=機構コード
+机构全称=機構フルネーム
+机构类型=機構タイプ
+负责人=責任者
+联系地址=住所
+邮政编码=郵便番号
+
+# =========== 公司管理 ===========
+
+新增公司=会社追加
+编辑公司=会社編集
+
+停用公司=会社無効にする
+确认要停用该公司吗?=会社無効にします、よろしいですか?
+启用公司=会社有効にする
+确认要启用该公司吗?=会社有効にします、よろしいですか?
+删除公司=会社削除
+确认要删除该公司及所有子公司吗?=会社及び子会社を削除します、よろしいですか?
+新增下级公司=子会社追加
+
+保存公司''{0}''成功=会社 ''{0}'' 保存成功
+该公司包含未停用的子公司!=有効な会社が含まれています!
+停用公司''{0}''成功=会社 ''{0}'' 無効設定成功
+启用公司''{0}''成功=会社 ''{0}'' 有効設定成功
+删除公司''{0}''成功=会社 ''{0}'' 削除成功
+
+上级公司=親会社
+公司名称=会社名称
+公司编码=会社コード
+公司全称=会社フルネーム
+归属区域=エリア
+包含机构=機構
+
+# =========== 岗位管理 ===========
+
+新增岗位=職位追加
+编辑岗位=職位編集
+
+停用岗位=職位無効にする
+确认要停用该岗位吗?=職位無効にします、よろしいですか?
+启用岗位=職位有効にする
+确认要启用该岗位吗?=職位有効にします、よろしいですか?
+删除岗位=職位削除
+确认要删除该岗位吗?=職位を削除します、よろしいですか?
+
+保存岗位失败,岗位名称''{0}''已存在=職位保存失敗。職位名称 ''{0}'' 既に存在します
+保存岗位''{0}''成功=職位 ''{0}'' 保存成功
+停用岗位''{0}''成功=職位 ''{0}'' 無効設定成功
+启用岗位''{0}''成功=職位 ''{0}'' 有効設定成功
+删除岗位''{0}''成功=職位 ''{0}'' 削除成功
+
+岗位名称=職位名称
+岗位名称已存在=職位名称が既に存在します
+岗位编码=職位コード
+岗位分类=職位分類
diff --git a/modules/core/src/main/resources/static/common/i18n/jeesite_en.js b/modules/core/src/main/resources/static/common/i18n/jeesite_en.js
index 14aa08e4..9ba1962b 100644
--- a/modules/core/src/main/resources/static/common/i18n/jeesite_en.js
+++ b/modules/core/src/main/resources/static/common/i18n/jeesite_en.js
@@ -6,13 +6,26 @@
* @version 2017-12-24
*/
(function($) {
-window.js = window.js || {};
-js.i18n = $.extend({}, js.i18n, {
- 'tabpanel.newTabPage':'New Page',
- 'loading.message':'Loading ...',
- 'loading.submitMessage':'Submission ...',
- 'showMessage.error':'failure,error',
- 'showMessage.success':'success,completion',
- 'showMessage.warning':'no'
-});
+ window.js = window.js || {};
+ js.i18n = $.extend({}, js.i18n, {
+ 'tabpanel.newTabPage':'New Page',
+ 'loading.message':'Loading ...',
+ 'loading.submitMessage':'Submission ...',
+ 'showMessage.error':'failure,error',
+ 'showMessage.success':'success,completion',
+ 'showMessage.warning':'no'
+ });
+ // ============ layer ============
+ window.layer = window.layer || {};
+ layer.i18n = $.extend({}, layer.i18n, {
+ btnOk: 'Ok',
+ btnCancel: 'Cancle',
+ title: 'Information',
+ promptTipA: 'Enter ',
+ promptTipB: 'character at most.',
+ noPicture: 'No picture',
+ photoError: 'Current image address error.
Next slide?',
+ photoNextPage: 'The next',
+ photoClose: 'Close'
+ });
})(jQuery);
diff --git a/modules/core/src/main/resources/static/common/i18n/jeesite_ja_JP.js b/modules/core/src/main/resources/static/common/i18n/jeesite_ja_JP.js
new file mode 100644
index 00000000..cdc8f3cf
--- /dev/null
+++ b/modules/core/src/main/resources/static/common/i18n/jeesite_ja_JP.js
@@ -0,0 +1,31 @@
+/*!
+ * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
+ *
+ * 国际化文件
+ * @author ThinkGem
+ * @version 2017-12-24
+ */
+(function($) {
+ window.js = window.js || {};
+ js.i18n = $.extend({}, js.i18n, {
+ 'tabpanel.newTabPage':'新タブ',
+ 'loading.message':'ローディング...お待ちください...',
+ 'loading.submitMessage':'送信中...お待ちください...',
+ 'showMessage.error':'失敗,エラー,未完了',
+ 'showMessage.success':'成功,完了',
+ 'showMessage.warning':'不可,不許可,必須,既に存在,不要,不正確'
+ });
+ // ============ layer ============
+ window.layer = window.layer || {};
+ layer.i18n = $.extend({}, layer.i18n, {
+ btnOk: '確定',
+ btnCancel: 'キャンセル',
+ title: 'メッセージ',
+ promptTipA: '最大入力',
+ promptTipB: '個文字',
+ noPicture: '画像が存在しません',
+ photoError: 'この画像が表示できません
次の画像へ遷移しますか?',
+ photoNextPage: '次へ',
+ photoClose: '閉じる'
+ });
+})(jQuery);
diff --git a/modules/core/src/main/resources/static/common/i18n/jeesite_zh_CN.js b/modules/core/src/main/resources/static/common/i18n/jeesite_zh_CN.js
index 7146c6f4..bb3b9ca4 100644
--- a/modules/core/src/main/resources/static/common/i18n/jeesite_zh_CN.js
+++ b/modules/core/src/main/resources/static/common/i18n/jeesite_zh_CN.js
@@ -6,13 +6,13 @@
* @version 2017-12-24
*/
(function($) {
-window.js = window.js || {};
-js.i18n = $.extend({}, js.i18n, {
- 'tabpanel.newTabPage':'新页签',
- 'loading.message':'正在加载,请稍后...',
- 'loading.submitMessage':'正在提交,请稍后...',
- 'showMessage.error':'失败,错误,未完成',
- 'showMessage.success':'成功,完成',
- 'showMessage.warning':'不能,不允许,必须,已存在,不需要,不正确'
-});
+ window.js = window.js || {};
+ js.i18n = $.extend({}, js.i18n, {
+ 'tabpanel.newTabPage':'新页签',
+ 'loading.message':'正在加载,请稍后...',
+ 'loading.submitMessage':'正在提交,请稍后...',
+ 'showMessage.error':'失败,错误,未完成',
+ 'showMessage.success':'成功,完成',
+ 'showMessage.warning':'不能,不允许,必须,已存在,不需要,不正确'
+ });
})(jQuery);
diff --git a/modules/core/src/main/resources/static/jqGrid/4.7/js/i18n/ja_JP.js b/modules/core/src/main/resources/static/jqGrid/4.7/js/i18n/ja_JP.js
new file mode 100644
index 00000000..15165f55
--- /dev/null
+++ b/modules/core/src/main/resources/static/jqGrid/4.7/js/i18n/ja_JP.js
@@ -0,0 +1,137 @@
+;(function($){
+/**
+ * jqGrid Japanese Translation
+ * OKADA Yoshitada okada.dev@sth.jp
+ * http://trirand.com/blog/
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+**/
+$.jgrid = $.jgrid || {};
+$.extend($.jgrid,{
+ extend : {
+ btnSearch: '検索',
+ btnHideSearch: '隠匿',
+ expandTooMany: '今回は“{0}”のノードを展開しなければならない。展開ノードが多すぎるため、キャンセルが実行される。',
+ pageTitle: '数字をクリックすると、ページ番号とページ数を入力して、リターンカーを押して有効になります。!',
+ pageLabelA: '現在の',
+ pageLabelB: 'ページは,各ページ',
+ pageLabelC: '枚,全部 で{0} つ',
+ },
+ defaults : {
+ recordtext: "View {0} - {1} of {2}",
+ emptyrecords: "No records to view",
+ loadtext: "\u8aad\u307f\u8fbc\u307f\u4e2d...",
+ pgtext : "Page {0} of {1}"
+ },
+ search : {
+ caption: "\u691c\u7d22...",
+ Find: "\u691c\u7d22",
+ Reset: "\u30ea\u30bb\u30c3\u30c8",
+ odata : ['equal', 'not equal', 'less', 'less or equal','greater','greater or equal', 'begins with','does not begin with','is in','is not in','ends with','does not end with','contains','does not contain'],
+ groupOps: [ { op: "AND", text: "all" }, { op: "OR", text: "any" } ],
+ matchText: " match",
+ rulesText: " rules"
+ },
+ edit : {
+ addCaption: "\u30ec\u30b3\u30fc\u30c9\u8ffd\u52a0",
+ editCaption: "\u30ec\u30b3\u30fc\u30c9\u7de8\u96c6",
+ bSubmit: "\u9001\u4fe1",
+ bCancel: "\u30ad\u30e3\u30f3\u30bb\u30eb",
+ bClose: "\u9589\u3058\u308b",
+ saveData: "Data has been changed! Save changes?",
+ bYes : "Yes",
+ bNo : "No",
+ bExit : "Cancel",
+ msg: {
+ required:"\u3053\u306e\u9805\u76ee\u306f\u5fc5\u9808\u3067\u3059\u3002",
+ number:"\u6b63\u3057\u3044\u6570\u5024\u3092\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044\u3002",
+ minValue:"\u6b21\u306e\u5024\u4ee5\u4e0a\u3067\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044\u3002",
+ maxValue:"\u6b21\u306e\u5024\u4ee5\u4e0b\u3067\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044\u3002",
+ email: "e-mail\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002",
+ integer: "\u6b63\u3057\u3044\u6574\u6570\u5024\u3092\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044\u3002",
+ date: "\u6b63\u3057\u3044\u5024\u3092\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044\u3002",
+ url: "is not a valid URL. Prefix required ('http://' or 'https://')",
+ nodefined : " is not defined!",
+ novalue : " return value is required!",
+ customarray : "Custom function should return array!",
+ customfcheck : "Custom function should be present in case of custom checking!"
+ }
+ },
+ view : {
+ caption: "View Record",
+ bClose: "Close"
+ },
+ del : {
+ caption: "\u524a\u9664",
+ msg: "\u9078\u629e\u3057\u305f\u30ec\u30b3\u30fc\u30c9\u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f",
+ bSubmit: "\u524a\u9664",
+ bCancel: "\u30ad\u30e3\u30f3\u30bb\u30eb"
+ },
+ nav : {
+ edittext: " ",
+ edittitle: "\u9078\u629e\u3057\u305f\u884c\u3092\u7de8\u96c6",
+ addtext:" ",
+ addtitle: "\u884c\u3092\u65b0\u898f\u8ffd\u52a0",
+ deltext: " ",
+ deltitle: "\u9078\u629e\u3057\u305f\u884c\u3092\u524a\u9664",
+ searchtext: " ",
+ searchtitle: "\u30ec\u30b3\u30fc\u30c9\u691c\u7d22",
+ refreshtext: "",
+ refreshtitle: "\u30b0\u30ea\u30c3\u30c9\u3092\u30ea\u30ed\u30fc\u30c9",
+ alertcap: "\u8b66\u544a",
+ alerttext: "\u884c\u3092\u9078\u629e\u3057\u3066\u4e0b\u3055\u3044\u3002",
+ viewtext: "",
+ viewtitle: "View selected row"
+ },
+ col : {
+ caption: "\u5217\u3092\u8868\u793a\uff0f\u96a0\u3059",
+ bSubmit: "\u9001\u4fe1",
+ bCancel: "\u30ad\u30e3\u30f3\u30bb\u30eb"
+ },
+ errors : {
+ errcap : "\u30a8\u30e9\u30fc",
+ nourl : "URL\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002",
+ norecords: "\u51e6\u7406\u5bfe\u8c61\u306e\u30ec\u30b3\u30fc\u30c9\u304c\u3042\u308a\u307e\u305b\u3093\u3002",
+ model : "colNames\u306e\u9577\u3055\u304ccolModel\u3068\u4e00\u81f4\u3057\u307e\u305b\u3093\u3002"
+ },
+ formatter : {
+ integer : {thousandsSeparator: " ", defaultValue: '0'},
+ number : {decimalSeparator:".", thousandsSeparator: " ", decimalPlaces: 2, defaultValue: '0.00'},
+ currency : {decimalSeparator:".", thousandsSeparator: " ", decimalPlaces: 2, prefix: "", suffix:"", defaultValue: '0.00'},
+ date : {
+ dayNames: [
+ "\u65e5", "\u6708", "\u706b", "\u6c34", "\u6728", "\u91d1", "\u571f",
+ "\u65e5", "\u6708", "\u706b", "\u6c34", "\u6728", "\u91d1", "\u571f"
+ ],
+ monthNames: [
+ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",
+ "1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"
+ ],
+ AmPm : ["am","pm","AM","PM"],
+ S: "\u756a\u76ee",
+ srcformat: 'Y-m-d',
+ newformat: 'd/m/Y',
+ masks : {
+ ISO8601Long:"Y-m-d H:i:s",
+ ISO8601Short:"Y-m-d",
+ ShortDate: "n/j/Y",
+ LongDate: "l, F d, Y",
+ FullDateTime: "l, F d, Y g:i:s A",
+ MonthDay: "F d",
+ ShortTime: "g:i A",
+ LongTime: "g:i:s A",
+ SortableDateTime: "Y-m-d\\TH:i:s",
+ UniversalSortableDateTime: "Y-m-d H:i:sO",
+ YearMonth: "F, Y"
+ },
+ reformatAfterEdit : false
+ },
+ baseLinkUrl: '',
+ showAction: '',
+ target: '',
+ checkbox : {disabled:true},
+ idName : 'id'
+ }
+});
+})(jQuery);
diff --git a/modules/core/src/main/resources/static/jquery-plugins/jquery.strength_i18n.js b/modules/core/src/main/resources/static/jquery-plugins/jquery.strength_i18n.js
new file mode 100644
index 00000000..9ae61aeb
--- /dev/null
+++ b/modules/core/src/main/resources/static/jquery-plugins/jquery.strength_i18n.js
@@ -0,0 +1,26 @@
+(function($) {
+
+ $.fn.strength = $.fn.strength || {};
+ if (window.lang == 'en'){
+ $.extend(true, $.fn.strength.defaults, {
+ strengthTipText: 'Password no less than 8 bits in length, and included, upper case letters, lower case letters, Numbers and symbols.',
+ strengthButtonText: 'Click to display the password.',
+ strengthButtonTextToggle: 'Click the hidden password.',
+ veryweakText: 'Password is too weak!',
+ weakText: 'Password is weak!',
+ mediumText: 'Password is safer!',
+ strongText: 'Password is very strong and safe!'
+ });
+ } else if (window.lang == 'ja_JP'){
+ $.extend(true, $.fn.strength.defaults, {
+ strengthTipText: 'パスワードは长さが8ビット以内で、その中には、上のケース、下のケース、数字、記号があります。',
+ strengthButtonText: 'クリックしてパスワードを表示します。',
+ strengthButtonTextToggle: '隠れパスワードをクリックします。',
+ veryweakText: 'パスワードが弱すぎる!',
+ weakText: '体の弱いパスワードは',
+ mediumText: 'パスワードは!平和な',
+ strongText: 'パスワードは丈夫で安全です!'
+ });
+ }
+
+})(jQuery);
diff --git a/modules/core/src/main/resources/static/jquery-timeago/i18n/jquery.timeago.en.js b/modules/core/src/main/resources/static/jquery-timeago/i18n/jquery.timeago.en.js
new file mode 100644
index 00000000..8ca50aff
--- /dev/null
+++ b/modules/core/src/main/resources/static/jquery-timeago/i18n/jquery.timeago.en.js
@@ -0,0 +1,30 @@
+(function (factory) {
+ if (typeof define === 'function' && define.amd) {
+ define(['jquery'], factory);
+ } else if (typeof module === 'object' && typeof module.exports === 'object') {
+ factory(require('jquery'));
+ } else {
+ factory(jQuery);
+ }
+}(function (jQuery) {
+ // English (Template)
+ jQuery.timeago.settings.strings = {
+ prefixAgo: null,
+ prefixFromNow: null,
+ suffixAgo: "ago",
+ suffixFromNow: "from now",
+ seconds: "less than a minute",
+ minute: "about a minute",
+ minutes: "%d minutes",
+ hour: "about an hour",
+ hours: "about %d hours",
+ day: "a day",
+ days: "%d days",
+ month: "about a month",
+ months: "%d months",
+ year: "about a year",
+ years: "%d years",
+ wordSeparator: " ",
+ numbers: []
+ };
+}));
diff --git a/modules/core/src/main/resources/static/jquery-timeago/i18n/jquery.timeago.ja_JP.js b/modules/core/src/main/resources/static/jquery-timeago/i18n/jquery.timeago.ja_JP.js
new file mode 100644
index 00000000..ddb7b029
--- /dev/null
+++ b/modules/core/src/main/resources/static/jquery-timeago/i18n/jquery.timeago.ja_JP.js
@@ -0,0 +1,29 @@
+(function (factory) {
+ if (typeof define === 'function' && define.amd) {
+ define(['jquery'], factory);
+ } else if (typeof module === 'object' && typeof module.exports === 'object') {
+ factory(require('jquery'));
+ } else {
+ factory(jQuery);
+ }
+}(function (jQuery) {
+ // Japanese
+ jQuery.timeago.settings.strings = {
+ prefixAgo: "",
+ prefixFromNow: "今から",
+ suffixAgo: "前",
+ suffixFromNow: "後",
+ seconds: "1 分未満",
+ minute: "約 1 分",
+ minutes: "%d 分",
+ hour: "約 1 時間",
+ hours: "約 %d 時間",
+ day: "約 1 日",
+ days: "約 %d 日",
+ month: "約 1 ヶ月",
+ months: "約 %d ヶ月",
+ year: "約 1 年",
+ years: "約 %d 年",
+ wordSeparator: ""
+ };
+}));
\ No newline at end of file
diff --git a/modules/core/src/main/resources/static/jquery-timeago/i18n/jquery.timeago.zh_CN.js b/modules/core/src/main/resources/static/jquery-timeago/i18n/jquery.timeago.zh_CN.js
new file mode 100644
index 00000000..c21a2874
--- /dev/null
+++ b/modules/core/src/main/resources/static/jquery-timeago/i18n/jquery.timeago.zh_CN.js
@@ -0,0 +1,31 @@
+(function (factory) {
+ if (typeof define === 'function' && define.amd) {
+ define(['jquery'], factory);
+ } else if (typeof module === 'object' && typeof module.exports === 'object') {
+ factory(require('jquery'));
+ } else {
+ factory(jQuery);
+ }
+}(function (jQuery) {
+ // Simplified Chinese
+ jQuery.timeago.settings.strings = {
+ prefixAgo: null,
+ prefixFromNow: null,
+ suffixAgo: "之前",
+ suffixFromNow: "之后",
+ seconds: "不到1分钟",
+ minute: "大约1分钟",
+ minutes: "%d分钟",
+ hour: "大约1小时",
+ hours: "大约%d小时",
+ day: "1天",
+ days: "%d天",
+ month: "大约1个月",
+ months: "%d月",
+ year: "大约1年",
+ years: "%d年",
+ numbers: [],
+ wordSeparator: ""
+ };
+}));
+
diff --git a/modules/core/src/main/resources/static/jquery-timeago/i18n/jquery.timeago.zh_TW.js b/modules/core/src/main/resources/static/jquery-timeago/i18n/jquery.timeago.zh_TW.js
new file mode 100644
index 00000000..15f56269
--- /dev/null
+++ b/modules/core/src/main/resources/static/jquery-timeago/i18n/jquery.timeago.zh_TW.js
@@ -0,0 +1,30 @@
+(function (factory) {
+ if (typeof define === 'function' && define.amd) {
+ define(['jquery'], factory);
+ } else if (typeof module === 'object' && typeof module.exports === 'object') {
+ factory(require('jquery'));
+ } else {
+ factory(jQuery);
+ }
+}(function (jQuery) {
+ // Traditional Chinese, zh-tw
+ jQuery.timeago.settings.strings = {
+ prefixAgo: null,
+ prefixFromNow: null,
+ suffixAgo: "之前",
+ suffixFromNow: "之後",
+ seconds: "不到1分鐘",
+ minute: "大約1分鐘",
+ minutes: "%d分鐘",
+ hour: "大約1小時",
+ hours: "%d小時",
+ day: "大約1天",
+ days: "%d天",
+ month: "大約1個月",
+ months: "%d個月",
+ year: "大約1年",
+ years: "%d年",
+ numbers: [],
+ wordSeparator: ""
+ };
+}));
diff --git a/modules/core/src/main/resources/static/jquery-timeago/jquery.timeago.js b/modules/core/src/main/resources/static/jquery-timeago/jquery.timeago.js
new file mode 100644
index 00000000..5fcfa1bb
--- /dev/null
+++ b/modules/core/src/main/resources/static/jquery-timeago/jquery.timeago.js
@@ -0,0 +1,232 @@
+/**
+ * Timeago is a jQuery plugin that makes it easy to support automatically
+ * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago").
+ *
+ * @name timeago
+ * @version 1.6.3
+ * @requires jQuery v1.2.3+
+ * @author Ryan McGeary
+ * @license MIT License - http://www.opensource.org/licenses/mit-license.php
+ *
+ * For usage and examples, visit:
+ * http://timeago.yarp.com/
+ *
+ * Copyright (c) 2008-2017, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org)
+ */
+
+(function (factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['jquery'], factory);
+ } else if (typeof module === 'object' && typeof module.exports === 'object') {
+ factory(require('jquery'));
+ } else {
+ // Browser globals
+ factory(jQuery);
+ }
+}(function ($) {
+ $.timeago = function(timestamp) {
+ if (timestamp instanceof Date) {
+ return inWords(timestamp);
+ } else if (typeof timestamp === "string") {
+ return inWords($.timeago.parse(timestamp));
+ } else if (typeof timestamp === "number") {
+ return inWords(new Date(timestamp));
+ } else {
+ return inWords($.timeago.datetime(timestamp));
+ }
+ };
+ var $t = $.timeago;
+
+ $.extend($.timeago, {
+ settings: {
+ refreshMillis: 60000,
+ allowPast: true,
+ allowFuture: false,
+ localeTitle: false,
+ cutoff: 0,
+ autoDispose: true,
+ strings: {
+ prefixAgo: null,
+ prefixFromNow: null,
+ suffixAgo: "ago",
+ suffixFromNow: "from now",
+ inPast: 'any moment now',
+ seconds: "less than a minute",
+ minute: "about a minute",
+ minutes: "%d minutes",
+ hour: "about an hour",
+ hours: "about %d hours",
+ day: "a day",
+ days: "%d days",
+ month: "about a month",
+ months: "%d months",
+ year: "about a year",
+ years: "%d years",
+ wordSeparator: " ",
+ numbers: []
+ }
+ },
+
+ inWords: function(distanceMillis) {
+ if (!this.settings.allowPast && ! this.settings.allowFuture) {
+ throw 'timeago allowPast and allowFuture settings can not both be set to false.';
+ }
+
+ var $l = this.settings.strings;
+ var prefix = $l.prefixAgo;
+ var suffix = $l.suffixAgo;
+ if (this.settings.allowFuture) {
+ if (distanceMillis < 0) {
+ prefix = $l.prefixFromNow;
+ suffix = $l.suffixFromNow;
+ }
+ }
+
+ if (!this.settings.allowPast && distanceMillis >= 0) {
+ return this.settings.strings.inPast;
+ }
+
+ var seconds = Math.abs(distanceMillis) / 1000;
+ var minutes = seconds / 60;
+ var hours = minutes / 60;
+ var days = hours / 24;
+ var years = days / 365;
+
+ function substitute(stringOrFunction, number) {
+ var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
+ var value = ($l.numbers && $l.numbers[number]) || number;
+ return string.replace(/%d/i, value);
+ }
+
+ var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
+ seconds < 90 && substitute($l.minute, 1) ||
+ minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
+ minutes < 90 && substitute($l.hour, 1) ||
+ hours < 24 && substitute($l.hours, Math.round(hours)) ||
+ hours < 42 && substitute($l.day, 1) ||
+ days < 30 && substitute($l.days, Math.round(days)) ||
+ days < 45 && substitute($l.month, 1) ||
+ days < 365 && substitute($l.months, Math.round(days / 30)) ||
+ years < 1.5 && substitute($l.year, 1) ||
+ substitute($l.years, Math.round(years));
+
+ var separator = $l.wordSeparator || "";
+ if ($l.wordSeparator === undefined) { separator = " "; }
+ return $.trim([prefix, words, suffix].join(separator));
+ },
+
+ parse: function(iso8601) {
+ var s = $.trim(iso8601);
+ s = s.replace(/\.\d+/,""); // remove milliseconds
+ s = s.replace(/-/,"/").replace(/-/,"/");
+ s = s.replace(/T/," ").replace(/Z/," UTC");
+ s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400
+ s = s.replace(/([\+\-]\d\d)$/," $100"); // +09 -> +0900
+ return new Date(s);
+ },
+ datetime: function(elem) {
+ var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title");
+ return $t.parse(iso8601);
+ },
+ isTime: function(elem) {
+ // jQuery's `is()` doesn't play well with HTML5 in IE
+ return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time");
+ }
+ });
+
+ // functions that can be called via $(el).timeago('action')
+ // init is default when no action is given
+ // functions are called with context of a single element
+ var functions = {
+ init: function() {
+ functions.dispose.call(this);
+ var refresh_el = $.proxy(refresh, this);
+ refresh_el();
+ var $s = $t.settings;
+ if ($s.refreshMillis > 0) {
+ this._timeagoInterval = setInterval(refresh_el, $s.refreshMillis);
+ }
+ },
+ update: function(timestamp) {
+ var date = (timestamp instanceof Date) ? timestamp : $t.parse(timestamp);
+ $(this).data('timeago', { datetime: date });
+ if ($t.settings.localeTitle) {
+ $(this).attr("title", date.toLocaleString());
+ }
+ refresh.apply(this);
+ },
+ updateFromDOM: function() {
+ $(this).data('timeago', { datetime: $t.parse( $t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title") ) });
+ refresh.apply(this);
+ },
+ dispose: function () {
+ if (this._timeagoInterval) {
+ window.clearInterval(this._timeagoInterval);
+ this._timeagoInterval = null;
+ }
+ }
+ };
+
+ $.fn.timeago = function(action, options) {
+ var fn = action ? functions[action] : functions.init;
+ if (!fn) {
+ throw new Error("Unknown function name '"+ action +"' for timeago");
+ }
+ // each over objects here and call the requested function
+ this.each(function() {
+ fn.call(this, options);
+ });
+ return this;
+ };
+
+ function refresh() {
+ var $s = $t.settings;
+
+ //check if it's still visible
+ if ($s.autoDispose && !$.contains(document.documentElement,this)) {
+ //stop if it has been removed
+ $(this).timeago("dispose");
+ return this;
+ }
+
+ var data = prepareData(this);
+
+ if (!isNaN(data.datetime)) {
+ if ( $s.cutoff === 0 || Math.abs(distance(data.datetime)) < $s.cutoff) {
+ $(this).text(inWords(data.datetime));
+ } else {
+ if ($(this).attr('title').length > 0) {
+ $(this).text($(this).attr('title'));
+ }
+ }
+ }
+ return this;
+ }
+
+ function prepareData(element) {
+ element = $(element);
+ if (!element.data("timeago")) {
+ element.data("timeago", { datetime: $t.datetime(element) });
+ var text = $.trim(element.text());
+ if ($t.settings.localeTitle) {
+ element.attr("title", element.data('timeago').datetime.toLocaleString());
+ } else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) {
+ element.attr("title", text);
+ }
+ }
+ return element.data("timeago");
+ }
+
+ function inWords(date) {
+ return $t.inWords(distance(date));
+ }
+
+ function distance(date) {
+ return (new Date().getTime() - date.getTime());
+ }
+
+ // fix for IE6 suckage
+ document.createElement("abbr");
+ document.createElement("time");
+}));
\ No newline at end of file
diff --git a/modules/core/src/main/resources/static/jquery-validation/1.16/localization/messages_en.js b/modules/core/src/main/resources/static/jquery-validation/1.16/localization/messages_en.js
new file mode 100644
index 00000000..df9d11e8
--- /dev/null
+++ b/modules/core/src/main/resources/static/jquery-validation/1.16/localization/messages_en.js
@@ -0,0 +1,33 @@
+(function ($) {
+ $.extend($.validator.messages, {
+ required: "This field is required.",
+ remote: "Please fix this field.",
+ email: "Please enter a valid email address.",
+ url: "Please enter a valid URL.",
+ date: "Please enter a valid date.",
+ dateISO: "Please enter a valid date (ISO).",
+ number: "Please enter a valid number.",
+ digits: "Please enter only digits.",
+ equalTo: "Please enter the same value again.",
+ maxlength: $.validator.format( "Please enter no more than {0} characters." ),
+ minlength: $.validator.format( "Please enter at least {0} characters." ),
+ rangelength: $.validator.format( "Please enter a value between {0} and {1} characters long." ),
+ range: $.validator.format( "Please enter a value between {0} and {1}." ),
+ max: $.validator.format( "Please enter a value less than or equal to {0}." ),
+ min: $.validator.format( "Please enter a value greater than or equal to {0}." ),
+ errorMessage: "The information you filled in is wrong.",
+ userName: "Chinese characters, English letters, Numbers and underscores.",
+ realName: "Can only be 2-30 Chinese characters",
+ abc: "Please enter alphanumeric or underline",
+ noEqualTo: "Please enter different values again",
+ mobile: "Please fill in your mobile number correctly, only 13,14,15,16,17,18,19",
+ simplePhone: "Please fill in your phone number correctly, and the fixed number is the area code (3-4 digits),",
+ phone: "Please fill in your phone number correctly, the number (3-4 digits), and the phone number is 13,14,15,16,17,18,19.",
+ zipCode: "Please fill in your zipCode correctly",
+ integer: "Please enter an integer",
+ ipv4: "Please enter a valid IP v4 address",
+ ipv6: "Please enter a valid IP v6 address",
+ qq: "Please fill in your qq number correctly",
+ idcard: "Please enter the correct id number (15-18)"
+ });
+}(jQuery));
diff --git a/modules/core/src/main/resources/static/jquery-validation/1.16/localization/messages_ja_JP.js b/modules/core/src/main/resources/static/jquery-validation/1.16/localization/messages_ja_JP.js
new file mode 100644
index 00000000..7fc0c1f3
--- /dev/null
+++ b/modules/core/src/main/resources/static/jquery-validation/1.16/localization/messages_ja_JP.js
@@ -0,0 +1,33 @@
+(function ($) {
+ $.extend( $.validator.messages, {
+ required: "このフィールドは必須です。",
+ remote: "このフィールドを修正してください。",
+ email: "有効なEメールアドレスを入力してください。",
+ url: "有効なURLを入力してください。",
+ date: "有効な日付を入力してください。",
+ dateISO: "有効な日付(ISO)を入力してください。",
+ number: "有効な数字を入力してください。",
+ digits: "数字のみを入力してください。",
+ equalTo: "同じ値をもう一度入力してください。",
+ maxlength: $.validator.format( "{0} 文字以内で入力してください。" ),
+ minlength: $.validator.format( "{0} 文字以上で入力してください。" ),
+ rangelength: $.validator.format( "{0} 文字から {1} 文字までの値を入力してください。" ),
+ range: $.validator.format( "{0} から {1} までの値を入力してください。" ),
+ max: $.validator.format( "{0} 以下の値を入力してください。" ),
+ min: $.validator.format( "{0} 以上の値を入力してください。" ),
+ errorMessage: "ご記入頂いた情報に誤りがございましたので、提示に基づき修正をお願いします。",
+ userName: "ご記入頂いた情報に誤りがございましたので、提示に基づき修正をお願いします。登录アカウントは中文字、英字、数字、下線のみです",
+ realName: "名前は2 ~ 30字程度",
+ abc: "数字または下線を入力してください",
+ noEqualTo: "再度異なる値を入力して下さい",
+ mobile: "お电话番号を正确にお书きください。ただ13、14、15、16、17、18、19番です",
+ simplePhone: "お电话番号を正しくお书きください。固定番号(3-4位)番号(7-9位)",
+ phone: "お电话番号を正确にお书きください。固定番号(3-4位)番号(7-9位)、携帯电话は13、14、15、16、17、18、19番です",
+ zipCode: "郵便番号を正しく入力してください",
+ integer: "整数を入力してください",
+ ipv4: "有効なIP v4アドレスを入力してください",
+ ipv6: "有効なIP v6アドレスを入力してください",
+ qq: "あなたのQQ番号を正しく入力してください",
+ idcard: "正しい住民登録番号(15 ~ 18位)を入力してください。"
+ });
+}(jQuery));
diff --git a/modules/core/src/main/resources/static/jquery-validation/1.16/localization/messages_zh_CN.js b/modules/core/src/main/resources/static/jquery-validation/1.16/localization/messages_zh_CN.js
new file mode 100644
index 00000000..c80bef5a
--- /dev/null
+++ b/modules/core/src/main/resources/static/jquery-validation/1.16/localization/messages_zh_CN.js
@@ -0,0 +1,33 @@
+(function ($) {
+ $.extend($.validator.messages, {
+ required: "必填信息",
+ remote: "请修正该信息",
+ email: "请输入正确格式的电子邮件",
+ url: "请输入合法的网址",
+ date: "请输入合法的日期",
+ dateISO: "请输入合法的日期 (YYYY-MM-DD).",
+ number: "请输入合法的数值",
+ digits: "请输入一个正整数",
+ equalTo: "请再次输入相同的值",
+ maxlength: $.validator.format("最多可以输入 {0} 个字符"),
+ minlength: $.validator.format("最少要输入 {0} 个字符"),
+ rangelength: $.validator.format("请输入长度在 {0} 到 {1} 之间的字符串"),
+ range: $.validator.format("请输入范围在 {0} 到 {1} 之间的数值"),
+ max: $.validator.format("请输入不大于 {0} 的数值"),
+ min: $.validator.format("请输入不小于 {0} 的数值"),
+ errorMessage: "您填写的信息有误,请根据提示修正。",
+ userName: "登录账号只能包括中文字、英文字母、数字和下划线",
+ realName: "姓名只能为2-30个汉字",
+ abc: "请输入字母数字或下划线",
+ noEqualTo: "请再次输入不同的值",
+ mobile: "请正确填写您的手机号码,只能是13,14,15,16,17,18,19号段",
+ simplePhone: "请正确填写您的电话号码,固话为区号(3-4位)号码(7-9位)",
+ phone: "请正确填写您的电话号码,固话为区号(3-4位)号码(7-9位),手机为13,14,15,16,17,18,19号段",
+ zipCode: "请正确填写您的邮政编码",
+ integer: "请输入一个整数",
+ ipv4: "请输入一个有效的 IP v4 地址",
+ ipv6: "请输入一个有效的 IP v6 地址",
+ qq: "请正确填写您的QQ号码",
+ idcard: "请输入正确的身份证号码(15-18位)"
+ });
+}(jQuery));
diff --git a/modules/core/src/main/resources/static/jquery-validation/1.16/localization/messages_zh_TW.js b/modules/core/src/main/resources/static/jquery-validation/1.16/localization/messages_zh_TW.js
new file mode 100644
index 00000000..14d08836
--- /dev/null
+++ b/modules/core/src/main/resources/static/jquery-validation/1.16/localization/messages_zh_TW.js
@@ -0,0 +1,33 @@
+(function ($) {
+ $.extend( $.validator.messages, {
+ required: "必須填寫",
+ remote: "請修正此欄位",
+ email: "請輸入有效的電子郵件",
+ url: "請輸入有效的網址",
+ date: "請輸入有效的日期",
+ dateISO: "請輸入有效的日期 (YYYY-MM-DD)",
+ number: "請輸入正確的數值",
+ digits: "只可輸入數字",
+ equalTo: "請重複輸入一次",
+ maxlength: $.validator.format( "最多 {0} 個字" ),
+ minlength: $.validator.format( "最少 {0} 個字" ),
+ rangelength: $.validator.format( "請輸入長度為 {0} 至 {1} 之間的字串" ),
+ range: $.validator.format( "請輸入 {0} 至 {1} 之間的數值" ),
+ max: $.validator.format( "請輸入不大於 {0} 的數值" ),
+ min: $.validator.format( "請輸入不小於 {0} 的數值" ),
+ errorMessage: "您填寫的信息有誤,請根據提示修正。",
+ userName: "登錄賬號只能包括中文字、英文字母、數字和下劃線",
+ realName: "姓名只能爲2-30個漢字",
+ abc: "請輸入字母數字或下劃線",
+ noEqualTo: "請再次輸入不同的值",
+ mobile: "請正確填寫您的手機號碼,只能是13,14,15,16,17,18,19號段",
+ simplePhone: "請正確填寫您的電話號碼,固話爲區號(3-4位)號碼(7-9位)",
+ phone: "請正確填寫您的電話號碼,固話爲區號(3-4位)號碼(7-9位),手機爲13,14,15,16,17,18,19號段",
+ zipCode: "請正確填寫您的郵政編碼",
+ integer: "請輸入一個整數",
+ ipv4: "請輸入一個有效的 IP v4 地址",
+ ipv6: "請輸入一個有效的 IP v6 地址",
+ qq: "請正確填寫您的QQ號碼",
+ idcard: "請輸入正確的身份證號碼(15-18位)"
+ });
+}(jQuery));
diff --git a/modules/core/src/main/resources/static/ueditor/1.4/lang/ja_JP/images/copy.png b/modules/core/src/main/resources/static/ueditor/1.4/lang/ja_JP/images/copy.png
new file mode 100644
index 00000000..b2536aac
Binary files /dev/null and b/modules/core/src/main/resources/static/ueditor/1.4/lang/ja_JP/images/copy.png differ
diff --git a/modules/core/src/main/resources/static/ueditor/1.4/lang/ja_JP/images/localimage.png b/modules/core/src/main/resources/static/ueditor/1.4/lang/ja_JP/images/localimage.png
new file mode 100644
index 00000000..7303c364
Binary files /dev/null and b/modules/core/src/main/resources/static/ueditor/1.4/lang/ja_JP/images/localimage.png differ
diff --git a/modules/core/src/main/resources/static/ueditor/1.4/lang/ja_JP/images/music.png b/modules/core/src/main/resources/static/ueditor/1.4/lang/ja_JP/images/music.png
new file mode 100644
index 00000000..354edebc
Binary files /dev/null and b/modules/core/src/main/resources/static/ueditor/1.4/lang/ja_JP/images/music.png differ
diff --git a/modules/core/src/main/resources/static/ueditor/1.4/lang/ja_JP/images/upload.png b/modules/core/src/main/resources/static/ueditor/1.4/lang/ja_JP/images/upload.png
new file mode 100644
index 00000000..08d4d926
Binary files /dev/null and b/modules/core/src/main/resources/static/ueditor/1.4/lang/ja_JP/images/upload.png differ
diff --git a/modules/core/src/main/resources/static/ueditor/1.4/lang/ja_JP/ja_JP.js b/modules/core/src/main/resources/static/ueditor/1.4/lang/ja_JP/ja_JP.js
new file mode 100644
index 00000000..9c715751
--- /dev/null
+++ b/modules/core/src/main/resources/static/ueditor/1.4/lang/ja_JP/ja_JP.js
@@ -0,0 +1,669 @@
+/**
+ * Created with JetBrains PhpStorm.
+ * User: taoqili
+ * Date: 12-6-12
+ * Time: 下午5:02
+ * To change this template use File | Settings | File Templates.
+ */
+UE.I18N['ja_JP'] = {
+ 'labelMap':{
+ 'anchor':'锚点', 'undo':'撤销', 'redo':'重做', 'bold':'加粗', 'indent':'首行缩进', 'snapscreen':'截图',
+ 'italic':'斜体', 'underline':'下划线', 'strikethrough':'删除线', 'subscript':'下标','fontborder':'字符边框',
+ 'superscript':'上标', 'formatmatch':'格式刷', 'source':'源代码', 'blockquote':'引用',
+ 'pasteplain':'纯文本粘贴模式', 'selectall':'全选', 'print':'打印', 'preview':'预览',
+ 'horizontal':'分隔线', 'removeformat':'清除格式', 'time':'时间', 'date':'日期',
+ 'unlink':'取消链接', 'insertrow':'前插入行', 'insertcol':'前插入列', 'mergeright':'右合并单元格', 'mergedown':'下合并单元格',
+ 'deleterow':'删除行', 'deletecol':'删除列', 'splittorows':'拆分成行',
+ 'splittocols':'拆分成列', 'splittocells':'完全拆分单元格','deletecaption':'删除表格标题','inserttitle':'插入标题',
+ 'mergecells':'合并多个单元格', 'deletetable':'删除表格', 'cleardoc':'清空文档','insertparagraphbeforetable':"表格前插入行",'insertcode':'代码语言',
+ 'fontfamily':'字体', 'fontsize':'字号', 'paragraph':'段落格式', 'simpleupload':'单图上传', 'insertimage':'多图上传','edittable':'表格属性','edittd':'单元格属性', 'link':'超链接',
+ 'emotion':'表情', 'spechars':'特殊字符', 'searchreplace':'查询替换', 'map':'Baidu地图', 'gmap':'Google地图',
+ 'insertvideo':'视频', 'help':'帮助', 'justifyleft':'居左对齐', 'justifyright':'居右对齐', 'justifycenter':'居中对齐',
+ 'justifyjustify':'两端对齐', 'forecolor':'字体颜色', 'backcolor':'背景色', 'insertorderedlist':'有序列表',
+ 'insertunorderedlist':'无序列表', 'fullscreen':'全屏', 'directionalityltr':'从左向右输入', 'directionalityrtl':'从右向左输入',
+ 'rowspacingtop':'段前距', 'rowspacingbottom':'段后距', 'pagebreak':'分页', 'insertframe':'插入Iframe', 'imagenone':'默认',
+ 'imageleft':'左浮动', 'imageright':'右浮动', 'attachment':'附件', 'imagecenter':'居中', 'wordimage':'图片转存',
+ 'lineheight':'行间距','edittip' :'编辑提示','customstyle':'扩展样式', 'autotypeset':'自动排版',
+ 'webapp':'百度应用','touppercase':'字母大写', 'tolowercase':'字母小写','background':'背景','template':'模板','scrawl':'涂鸦',
+ 'music':'音乐','inserttable':'插入表格','drafts': '从草稿箱加载', 'charts': '图表'
+ },
+ 'insertorderedlist':{
+ 'num':'1,2,3...',
+ 'num1':'1),2),3)...',
+ 'num2':'(1),(2),(3)...',
+ 'cn':'一,二,三....',
+ 'cn1':'一),二),三)....',
+ 'cn2':'(一),(二),(三)....',
+ 'decimal':'1,2,3...',
+ 'lower-alpha':'a,b,c...',
+ 'lower-roman':'i,ii,iii...',
+ 'upper-alpha':'A,B,C...',
+ 'upper-roman':'I,II,III...'
+ },
+ 'insertunorderedlist':{
+ 'circle':'○ 大圆圈',
+ 'disc':'● 小黑点',
+ 'square':'■ 小方块 ',
+ 'dash' :'— 破折号',
+ 'dot':' 。 小圆圈'
+ },
+ 'paragraph':{'p':'段落', 'h1':'标题 1', 'h2':'标题 2', 'h3':'标题 3', 'h4':'标题 4', 'h5':'标题 5', 'h6':'标题 6'},
+ 'fontfamily':{
+ 'songti':'宋体',
+ 'kaiti':'楷体',
+ 'heiti':'黑体',
+ 'lishu':'隶书',
+ 'yahei':'微软雅黑',
+ 'andaleMono':'andale mono',
+ 'arial': 'arial',
+ 'arialBlack':'arial black',
+ 'comicSansMs':'comic sans ms',
+ 'impact':'impact',
+ 'timesNewRoman':'times new roman'
+ },
+ 'customstyle':{
+ 'tc':'标题居中',
+ 'tl':'标题居左',
+ 'im':'强调',
+ 'hi':'明显强调'
+ },
+ 'autoupload': {
+ 'exceedSizeError': '文件大小超出限制',
+ 'exceedTypeError': '文件格式不允许',
+ 'jsonEncodeError': '服务器返回格式错误',
+ 'loading':"正在上传...",
+ 'loadError':"上传错误",
+ 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!'
+ },
+ 'simpleupload':{
+ 'exceedSizeError': '文件大小超出限制',
+ 'exceedTypeError': '文件格式不允许',
+ 'jsonEncodeError': '服务器返回格式错误',
+ 'loading':"正在上传...",
+ 'loadError':"上传错误",
+ 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!'
+ },
+ 'elementPathTip':"元素路径",
+ 'wordCountTip':"字数统计",
+ 'wordCountMsg':'当前已输入{#count}个字符, 您还可以输入{#leave}个字符。 ',
+ 'wordOverFlowMsg':'字数超出最大允许值,服务器可能拒绝保存!',
+ 'ok':"确认",
+ 'cancel':"取消",
+ 'closeDialog':"关闭对话框",
+ 'tableDrag':"表格拖动必须引入uiUtils.js文件!",
+ 'autofloatMsg':"工具栏浮动依赖编辑器UI,您首先需要引入UI文件!",
+ 'loadconfigError': '获取后台配置项请求出错,上传功能将不能正常使用!',
+ 'loadconfigFormatError': '后台配置项返回格式出错,上传功能将不能正常使用!',
+ 'loadconfigHttpError': '请求后台配置项http错误,上传功能将不能正常使用!',
+ 'snapScreen_plugin':{
+ 'browserMsg':"仅支持IE浏览器!",
+ 'callBackErrorMsg':"服务器返回数据有误,请检查配置项之后重试。",
+ 'uploadErrorMsg':"截图上传失败,请检查服务器端环境! "
+ },
+ 'insertcode':{
+ 'as3':'ActionScript 3',
+ 'bash':'Bash/Shell',
+ 'cpp':'C/C++',
+ 'css':'CSS',
+ 'cf':'ColdFusion',
+ 'c#':'C#',
+ 'delphi':'Delphi',
+ 'diff':'Diff',
+ 'erlang':'Erlang',
+ 'groovy':'Groovy',
+ 'html':'HTML',
+ 'java':'Java',
+ 'jfx':'JavaFX',
+ 'js':'JavaScript',
+ 'pl':'Perl',
+ 'php':'PHP',
+ 'plain':'Plain Text',
+ 'ps':'PowerShell',
+ 'python':'Python',
+ 'ruby':'Ruby',
+ 'scala':'Scala',
+ 'sql':'SQL',
+ 'vb':'Visual Basic',
+ 'xml':'XML'
+ },
+ 'confirmClear':"确定清空当前文档么?",
+ 'contextMenu':{
+ 'delete':"删除",
+ 'selectall':"全选",
+ 'deletecode':"删除代码",
+ 'cleardoc':"清空文档",
+ 'confirmclear':"确定清空当前文档么?",
+ 'unlink':"删除超链接",
+ 'paragraph':"段落格式",
+ 'edittable':"表格属性",
+ 'aligntd':"单元格对齐方式",
+ 'aligntable':'表格对齐方式',
+ 'tableleft':'左浮动',
+ 'tablecenter':'居中显示',
+ 'tableright':'右浮动',
+ 'edittd':"单元格属性",
+ 'setbordervisible':'设置表格边线可见',
+ 'justifyleft':'左对齐',
+ 'justifyright':'右对齐',
+ 'justifycenter':'居中对齐',
+ 'justifyjustify':'两端对齐',
+ 'table':"表格",
+ 'inserttable':'插入表格',
+ 'deletetable':"删除表格",
+ 'insertparagraphbefore':"前插入段落",
+ 'insertparagraphafter':'后插入段落',
+ 'deleterow':"删除当前行",
+ 'deletecol':"删除当前列",
+ 'insertrow':"前插入行",
+ 'insertcol':"左插入列",
+ 'insertrownext':'后插入行',
+ 'insertcolnext':'右插入列',
+ 'insertcaption':'插入表格名称',
+ 'deletecaption':'删除表格名称',
+ 'inserttitle':'插入表格标题行',
+ 'deletetitle':'删除表格标题行',
+ 'inserttitlecol':'插入表格标题列',
+ 'deletetitlecol':'删除表格标题列',
+ 'averageDiseRow':'平均分布各行',
+ 'averageDisCol':'平均分布各列',
+ 'mergeright':"向右合并",
+ 'mergeleft':"向左合并",
+ 'mergedown':"向下合并",
+ 'mergecells':"合并单元格",
+ 'splittocells':"完全拆分单元格",
+ 'splittocols':"拆分成列",
+ 'splittorows':"拆分成行",
+ 'tablesort':'表格排序',
+ 'enablesort':'设置表格可排序',
+ 'disablesort':'取消表格可排序',
+ 'reversecurrent':'逆序当前',
+ 'orderbyasc':'按ASCII字符升序',
+ 'reversebyasc':'按ASCII字符降序',
+ 'orderbynum':'按数值大小升序',
+ 'reversebynum':'按数值大小降序',
+ 'borderbk':'边框底纹',
+ 'setcolor':'表格隔行变色',
+ 'unsetcolor':'取消表格隔行变色',
+ 'setbackground':'选区背景隔行',
+ 'unsetbackground':'取消选区背景',
+ 'redandblue':'红蓝相间',
+ 'threecolorgradient':'三色渐变',
+ 'copy':"复制(Ctrl + c)",
+ 'copymsg': "浏览器不支持,请使用 'Ctrl + c'",
+ 'paste':"粘贴(Ctrl + v)",
+ 'pastemsg': "浏览器不支持,请使用 'Ctrl + v'"
+ },
+ 'copymsg': "浏览器不支持,请使用 'Ctrl + c'",
+ 'pastemsg': "浏览器不支持,请使用 'Ctrl + v'",
+ 'anthorMsg':"链接",
+ 'clearColor':'清空颜色',
+ 'standardColor':'标准颜色',
+ 'themeColor':'主题颜色',
+ 'property':'属性',
+ 'default':'默认',
+ 'modify':'修改',
+ 'justifyleft':'左对齐',
+ 'justifyright':'右对齐',
+ 'justifycenter':'居中',
+ 'justify':'默认',
+ 'clear':'清除',
+ 'anchorMsg':'锚点',
+ 'delete':'删除',
+ 'clickToUpload':"点击上传",
+ 'unset':'尚未设置语言文件',
+ 't_row':'行',
+ 't_col':'列',
+ 'more':'更多',
+ 'pasteOpt':'粘贴选项',
+ 'pasteSourceFormat':"保留源格式",
+ 'tagFormat':'只保留标签',
+ 'pasteTextFormat':'只保留文本',
+ 'autoTypeSet':{
+ 'mergeLine':"合并空行",
+ 'delLine':"清除空行",
+ 'removeFormat':"清除格式",
+ 'indent':"首行缩进",
+ 'alignment':"对齐方式",
+ 'imageFloat':"图片浮动",
+ 'removeFontsize':"清除字号",
+ 'removeFontFamily':"清除字体",
+ 'removeHtml':"清除冗余HTML代码",
+ 'pasteFilter':"粘贴过滤",
+ 'run':"执行",
+ 'symbol':'符号转换',
+ 'bdc2sb':'全角转半角',
+ 'tobdc':'半角转全角'
+ },
+
+ 'background':{
+ 'static':{
+ 'lang_background_normal':'背景设置',
+ 'lang_background_local':'在线图片',
+ 'lang_background_set':'选项',
+ 'lang_background_none':'无背景色',
+ 'lang_background_colored':'有背景色',
+ 'lang_background_color':'颜色设置',
+ 'lang_background_netimg':'网络图片',
+ 'lang_background_align':'对齐方式',
+ 'lang_background_position':'精确定位',
+ 'repeatType':{'options':["居中", "横向重复", "纵向重复", "平铺","自定义"]}
+
+ },
+ 'noUploadImage':"当前未上传过任何图片!",
+ 'toggleSelect':"单击可切换选中状态\n原图尺寸: "
+ },
+ //===============dialog i18N=======================
+ 'insertimage':{
+ 'static':{
+ 'lang_tab_remote':"插入图片", //节点
+ 'lang_tab_upload':"本地上传",
+ 'lang_tab_online':"在线管理",
+ 'lang_tab_search':"图片搜索",
+ 'lang_input_url':"地 址:",
+ 'lang_input_size':"大 小:",
+ 'lang_input_width':"宽度",
+ 'lang_input_height':"高度",
+ 'lang_input_border':"边 框:",
+ 'lang_input_vhspace':"边 距:",
+ 'lang_input_title':"描 述:",
+ 'lang_input_align':'图片浮动方式:',
+ 'lang_imgLoading':" 图片加载中……",
+ 'lang_start_upload':"开始上传",
+ 'lock':{'title':"锁定宽高比例"}, //属性
+ 'searchType':{'title':"图片类型", 'options':["新闻", "壁纸", "表情", "头像"]}, //select的option
+ 'searchTxt':{'value':"请输入搜索关键词"},
+ 'searchBtn':{'value':"百度一下"},
+ 'searchReset':{'value':"清空搜索"},
+ 'noneAlign':{'title':'无浮动'},
+ 'leftAlign':{'title':'左浮动'},
+ 'rightAlign':{'title':'右浮动'},
+ 'centerAlign':{'title':'居中独占一行'}
+ },
+ 'uploadSelectFile':'点击选择图片',
+ 'uploadAddFile':'继续添加',
+ 'uploadStart':'开始上传',
+ 'uploadPause':'暂停上传',
+ 'uploadContinue':'继续上传',
+ 'uploadRetry':'重试上传',
+ 'uploadDelete':'删除',
+ 'uploadTurnLeft':'向左旋转',
+ 'uploadTurnRight':'向右旋转',
+ 'uploadPreview':'预览中',
+ 'uploadNoPreview':'不能预览',
+ 'updateStatusReady': '选中_张图片,共_KB。',
+ 'updateStatusConfirm': '已成功上传_张照片,_张照片上传失败',
+ 'updateStatusFinish': '共_张(_KB),_张上传成功',
+ 'updateStatusError': ',_张上传失败。',
+ 'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。',
+ 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!',
+ 'errorExceedSize':'文件大小超出',
+ 'errorFileType':'文件格式不允许',
+ 'errorInterrupt':'文件传输中断',
+ 'errorUploadRetry':'上传失败,请重试',
+ 'errorHttp':'http请求错误',
+ 'errorServerUpload':'服务器返回出错',
+ 'remoteLockError':"宽高不正确,不能所定比例",
+ 'numError':"请输入正确的长度或者宽度值!例如:123,400",
+ 'imageUrlError':"不允许的图片格式或者图片域!",
+ 'imageLoadError':"图片加载失败!请检查链接地址或网络状态!",
+ 'searchRemind':"请输入搜索关键词",
+ 'searchLoading':"图片加载中,请稍后……",
+ 'searchRetry':" :( ,抱歉,没有找到图片!请重试一次!"
+ },
+ 'attachment':{
+ 'static':{
+ 'lang_tab_upload': '上传附件',
+ 'lang_tab_online': '在线附件',
+ 'lang_start_upload':"开始上传",
+ 'lang_drop_remind':"可以将文件拖到这里,单次最多可选100个文件"
+ },
+ 'uploadSelectFile':'点击选择文件',
+ 'uploadAddFile':'继续添加',
+ 'uploadStart':'开始上传',
+ 'uploadPause':'暂停上传',
+ 'uploadContinue':'继续上传',
+ 'uploadRetry':'重试上传',
+ 'uploadDelete':'删除',
+ 'uploadTurnLeft':'向左旋转',
+ 'uploadTurnRight':'向右旋转',
+ 'uploadPreview':'预览中',
+ 'updateStatusReady': '选中_个文件,共_KB。',
+ 'updateStatusConfirm': '已成功上传_个文件,_个文件上传失败',
+ 'updateStatusFinish': '共_个(_KB),_个上传成功',
+ 'updateStatusError': ',_张上传失败。',
+ 'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。',
+ 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!',
+ 'errorExceedSize':'文件大小超出',
+ 'errorFileType':'文件格式不允许',
+ 'errorInterrupt':'文件传输中断',
+ 'errorUploadRetry':'上传失败,请重试',
+ 'errorHttp':'http请求错误',
+ 'errorServerUpload':'服务器返回出错'
+ },
+ 'insertvideo':{
+ 'static':{
+ 'lang_tab_insertV':"插入视频",
+ 'lang_tab_searchV':"搜索视频",
+ 'lang_tab_uploadV':"上传视频",
+ 'lang_video_url':"视频网址",
+ 'lang_video_size':"视频尺寸",
+ 'lang_videoW':"宽度",
+ 'lang_videoH':"高度",
+ 'lang_alignment':"对齐方式",
+ 'videoSearchTxt':{'value':"请输入搜索关键字!"},
+ 'videoType':{'options':["全部", "热门", "娱乐", "搞笑", "体育", "科技", "综艺"]},
+ 'videoSearchBtn':{'value':"百度一下"},
+ 'videoSearchReset':{'value':"清空结果"},
+
+ 'lang_input_fileStatus':' 当前未上传文件',
+ 'startUpload':{'style':"background:url(upload.png) no-repeat;"},
+
+ 'lang_upload_size':"视频尺寸",
+ 'lang_upload_width':"宽度",
+ 'lang_upload_height':"高度",
+ 'lang_upload_alignment':"对齐方式",
+ 'lang_format_advice':"建议使用mp4格式."
+
+ },
+ 'numError':"请输入正确的数值,如123,400",
+ 'floatLeft':"左浮动",
+ 'floatRight':"右浮动",
+ '"default"':"默认",
+ 'block':"独占一行",
+ 'urlError':"输入的视频地址有误,请检查后再试!",
+ 'loading':" 视频加载中,请等待……",
+ 'clickToSelect':"点击选中",
+ 'goToSource':'访问源视频',
+ 'noVideo':" 抱歉,找不到对应的视频,请重试!",
+
+ 'browseFiles':'浏览文件',
+ 'uploadSuccess':'上传成功!',
+ 'delSuccessFile':'从成功队列中移除',
+ 'delFailSaveFile':'移除保存失败文件',
+ 'statusPrompt':' 个文件已上传! ',
+ 'flashVersionError':'当前Flash版本过低,请更新FlashPlayer后重试!',
+ 'flashLoadingError':'Flash加载失败!请检查路径或网络状态',
+ 'fileUploadReady':'等待上传……',
+ 'delUploadQueue':'从上传队列中移除',
+ 'limitPrompt1':'单次不能选择超过',
+ 'limitPrompt2':'个文件!请重新选择!',
+ 'delFailFile':'移除失败文件',
+ 'fileSizeLimit':'文件大小超出限制!',
+ 'emptyFile':'空文件无法上传!',
+ 'fileTypeError':'文件类型不允许!',
+ 'unknownError':'未知错误!',
+ 'fileUploading':'上传中,请等待……',
+ 'cancelUpload':'取消上传',
+ 'netError':'网络错误',
+ 'failUpload':'上传失败!',
+ 'serverIOError':'服务器IO错误!',
+ 'noAuthority':'无权限!',
+ 'fileNumLimit':'上传个数限制',
+ 'failCheck':'验证失败,本次上传被跳过!',
+ 'fileCanceling':'取消中,请等待……',
+ 'stopUploading':'上传已停止……',
+
+ 'uploadSelectFile':'点击选择文件',
+ 'uploadAddFile':'继续添加',
+ 'uploadStart':'开始上传',
+ 'uploadPause':'暂停上传',
+ 'uploadContinue':'继续上传',
+ 'uploadRetry':'重试上传',
+ 'uploadDelete':'删除',
+ 'uploadTurnLeft':'向左旋转',
+ 'uploadTurnRight':'向右旋转',
+ 'uploadPreview':'预览中',
+ 'updateStatusReady': '选中_个文件,共_KB。',
+ 'updateStatusConfirm': '成功上传_个,_个失败',
+ 'updateStatusFinish': '共_个(_KB),_个成功上传',
+ 'updateStatusError': ',_张上传失败。',
+ 'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。',
+ 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!',
+ 'errorExceedSize':'文件大小超出',
+ 'errorFileType':'文件格式不允许',
+ 'errorInterrupt':'文件传输中断',
+ 'errorUploadRetry':'上传失败,请重试',
+ 'errorHttp':'http请求错误',
+ 'errorServerUpload':'服务器返回出错'
+ },
+ 'webapp':{
+ 'tip1':"本功能由百度APP提供,如看到此页面,请各位站长首先申请百度APPKey!",
+ 'tip2':"申请完成之后请至ueditor.config.js中配置获得的appkey! ",
+ 'applyFor':"点此申请",
+ 'anthorApi':"百度API"
+ },
+ 'template':{
+ 'static':{
+ 'lang_template_bkcolor':'背景颜色',
+ 'lang_template_clear' : '保留原有内容',
+ 'lang_template_select' : '选择模板'
+ },
+ 'blank':"空白文档",
+ 'blog':"博客文章",
+ 'resume':"个人简历",
+ 'richText':"图文混排",
+ 'sciPapers':"科技论文"
+
+
+ },
+ 'scrawl':{
+ 'static':{
+ 'lang_input_previousStep':"上一步",
+ 'lang_input_nextsStep':"下一步",
+ 'lang_input_clear':'清空',
+ 'lang_input_addPic':'添加背景',
+ 'lang_input_ScalePic':'缩放背景',
+ 'lang_input_removePic':'删除背景',
+ 'J_imgTxt':{title:'添加背景图片'}
+ },
+ 'noScarwl':"尚未作画,白纸一张~",
+ 'scrawlUpLoading':"涂鸦上传中,别急哦~",
+ 'continueBtn':"继续",
+ 'imageError':"糟糕,图片读取失败了!",
+ 'backgroundUploading':'背景图片上传中,别急哦~'
+ },
+ 'music':{
+ 'static':{
+ 'lang_input_tips':"输入歌手/歌曲/专辑,搜索您感兴趣的音乐!",
+ 'J_searchBtn':{value:'搜索歌曲'}
+ },
+ 'emptyTxt':'未搜索到相关音乐结果,请换一个关键词试试。',
+ 'chapter':'歌曲',
+ 'singer':'歌手',
+ 'special':'专辑',
+ 'listenTest':'试听'
+ },
+ 'anchor':{
+ 'static':{
+ 'lang_input_anchorName':'锚点名字:'
+ }
+ },
+ 'charts':{
+ 'static':{
+ 'lang_data_source':'数据源:',
+ 'lang_chart_format': '图表格式:',
+ 'lang_data_align': '数据对齐方式',
+ 'lang_chart_align_same': '数据源与图表X轴Y轴一致',
+ 'lang_chart_align_reverse': '数据源与图表X轴Y轴相反',
+ 'lang_chart_title': '图表标题',
+ 'lang_chart_main_title': '主标题:',
+ 'lang_chart_sub_title': '子标题:',
+ 'lang_chart_x_title': 'X轴标题:',
+ 'lang_chart_y_title': 'Y轴标题:',
+ 'lang_chart_tip': '提示文字',
+ 'lang_cahrt_tip_prefix': '提示文字前缀:',
+ 'lang_cahrt_tip_description': '仅饼图有效, 当鼠标移动到饼图中相应的块上时,提示框内的文字的前缀',
+ 'lang_chart_data_unit': '数据单位',
+ 'lang_chart_data_unit_title': '单位:',
+ 'lang_chart_data_unit_description': '显示在每个数据点上的数据的单位, 比如: 温度的单位 ℃',
+ 'lang_chart_type': '图表类型:',
+ 'lang_prev_btn': '上一个',
+ 'lang_next_btn': '下一个'
+ }
+ },
+ 'emotion':{
+ 'static':{
+ 'lang_input_choice':'精选',
+ 'lang_input_Tuzki':'兔斯基',
+ 'lang_input_BOBO':'BOBO',
+ 'lang_input_lvdouwa':'绿豆蛙',
+ 'lang_input_babyCat':'baby猫',
+ 'lang_input_bubble':'泡泡',
+ 'lang_input_youa':'有啊'
+ }
+ },
+ 'gmap':{
+ 'static':{
+ 'lang_input_address':'地址',
+ 'lang_input_search':'搜索',
+ 'address':{value:"北京"}
+ },
+ searchError:'无法定位到该地址!'
+ },
+ 'help':{
+ 'static':{
+ 'lang_input_about':'关于UEditor',
+ 'lang_input_shortcuts':'快捷键',
+ 'lang_input_introduction':'UEditor是由百度web前端研发部开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点。开源基于BSD协议,允许自由使用和修改代码。',
+ 'lang_Txt_shortcuts':'快捷键',
+ 'lang_Txt_func':'功能',
+ 'lang_Txt_bold':'给选中字设置为加粗',
+ 'lang_Txt_copy':'复制选中内容',
+ 'lang_Txt_cut':'剪切选中内容',
+ 'lang_Txt_Paste':'粘贴',
+ 'lang_Txt_undo':'重新执行上次操作',
+ 'lang_Txt_redo':'撤销上一次操作',
+ 'lang_Txt_italic':'给选中字设置为斜体',
+ 'lang_Txt_underline':'给选中字加下划线',
+ 'lang_Txt_selectAll':'全部选中',
+ 'lang_Txt_visualEnter':'软回车',
+ 'lang_Txt_fullscreen':'全屏'
+ }
+ },
+ 'insertframe':{
+ 'static':{
+ 'lang_input_address':'地址:',
+ 'lang_input_width':'宽度:',
+ 'lang_input_height':'高度:',
+ 'lang_input_isScroll':'允许滚动条:',
+ 'lang_input_frameborder':'显示框架边框:',
+ 'lang_input_alignMode':'对齐方式:',
+ 'align':{title:"对齐方式", options:["默认", "左对齐", "右对齐", "居中"]}
+ },
+ 'enterAddress':'请输入地址!'
+ },
+ 'link':{
+ 'static':{
+ 'lang_input_text':'文本内容:',
+ 'lang_input_url':'链接地址:',
+ 'lang_input_title':'标题:',
+ 'lang_input_target':'是否在新窗口打开:'
+ },
+ 'validLink':'只支持选中一个链接时生效',
+ 'httpPrompt':'您输入的超链接中不包含http等协议名称,默认将为您添加http://前缀'
+ },
+ 'map':{
+ 'static':{
+ lang_city:"城市",
+ lang_address:"地址",
+ city:{value:"北京"},
+ lang_search:"搜索",
+ lang_dynamicmap:"插入动态地图"
+ },
+ cityMsg:"请选择城市",
+ errorMsg:"抱歉,找不到该位置!"
+ },
+ 'searchreplace':{
+ 'static':{
+ lang_tab_search:"查找",
+ lang_tab_replace:"替换",
+ lang_search1:"查找",
+ lang_search2:"查找",
+ lang_replace:"替换",
+ lang_searchReg:'支持正则表达式,添加前后斜杠标示为正则表达式,例如“/表达式/”',
+ lang_searchReg1:'支持正则表达式,添加前后斜杠标示为正则表达式,例如“/表达式/”',
+ lang_case_sensitive1:"区分大小写",
+ lang_case_sensitive2:"区分大小写",
+ nextFindBtn:{value:"下一个"},
+ preFindBtn:{value:"上一个"},
+ nextReplaceBtn:{value:"下一个"},
+ preReplaceBtn:{value:"上一个"},
+ repalceBtn:{value:"替换"},
+ repalceAllBtn:{value:"全部替换"}
+ },
+ getEnd:"已经搜索到文章末尾!",
+ getStart:"已经搜索到文章头部",
+ countMsg:"总共替换了{#count}处!"
+ },
+ 'snapscreen':{
+ 'static':{
+ lang_showMsg:"截图功能需要首先安装UEditor截图插件! ",
+ lang_download:"点此下载",
+ lang_step1:"第一步,下载UEditor截图插件并运行安装。",
+ lang_step2:"第二步,插件安装完成后即可使用,如不生效,请重启浏览器后再试!"
+ }
+ },
+ 'spechars':{
+ 'static':{},
+ tsfh:"特殊字符",
+ lmsz:"罗马字符",
+ szfh:"数学字符",
+ rwfh:"日文字符",
+ xlzm:"希腊字母",
+ ewzm:"俄文字符",
+ pyzm:"拼音字母",
+ yyyb:"英语音标",
+ zyzf:"其他"
+ },
+ 'edittable':{
+ 'static':{
+ 'lang_tableStyle':'表格样式',
+ 'lang_insertCaption':'添加表格名称行',
+ 'lang_insertTitle':'添加表格标题行',
+ 'lang_insertTitleCol':'添加表格标题列',
+ 'lang_orderbycontent':"使表格内容可排序",
+ 'lang_tableSize':'自动调整表格尺寸',
+ 'lang_autoSizeContent':'按表格文字自适应',
+ 'lang_autoSizePage':'按页面宽度自适应',
+ 'lang_example':'示例',
+ 'lang_borderStyle':'表格边框',
+ 'lang_color':'颜色:'
+ },
+ captionName:'表格名称',
+ titleName:'标题',
+ cellsName:'内容',
+ errorMsg:'有合并单元格,不可排序'
+ },
+ 'edittip':{
+ 'static':{
+ lang_delRow:'删除整行',
+ lang_delCol:'删除整列'
+ }
+ },
+ 'edittd':{
+ 'static':{
+ lang_tdBkColor:'背景颜色:'
+ }
+ },
+ 'formula':{
+ 'static':{
+ }
+ },
+ 'wordimage':{
+ 'static':{
+ lang_resave:"转存步骤",
+ uploadBtn:{src:"upload.png",alt:"上传"},
+ clipboard:{style:"background: url(copy.png) -153px -1px no-repeat;"},
+ lang_step:"1、点击顶部复制按钮,将地址复制到剪贴板;2、点击添加照片按钮,在弹出的对话框中使用Ctrl+V粘贴地址;3、点击打开后选择图片上传流程。"
+ },
+ 'fileType':"图片",
+ 'flashError':"FLASH初始化失败,请检查FLASH插件是否正确安装!",
+ 'netError':"网络连接错误,请重试!",
+ 'copySuccess':"图片地址已经复制!",
+ 'flashI18n':{} //留空默认中文
+ },
+ 'autosave': {
+ 'saving':'保存中...',
+ 'success':'本地保存成功'
+ }
+};
diff --git a/modules/core/src/main/resources/static/wdScrollTab/js/TabPanel_i18n.js b/modules/core/src/main/resources/static/wdScrollTab/js/TabPanel_i18n.js
new file mode 100644
index 00000000..1f10c34d
--- /dev/null
+++ b/modules/core/src/main/resources/static/wdScrollTab/js/TabPanel_i18n.js
@@ -0,0 +1,22 @@
+(function($) {
+
+ window.TabPanel = window.TabPanel || {};
+ if (window.lang == 'en'){
+ TabPanel.i18n = $.extend({}, TabPanel.i18n, {
+ closeTab: 'Close',
+ refreshTab: 'Refresh',
+ closeOther: 'Close Other',
+ closeLeft: 'Close Left',
+ closeRight: 'Close Right'
+ });
+ } else if (window.lang == 'ja_JP'){
+ TabPanel.i18n = $.extend({}, TabPanel.i18n, {
+ closeTab: '閉じる',
+ refreshTab: '更新',
+ closeOther: '他を閉じる',
+ closeLeft: '左側を閉じる',
+ closeRight: '右側を閉じる'
+ });
+ }
+
+})(jQuery);
diff --git a/modules/core/src/main/resources/static/webuploader/0.1/i18n/en.js b/modules/core/src/main/resources/static/webuploader/0.1/i18n/en.js
new file mode 100644
index 00000000..333e97ce
--- /dev/null
+++ b/modules/core/src/main/resources/static/webuploader/0.1/i18n/en.js
@@ -0,0 +1,60 @@
+(function($) {
+$.fn.webuploader.defaults.i18n = {
+
+ '安装失败!': 'Installation failed!',
+ '安装已成功,请刷新!': 'Installation successful, please refresh!',
+ '文件上传组件不支持您的浏览器,请使用高版本浏览器!': 'Does not support your browser, please use the high version browser!',
+
+ '点击选择文件': 'Select files',
+ '点击选择图片': 'Select images',
+ '点击选择视频': 'Select videos',
+ '继续添加': 'Add files',
+
+ '暂停上传': 'Pause upload',
+ '继续上传': 'Continue upload',
+ '开始上传': 'Start upload',
+ '上传成功': 'Upload success',
+
+ '张图片': ' images',
+ '个文件': ' files',
+
+ '上传失败': ' Failure',
+ '重新上传': ' Retry ',
+ '或': ' or ',
+ '忽略': ' Ignore ',
+
+ '总共': 'Total ',
+ '已上传': 'Uploaded ',
+ '失败{0}个': ' {0} failure',
+
+ '您只能上传{0}个文件': 'You can only upload {0} files.',
+ '正在验证文件,请稍等。': 'File is being validated.',
+
+ '删除': 'Delete',
+ '向右旋转': 'Rotate right',
+ '向左旋转': 'Rotate left',
+
+ '文件类型不对': 'File type error',
+ '文件大小超出': 'File size exceeded',
+ '文件传输中断': 'File transfer interrupt',
+ 'HTTP请求错误': 'HTTP request error',
+ '文件格式不允许': 'File format not allowed',
+ '不要选择重复文件': 'Do not select duplicate files',
+ '上传失败,请重试': 'Upload failed, please try again',
+ '服务器返回出错': 'The server returned an error',
+
+ '预览生成中': 'Preview create',
+ '不能预览': 'Cannot preview',
+
+ '确定删除该图片吗?': 'Are you sure to delete the image?',
+ '确定删除该文件吗?': 'Are you sure to delete this file?',
+
+ '等待上传': 'Waiting for the upload',
+ '正在上传': 'Are uploading',
+
+ '取消': 'Cancel',
+ '下载': 'Download',
+ '预览': 'Preview',
+ '查看': 'To view'
+};
+})(jQuery);
diff --git a/modules/core/src/main/resources/static/webuploader/0.1/i18n/ja_JP.js b/modules/core/src/main/resources/static/webuploader/0.1/i18n/ja_JP.js
new file mode 100644
index 00000000..a340eced
--- /dev/null
+++ b/modules/core/src/main/resources/static/webuploader/0.1/i18n/ja_JP.js
@@ -0,0 +1,60 @@
+(function($) {
+$.fn.webuploader.defaults.i18n = {
+
+ '安装失败!': 'インストールに失敗!',
+ '安装已成功,请刷新!': 'インストールは成功しました。!',
+ '文件上传组件不支持您的浏览器,请使用高版本浏览器!': 'ファイルアップロードコンポーネントがあなたのブラウザをサポートしません。!',
+
+ '点击选择文件': '選択ファイルをクリックする。',
+ '点击选择图片': '選択画像をクリックする。',
+ '点击选择视频': '選択動画をクリックする。',
+ '继续添加': '追加し続ける',
+
+ '暂停上传': 'アップロードを一時停止する。',
+ '继续上传': 'アップロードを継続する',
+ '开始上传': 'アップロードを始める',
+ '上传成功': 'アップロードが成功する',
+
+ '张图片': ' 枚画像',
+ '个文件': ' 一つの書類',
+
+ '上传失败': ' アップロードの失敗',
+ '重新上传': ' アップロードを再開する ',
+ '或': ' または ',
+ '忽略': ' 無視する ',
+
+ '总共': '計 ',
+ '已上传': 'アップロードした ',
+ '失败{0}个': ' {0} つ失敗する',
+
+ '您只能上传{0}个文件': 'ファイルは{0}つしかアップロードできません',
+ '正在验证文件,请稍等。': '書類を検証中ですので、少々お待ちください。',
+
+ '删除': '削除',
+ '向右旋转': '右にまがる',
+ '向左旋转': '左に回る',
+
+ '文件类型不对': '書類のタイプが違う',
+ '文件大小超出': '書類のサイズがはみ出る',
+ '文件传输中断': 'ファイル転送を中断する。',
+ 'HTTP请求错误': 'HTTPリクエストエラー',
+ '文件格式不允许': 'ファイルフォーマットは許可されない',
+ '不要选择重复文件': '重複ファイルは選択しないでください',
+ '上传失败,请重试': 'アップロードに失敗したので、試してみてください',
+ '服务器返回出错': 'サーバーがエラーに戻る',
+
+ '预览生成中': 'プレビュー生成中',
+ '不能预览': 'プレビューができない。',
+
+ '确定删除该图片吗?': 'この写真を削除することは確定しましたか?',
+ '确定删除该文件吗?': 'このファイルを削除することは確定しましたか?',
+
+ '等待上传': 'アップロードを待つ',
+ '正在上传': 'アップロード中',
+
+ '取消': 'キャンセル',
+ '下载': 'ダウンロード',
+ '预览': 'プレビュー',
+ '查看': 'チェック'
+};
+})(jQuery);
diff --git a/modules/core/src/main/resources/static/webuploader/0.1/i18n/zh_CN.js b/modules/core/src/main/resources/static/webuploader/0.1/i18n/zh_CN.js
new file mode 100644
index 00000000..e69de29b
diff --git a/modules/core/src/main/resources/views/include/jslibs.html b/modules/core/src/main/resources/views/include/jslibs.html
index d415311b..00665888 100644
--- a/modules/core/src/main/resources/views/include/jslibs.html
+++ b/modules/core/src/main/resources/views/include/jslibs.html
@@ -10,6 +10,7 @@
<% if (@ListUtils.inString('tabPage', libs!)){ %>
+
<% } %>
<% if (@ListUtils.inString('dataGrid', libs!)){ %>
@@ -32,6 +33,7 @@
<% if (@ListUtils.inString('fileupload', libs!)){ %>
+
<% } %>
<% if (@ListUtils.inString('ueditor', libs!)){ %>