kuaifan пре 5 година
родитељ
комит
e3c19ef8d0

+ 22 - 0
app/Http/Controllers/IndexController.php

@@ -192,6 +192,28 @@ class IndexController extends Controller
     }
 
     /**
+     * 获取国际化列表
+     */
+    public function language__lists()
+    {
+        $lists = Base::readDir(resource_path('assets/js'));
+        $array = [];
+        foreach ($lists AS $file) {
+            $content = file_get_contents($file);
+            preg_match_all('/\$L\(([\'"])(.*?)\\1/', $content, $matchs);
+            foreach ($matchs[2] AS $key=>$text) {
+                if (Base::strExists($text, "',")) {
+                    $text = Base::getMiddle($text, null, "',");
+                }
+                if (!isset($array[$text])) {
+                    $array[$text] = null;
+                }
+            }
+        }
+        return json_encode($array, JSON_UNESCAPED_UNICODE);
+    }
+
+    /**
      * 清理opcache数据
      * @return int
      */

+ 21 - 0
app/Module/Base.php

@@ -2258,6 +2258,27 @@ class Base
     }
 
     /**
+     * 遍历获取文件
+     * @param $dir
+     * @return array
+     */
+    public static function readDir($dir)
+    {
+        $files = array();
+        $dir_list = scandir($dir);
+        foreach ($dir_list as $file) {
+            if ($file != '..' && $file != '.') {
+                if (is_dir($dir . '/' . $file)) {
+                    $files = array_merge($files, self::readDir($dir . '/' . $file));
+                } else {
+                    $files[] = $dir . "/" . $file;
+                }
+            }
+        }
+        return $files;
+    }
+
+    /**
      * 缓存数据
      * @param $title
      * @param null $value

+ 353 - 1
resources/assets/js/_modules/language/global/en.js

@@ -1,3 +1,355 @@
 export default {
-
+    "浏览": null,
+    "图片": null,
+    "上传": null,
+    "浏览图片空间的图片": null,
+    "加载中...": null,
+    "自定义图片地址": null,
+    "以“http://”或“https://”开头": null,
+    "确定": null,
+    "自定义地址": null,
+    "关闭": null,
+    "完成": null,
+    "查看图片": null,
+    "上传失败": null,
+    "文件 % 上传失败 %": null,
+    "文件格式不正确": null,
+    "文件 % 格式不正确,请上传 jpg、jpeg、gif、png 格式的图片。": null,
+    "超出文件大小限制": null,
+    "文件 % 太大,不能超过2M。": null,
+    "温馨提示": null,
+    "最多只能上传 % 张图片。": null,
+    "最多只能选择 % 张图片。": null,
+    "加载组件中...": null,
+    "上传/浏览 图片": null,
+    "上传图片": null,
+    "浏览图片": null,
+    "退出全屏": null,
+    "全屏": null,
+    "用户名": null,
+    "昵称": null,
+    "数据加载中.....": null,
+    "没有相关的数据": null,
+    "数据加载失败!": null,
+    "待办": null,
+    "项目": null,
+    "知识库": null,
+    "团队": null,
+    "欢迎您": null,
+    "尊敬的会员": null,
+    "个人中心": null,
+    "退出登录": null,
+    "个人资料": null,
+    "头像": null,
+    "职位/职称": null,
+    "提交": null,
+    "重置": null,
+    "偏好设置": null,
+    "系统皮肤": null,
+    "账号密码": null,
+    "旧密码": null,
+    "新密码": null,
+    "确认新密码": null,
+    "我创建的任务": null,
+    "我归档的任务": null,
+    "请输入昵称!": null,
+    "昵称长度至少2位!": null,
+    "请输入旧密码!": null,
+    "密码长度至少6位!": null,
+    "请输入新密码!": null,
+    "请输入确认新密码!": null,
+    "两次密码输入不一致!": null,
+    "您确定要退出登录吗?": null,
+    "修改成功": null,
+    "修改成功,请重新登录!": null,
+    "缩放": null,
+    "图形": null,
+    "样式": null,
+    "天空蓝": null,
+    "线框": null,
+    "鱼骨图": null,
+    "脑图经典": null,
+    "紧凑经典": null,
+    "温柔冷光": null,
+    "紧凑冷光": null,
+    "经典天盘": null,
+    "紧凑天盘": null,
+    "折叠": null,
+    "展开到一级节点": null,
+    "展开到二级节点": null,
+    "展开到三级节点": null,
+    "展开到四级节点": null,
+    "展开到五级节点": null,
+    "展开全部节点": null,
+    "居中": null,
+    "移动": null,
+    "导出PNG图片": null,
+    "无标题": null,
+    "默认节点": null,
+    "任务名称": null,
+    "创建人": null,
+    "负责人": null,
+    "归档时间": null,
+    "操作": null,
+    "取消归档": null,
+    "你确定要取消归档吗?": null,
+    "网络繁忙,请稍后再试!": null,
+    "归档": null,
+    "创建时间": null,
+    "项目名称": null,
+    "收藏时间": null,
+    "取消收藏": null,
+    "你确定要取消收藏此项目吗?": null,
+    "取消": null,
+    "加入时间": null,
+    "退出": null,
+    "删除": null,
+    "未完成任务": null,
+    "超期任务": null,
+    "已完成任务": null,
+    "输入任务,回车即可保存": null,
+    "重要且紧急": null,
+    "重要不紧急": null,
+    "紧急不重要": null,
+    "不重要不紧急": null,
+    "自己": null,
+    "选择负责人": null,
+    "留空默认: 自己": null,
+    "添加任务": null,
+    "创建于:": null,
+    "描述": null,
+    "添加详细描述...": null,
+    "计划时间:": null,
+    "至": null,
+    "已超期": null,
+    "负责人:": null,
+    "关注者:": null,
+    "优先级:": null,
+    "任务状态:": null,
+    "已完成": null,
+    "未完成": null,
+    "附件": null,
+    "评论": null,
+    "操作记录": null,
+    "输入评论,Enter发表评论,Shift+Enter换行": null,
+    "标记": null,
+    "标记未完成": null,
+    "标记已完成": null,
+    "完成并归档": null,
+    "优先级": null,
+    "输入关键词搜索": null,
+    "计划时间": null,
+    "选择日期范围": null,
+    "日期范围": null,
+    "添加附件": null,
+    "关注人": null,
+    "选择关注人": null,
+    "取消关注": null,
+    "关注任务": null,
+    "今天": null,
+    "明天": null,
+    "本周": null,
+    "本月": null,
+    "3天": null,
+    "5天": null,
+    "7天": null,
+    "请稍候...": null,
+    "修改负责人": null,
+    "你确定修改负责人设置为“%”吗?": null,
+    "任务负责人已改变,点击确定关闭窗口。": null,
+    "修改计划时间": null,
+    "你确定将任务计划时间设置为“%”吗?": null,
+    "取消计划时间": null,
+    "你确定将任务计划时间取消吗?": null,
+    "删除提示": null,
+    "您确定要删除此任务吗?": null,
+    "任务已删除,点击确定关闭窗口。": null,
+    "文件名": null,
+    "关键词": null,
+    "上传者": null,
+    "取消筛选": null,
+    "搜索": null,
+    "上传文件": null,
+    "大小": null,
+    "下载次数": null,
+    "上传时间": null,
+    "下载": null,
+    "重命名": null,
+    "复制链接": null,
+    "复制成功!": null,
+    "复制失败!": null,
+    "没有相关的文件": null,
+    "重命名文件名": null,
+    "请输入新的文件名称": null,
+    "删除文件": null,
+    "你确定要删除此文件吗?": null,
+    "文件 % 上传失败,%": null,
+    "文件 % 格式不正确,仅支持上传:%": null,
+    "状态": null,
+    "全部": null,
+    "级别": null,
+    "阶段": null,
+    "加载更多": null,
+    "没有相关内容": null,
+    "关注时间": null,
+    "完成时间": null,
+    "添加成员": null,
+    "成员角色": null,
+    "项目负责人": null,
+    "成员": null,
+    "移出成员": null,
+    "你确定要将此成员移出项目吗?": null,
+    "请输入昵称/用户名搜索": null,
+    "汇报标题": null,
+    "日报": null,
+    "周报": null,
+    "抄送人": null,
+    "保存": null,
+    "已发送": null,
+    "保存并发送": null,
+    "类型": null,
+    "日期": null,
+    "新建汇报": null,
+    "内容加载中.....": null,
+    "标题": null,
+    "创建日期": null,
+    "查看": null,
+    "编辑": null,
+    "发送": null,
+    "详细内容加载中.....": null,
+    "发送汇报": null,
+    "你确定要发送汇报吗?": null,
+    "删除汇报": null,
+    "你确定要删除汇报吗?": null,
+    "发送人": null,
+    "退出项目": null,
+    "你确定要退出此项目吗?": null,
+    "删除项目": null,
+    "你确定要删除此项目吗?": null,
+    "文档编辑": null,
+    "轻量级的团队在线协作": null,
+    "选中节点,按enter键添加子节点,tab键添加同级节点": null,
+    "知识库目录": null,
+    "文档历史版本": null,
+    "存档日期": null,
+    "操作员": null,
+    "还原": null,
+    "是否放弃修改的内容返回?": null,
+    "放弃保存": null,
+    "保存并返回": null,
+    "网络繁忙,保存失败!": null,
+    "敬请期待!": null,
+    "新建知识库": null,
+    "刷新": null,
+    "我的知识库": null,
+    "新增章节": null,
+    "修改标题": null,
+    "权限设置": null,
+    "知识库名称": null,
+    "文档标题": null,
+    "文档类型": null,
+    "文本": null,
+    "脑图": null,
+    "表格": null,
+    "流程图": null,
+    "目录": null,
+    "请填写知识库名称!": null,
+    "知识库名称长度至少2位!": null,
+    "请填写文档标题!": null,
+    "文档标题长度至少2位!": null,
+    "删除知识库": null,
+    "你确定要删除此知识库吗?": null,
+    "删除文档": null,
+    "你确定要删除此文档吗?": null,
+    "酷团队协作工具就从这里开始": null,
+    "立即登陆": null,
+    "待办四象限": null,
+    "项目管理": null,
+    "在线知识库": null,
+    "日程管理": null,
+    "待办四象限:突出事情优先级,帮助员工合理安排时间,提高工作效率。": null,
+    "项目管理:自定义项目看板,可视化任务安排。": null,
+    "在线知识库:在线流程图,在线文档,以及可视化的目录编排,文档管理无忧。": null,
+    "日程管理:可视化日程管理,快速搞定工作计划,了解工作宏观安排。": null,
+    "用户登录": null,
+    "密码": null,
+    "登录": null,
+    "请填写用户名!": null,
+    "用户名长度至少2位!": null,
+    "请填写登录密码!": null,
+    "密码错长度至少6位!": null,
+    "登录成功": null,
+    "项目面板": null,
+    "任务列表": null,
+    "文件列表": null,
+    "项目动态": null,
+    "设置": null,
+    "刷新列表": null,
+    "添加任务至": null,
+    "添加一个新列表": null,
+    "已归档任务": null,
+    "项目统计": null,
+    "成员管理": null,
+    "刷新成功!": null,
+    "重命名列表": null,
+    "请输入新的列表名称": null,
+    "注:将同时删除列表下所有任务": null,
+    "删除列表": null,
+    "你确定要删除此列表吗?": null,
+    "添加列表": null,
+    "请输入列表名称": null,
+    "新建项目": null,
+    "参与的项目": null,
+    "收藏的项目": null,
+    "我管理的项目": null,
+    "打开": null,
+    "收藏": null,
+    "移交项目": null,
+    "已完成数": null,
+    "未完成数": null,
+    "项目模板": null,
+    "项目流程": null,
+    "添加流程": null,
+    "添加": null,
+    "管理的项目": null,
+    "空白模板": null,
+    "软件开发": null,
+    "产品规划": null,
+    "前端开发": null,
+    "后端开发": null,
+    "测试": null,
+    "发布": null,
+    "其它": null,
+    "产品开发": null,
+    "产品计划": null,
+    "正在设计": null,
+    "正在研发": null,
+    "准备发布": null,
+    "发布成功": null,
+    "请填写项目名称!": null,
+    "项目名称至少2个字!": null,
+    "请输入流程名称,多个可用空格分隔。": null,
+    "重命名项目": null,
+    "请输入新的项目名称": null,
+    "团队成员": null,
+    "添加团队成员": null,
+    "添加后不可修改": null,
+    "登录密码": null,
+    "最少6位数": null,
+    "会员信息": null,
+    "删除团队成员": null,
+    "你确定要删除此团队成员吗?": null,
+    "我的待办": null,
+    "待办日程": null,
+    "已完成的任务": null,
+    "我关注的任务": null,
+    "周报/日报": null,
+    "在这里输入事项,回车即可保存": null,
+    "点击可快速添加需要处理的事项": null,
+    "超期": null,
+    "恭喜你!已完成了所有待办": null,
+    "我的汇报": null,
+    "收到的汇报": null,
+    "修改文档标题": null,
+    "新建文档": null
 }

+ 21 - 3
resources/assets/js/_modules/language/index.js

@@ -114,6 +114,24 @@ export default {
                 },
 
                 /**
+                 * 替换%遍历
+                 * @param text
+                 * @param objects
+                 */
+                replaceArgumentsLanguage(text, objects) {
+                    let j = 1;
+                    while (text.indexOf("%") !== -1) {
+                        if (typeof objects[j] === "object") {
+                            text = text.replace("%", "");
+                        } else {
+                            text = text.replace("%", objects[j]);
+                        }
+                        j++;
+                    }
+                    return text;
+                },
+
+                /**
                  * 显示语言
                  * @return {string}
                  */
@@ -124,10 +142,10 @@ export default {
                         if (typeof this.privateLanguageData[this.privateLanguageType] === "object") {
                             let temp = this.privateLanguageData[this.privateLanguageType][text];
                             if (temp === null) {
-                                return text;
+                                return this.replaceArgumentsLanguage(text, arguments);
                             }
                             if (typeof temp !== 'undefined') {
-                                return temp;
+                                return this.replaceArgumentsLanguage(temp, arguments);
                             }
                         }
                         //
@@ -143,7 +161,7 @@ export default {
                             //
                         }
                     }
-                    return text;
+                    return this.replaceArgumentsLanguage(text, arguments);
                 }
             }
         });

+ 1 - 1
resources/assets/js/common.js

@@ -1315,7 +1315,7 @@
             if (typeof params.success === 'undefined') params.success = () => { };
             if (typeof params.error === 'undefined') params.error = () => { };
             //
-            let loadText = "正在加载中.....";
+            let loadText = "数据加载中.....";
             let busyNetwork = "网络繁忙,请稍后再试!";
             if (typeof $A.app.$L === 'function') {
                 loadText = $A.app.$L(loadText);

+ 19 - 18
resources/assets/js/main/components/FullCalendar/components/body.vue

@@ -44,15 +44,15 @@
                 <div class="row" v-for="(time,index) in timeDivide">
                     <div class="left-info" v-if="tableType=='week'">
                         <div class="time-info first" v-if="index==0">
-                            <span class="center">上午</span>
+                            <span class="center">{{$L('上午')}}</span>
                         </div>
                         <div class="time-info" v-if="index==1">
                             <span class="top">12:00</span>
-                            <span class="center">下午</span>
+                            <span class="center">{{$L('下午')}}</span>
                         </div>
                         <div class="time-info" v-if="index==2">
                             <span class="top">18:00</span>
-                            <span class="center">晚上</span>
+                            <span class="center">{{$L('晚上')}}</span>
                         </div>
                     </div>
                     <div class="events-day" v-for="item in weekDate" v-if="weekDate.length"
@@ -113,10 +113,23 @@
             let _this = this
             document.addEventListener('click', function (e) {
                 _this.showCard = -1
-            })
+            });
             // 监听header组件事件
             bus.$on('changeWeekDays', res => {
-            })
+            });
+            this.timeDivide = [{
+                start: 0,
+                end: 12,
+                label: this.$L('上午')
+            }, {
+                start: 12,
+                end: 18,
+                label: this.$L('下午')
+            }, {
+                start: 18,
+                end: 23,
+                label: this.$L('晚上')
+            }];
         },
         data() {
             return {
@@ -130,19 +143,7 @@
                     left: 0
                 },
                 selectDay: {},
-                timeDivide: [{
-                    start: 0,
-                    end: 12,
-                    label: '上午'
-                }, {
-                    start: 12,
-                    end: 18,
-                    label: '下午'
-                }, {
-                    start: 18,
-                    end: 23,
-                    label: '晚上'
-                }],
+                timeDivide: [],
                 showCard: -1,
                 cardLeft: 0,
                 cardRight: 0,

+ 4 - 4
resources/assets/js/main/components/project/task/detail/detail.vue

@@ -240,13 +240,13 @@
             levelFormt(p) {
                 switch (parseInt(p)) {
                     case 1:
-                        return this.$L("重要且紧急 (P1)");
+                        return this.$L("重要且紧急") + " (P1)";
                     case 2:
-                        return this.$L("重要不紧急 (P2)");
+                        return this.$L("重要不紧急") + " (P2)";
                     case 3:
-                        return this.$L("紧急不重要 (P3)");
+                        return this.$L("紧急不重要") + " (P3)";
                     case 4:
-                        return this.$L("不重要不紧急 (P4)");
+                        return this.$L("不重要不紧急") + " (P4)";
                 }
             },
 

+ 4 - 2
resources/assets/js/main/components/project/todo/calendar.vue

@@ -1,7 +1,7 @@
 <template>
     <drawer-tabs-container>
         <div class="todo-calendar">
-            <FullCalendar :events="lists" :loading="loadIng>0" @eventClick="clickEvent" lang="zh" @change="changeDateRange"></FullCalendar>
+            <FullCalendar :events="lists" :loading="loadIng>0" @eventClick="clickEvent" :lang="lang" @change="changeDateRange"></FullCalendar>
         </div>
     </drawer-tabs-container>
 </template>
@@ -27,6 +27,8 @@
             return {
                 loadIng: 0,
 
+                lang: 'en',
+
                 lists: [],
 
                 startdate: '',
@@ -34,7 +36,7 @@
             }
         },
         created() {
-
+            this.lang = this.getLanguage() || 'en';
         },
         mounted() {
             $A.setOnTaskInfoListener('components/project/todo/calendar',(act, detail) => {

+ 1 - 1
resources/assets/js/main/components/report/receive.vue

@@ -227,7 +227,7 @@
                 $A.aAjax({
                     url: 'report/content?id=' + row.id,
                     error: () => {
-                        alert(this.$L(this.$L('网络繁忙,请稍后再试!')));
+                        alert(this.$L('网络繁忙,请稍后再试!'));
                         this.contentShow = false;
                     },
                     success: (res) => {

+ 1 - 1
resources/assets/js/main/pages/index.vue

@@ -377,7 +377,7 @@
                                 } else {
                                     this.$Modal.error({
                                         title: this.$L("温馨提示"),
-                                        content: this.$L(res.msg)
+                                        content: res.msg
                                     });
                                 }
                             }

+ 1 - 1
resources/assets/js/main/pages/todo.vue

@@ -31,7 +31,7 @@
                         <div class="todo-card">
                             <div class="todo-card-head" :class="['p' + index]">
                                 <i class="ft icon flag">&#xE753;</i>
-                                <div class="todo-card-title">{{$L(pTitle(index))}}</div>
+                                <div class="todo-card-title">{{pTitle(index)}}</div>
                                 <label class="todo-input-box" :class="{active: !!taskDatas[index].focus}" @click="()=>{$set(taskDatas[index],'focus',true)}">
                                     <div class="todo-input-ibox" @click.stop="">
                                         <Input v-model="taskDatas[index].title" class="todo-input-enter" :placeholder="$L('在这里输入事项,回车即可保存')" @on-enter="addTask(index)"></Input>