Browse Source

refactor and update i18n, to be continue

Ben Stone 4 years ago
parent
commit
581d902cd8
4 changed files with 167 additions and 88 deletions
  1. 6 0
      conf/lang/en-us.ini
  2. 55 1
      conf/lang/zh-cn.ini
  3. 29 10
      utils/pagination/pagination.go
  4. 77 77
      views/book/index.tpl

+ 6 - 0
conf/lang/en-us.ini

@@ -116,3 +116,9 @@ project_id = Project ID
 project_desc = Project description
 public = Public
 private = Private
+
+[page]
+first = first
+last = last
+prev = prev
+next = next

+ 55 - 1
conf/lang/zh-cn.ini

@@ -25,6 +25,11 @@ account_recovery = 找回密码
 new_password = 新密码
 confirm_password = 确认密码
 new_account = 用户注册
+setting = 设置
+save = 保存
+cancel = 取消
+create = 创建
+confirm_delete = 确定删除
 
 [message]
 keyword_placeholder = 请输入关键词...
@@ -65,6 +70,55 @@ failed_obtain_user_info = 获取身份信息失败
 dingtalk_auto_login_not_enable = 未开启钉钉自动登录功能
 failed_auto_login = 自动登录失败
 no_project = 暂无项目
+item_not_exist = 项目不存在或已删除
+doc_not_exist = 文档不存在或已删除
+unknown_exception = 未知异常
+no_data = 暂无数据
+project_must_belong_space = 每个项目必须归属一个项目空间,超级管理员可在后台管理和维护
+project_title_placeholder = 项目标题(不超过100字)
+project_title_tips = 项目标题不能超过100字符
+project_id_placeholder = 项目唯一标识(不超过50字)
+project_id_tips = 文档标识只能包含小写字母、数字,以及“-”、“.”和“_”符号.
+project_desc_placeholder = 描述信息不超过500个字符
+project_public_desc = (任何人都可以访问)
+project_private_desc = (只有参与者或使用令牌才能访问)
+project_cover_desc = 项目图片可在项目设置中修改
+confirm_delete_project = 确定删除项目吗?
+warning_delete_project = 删除项目后将无法找回。
+project_space_empty = 请选择项目空间
+project_title_empty = 项目标题不能为空
+project_id_empty = 项目标识不能为空
+project_id_length = 项目标识必须小于50字符
+import_file_empty = 请选择需要上传的文件
+file_type_placeholder = 请选择Zip文件
 
 [blog]
-author = 作者
+author = 作者
+project_list = 项目列表
+add_project = 添加项目
+import_project = 导入项目
+delete_project = 删除项目
+project_summary = 项目概要
+read = 阅读
+edit = 编辑
+delete = 删除
+copy = 复制
+view = 查看文档
+edit_doc = 编辑文档
+default_cover = 默认封面
+create_time = 创建时间
+creator = 创建者
+doc_amount = 文档数量
+project_role = 项目角色
+last_edit = 最后编辑
+project_title = 项目标题
+project_id = 项目标识
+project_desc = 项目描述
+public = 公开
+private = 私有
+
+[page]
+first = 首页
+last = 末页
+prev = 上一页
+next = 下一页

+ 29 - 10
utils/pagination/pagination.go

@@ -2,12 +2,14 @@ package pagination
 
 import (
 	"fmt"
+	"github.com/astaxie/beego"
+	"github.com/beego/i18n"
+	"html/template"
 	"math"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
-	"html/template"
 )
 
 //Pagination 分页器
@@ -19,7 +21,7 @@ type Pagination struct {
 }
 
 //NewPagination 新建分页器
-func NewPagination(req *http.Request, total int, pernum int,baseUrl string) *Pagination {
+func NewPagination(req *http.Request, total int, pernum int, baseUrl string) *Pagination {
 	return &Pagination{
 		Request: req,
 		Total:   total,
@@ -49,6 +51,8 @@ func (p *Pagination) Pages() string {
 	//计算总页数
 	var totalPageNum = int(math.Ceil(float64(p.Total) / float64(p.Pernum)))
 
+	lang := p.getLang()
+
 	//首页链接
 	var firstLink string
 	//上一页链接
@@ -62,20 +66,20 @@ func (p *Pagination) Pages() string {
 
 	//首页和上一页链接
 	if pagenum > 1 {
-		firstLink = fmt.Sprintf(`<li><a href="%s">首页</a></li>`, p.pageURL("1"))
-		prevLink = fmt.Sprintf(`<li><a href="%s">上一页</a></li>`, p.pageURL(strconv.Itoa(pagenum-1)))
+		firstLink = fmt.Sprintf(`<li><a href="%s">%s</a></li>`, p.pageURL("1"), i18n.Tr(lang, "page.first"))
+		prevLink = fmt.Sprintf(`<li><a href="%s">%s</a></li>`, p.pageURL(strconv.Itoa(pagenum-1)), i18n.Tr(lang, "page.prev"))
 	} else {
-		firstLink = `<li class="disabled"><a href="#">首页</a></li>`
-		prevLink = `<li class="disabled"><a href="#">上一页</a></li>`
+		firstLink = fmt.Sprintf(`<li class="disabled"><a href="#">%s</a></li>`, i18n.Tr(lang, "page.first"))
+		prevLink = fmt.Sprintf(`<li class="disabled"><a href="#">%s</a></li>`, i18n.Tr(lang, "page.prev"))
 	}
 
 	//末页和下一页
 	if pagenum < totalPageNum {
-		lastLink = fmt.Sprintf(`<li><a href="%s">末页</a></li>`, p.pageURL(strconv.Itoa(totalPageNum)))
-		nextLink = fmt.Sprintf(`<li><a href="%s">下一页</a></li>`, p.pageURL(strconv.Itoa(pagenum+1)))
+		lastLink = fmt.Sprintf(`<li><a href="%s">%s</a></li>`, p.pageURL(strconv.Itoa(totalPageNum)), i18n.Tr(lang, "page.last"))
+		nextLink = fmt.Sprintf(`<li><a href="%s">%s</a></li>`, p.pageURL(strconv.Itoa(pagenum+1)), i18n.Tr(lang, "page.next"))
 	} else {
-		lastLink = `<li class="disabled"><a href="#">末页</a></li>`
-		nextLink = `<li class="disabled"><a href="#">下一页</a></li>`
+		lastLink = fmt.Sprintf(`<li class="disabled"><a href="#">%s</a></li>`, i18n.Tr(lang, "page.last"))
+		nextLink = fmt.Sprintf(`<li class="disabled"><a href="#">%s</a></li>`, i18n.Tr(lang, "page.next"))
 	}
 
 	//生成中间页码链接
@@ -112,3 +116,18 @@ func (p *Pagination) pageURL(page string) string {
 	return u.String()
 }
 
+func (p *Pagination) getLang() string {
+	lang := beego.AppConfig.String("default_lang")
+	ulang := p.Request.FormValue("lang")
+	if len(ulang) == 0 {
+		clang, err := p.Request.Cookie("lang")
+		if err != nil {
+			return lang
+		}
+		ulang = clang.Value
+	}
+	if !i18n.IsExist(ulang) {
+		return lang
+	}
+	return ulang
+}

+ 77 - 77
views/book/index.tpl

@@ -5,7 +5,7 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width, initial-scale=1">
 
-    <title>我的项目 - Powered by MinDoc</title>
+    <title>{{i18n $.Lang "common.my_project"}} - Powered by MinDoc</title>
 
     <!-- Bootstrap -->
     <link href="{{cdncss "/static/bootstrap/css/bootstrap.min.css"}}" rel="stylesheet" type="text/css">
@@ -28,30 +28,30 @@
         <div class="row">
             <div class="page-left">
                 <ul class="menu">
-                    <li {{if eq .ControllerName "BookController"}}class="active"{{end}}><a href="{{urlfor "BookController.Index"}}" class="item"><i class="fa fa-sitemap" aria-hidden="true"></i> 我的项目</a> </li>
-                    <li {{if eq .ControllerName "BlogController"}}class="active"{{end}}><a href="{{urlfor "BlogController.ManageList"}}" class="item"><i class="fa fa-file" aria-hidden="true"></i> 我的文章</a> </li>
+                    <li {{if eq .ControllerName "BookController"}}class="active"{{end}}><a href="{{urlfor "BookController.Index"}}" class="item"><i class="fa fa-sitemap" aria-hidden="true"></i> {{i18n $.Lang "common.my_project"}}</a> </li>
+                    <li {{if eq .ControllerName "BlogController"}}class="active"{{end}}><a href="{{urlfor "BlogController.ManageList"}}" class="item"><i class="fa fa-file" aria-hidden="true"></i> {{i18n $.Lang "common.my_blog"}}</a> </li>
                 </ul>
             </div>
             <div class="page-right">
                 <div class="m-box">
                     <div class="box-head">
-                        <strong class="box-title">项目列表</strong>
+                        <strong class="box-title">{{i18n $.Lang "blog.project_list"}}</strong>
                         &nbsp;
-                        <button type="button" data-toggle="modal" data-target="#addBookDialogModal" class="btn btn-success btn-sm pull-right">添加项目</button>
-                        <button type="button" data-toggle="modal" data-target="#importBookDialogModal" class="btn btn-primary btn-sm pull-right" style="margin-right: 5px;">导入项目</button>
+                        <button type="button" data-toggle="modal" data-target="#addBookDialogModal" class="btn btn-success btn-sm pull-right">{{i18n $.Lang "blog.add_project"}}</button>
+                        <button type="button" data-toggle="modal" data-target="#importBookDialogModal" class="btn btn-primary btn-sm pull-right" style="margin-right: 5px;">{{i18n $.Lang "blog.import_project"}}</button>
                     </div>
                 </div>
                 <div class="box-body" id="bookList">
                     <div class="book-list">
                         <template v-if="lists.length <= 0">
-                        <div class="text-center">暂无数据</div>
+                        <div class="text-center">{{i18n $.Lang "message.no_data"}}</div>
                         </template>
                         <template v-else>
 
                         <div class="list-item" v-for="item in lists">
                             <div class="book-title">
                                 <div class="pull-left">
-                                    <a :href="'{{.BaseUrl}}/book/' + item.identify + '/dashboard'" title="项目概要" data-toggle="tooltip">
+                                    <a :href="'{{.BaseUrl}}/book/' + item.identify + '/dashboard'" title="{{i18n $.Lang "blog.project_summary"}}" data-toggle="tooltip">
                                        <template v-if="item.privately_owned == 0">
                                            <i class="fa fa-unlock" aria-hidden="true"></i>
                                        </template>
@@ -63,28 +63,28 @@
                                 </div>
                                 <div class="pull-right">
                                     <div class="btn-group">
-                                        <a  :href="'{{.BaseUrl}}/book/' + item.identify + '/dashboard'" class="btn btn-default">设置</a>
+                                        <a  :href="'{{.BaseUrl}}/book/' + item.identify + '/dashboard'" class="btn btn-default">{{i18n $.Lang "common.setting"}}</a>
 
                                         <a href="javascript:;" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                             <span class="caret"></span>
                                             <span class="sr-only">Toggle Dropdown</span>
                                         </a>
                                         <ul class="dropdown-menu">
-                                            <li><a :href="'{{urlfor "DocumentController.Index" ":key" ""}}' + item.identify" target="_blank">阅读</a></li>
+                                            <li><a :href="'{{urlfor "DocumentController.Index" ":key" ""}}' + item.identify" target="_blank">{{i18n $.Lang "blog.read"}}</a></li>
                                             <template v-if="item.role_id != 3">
-                                            <li><a :href="'{{.BaseUrl}}/api/' + item.identify + '/edit'" target="_blank">编辑</a></li>
+                                            <li><a :href="'{{.BaseUrl}}/api/' + item.identify + '/edit'" target="_blank">{{i18n $.Lang "blog.edit"}}</a></li>
                                             </template>
                                             <template v-if="item.role_id == 0">
-                                            <li><a :href="'javascript:deleteBook(\''+item.identify+'\');'">删除</a></li>
-                                            <li><a :href="'javascript:copyBook(\''+item.identify+'\');'">复制</a></li>
+                                            <li><a :href="'javascript:deleteBook(\''+item.identify+'\');'">{{i18n $.Lang "blog.delete"}}</a></li>
+                                            <li><a :href="'javascript:copyBook(\''+item.identify+'\');'">{{i18n $.Lang "blog.copy"}}</a></li>
                                             </template>
                                         </ul>
 
                                     </div>
 
-                                    {{/*<a :href="'{{urlfor "DocumentController.Index" ":key" ""}}' + item.identify" title="查看文档" data-toggle="tooltip" target="_blank"><i class="fa fa-eye"></i> 查看文档</a>*/}}
+                                    {{/*<a :href="'{{urlfor "DocumentController.Index" ":key" ""}}' + item.identify" title="{{i18n $.Lang "blog.view"}}" data-toggle="tooltip" target="_blank"><i class="fa fa-eye"></i> {{i18n $.Lang "blog.view"}}</a>*/}}
                                     {{/*<template v-if="item.role_id != 3">*/}}
-                                        {{/*<a :href="'/api/' + item.identify + '/edit'" title="编辑文档" data-toggle="tooltip" target="_blank"><i class="fa fa-edit" aria-hidden="true"></i> 编辑文档</a>*/}}
+                                        {{/*<a :href="'/api/' + item.identify + '/edit'" title="{{i18n $.Lang "blog.edit_doc"}}" data-toggle="tooltip" target="_blank"><i class="fa fa-edit" aria-hidden="true"></i> {{i18n $.Lang "blog.edit_doc"}}</a>*/}}
                                     {{/*</template>*/}}
                                 </div>
                                 <div class="clearfix"></div>
@@ -94,21 +94,21 @@
                                         &nbsp;
                                     </template>
                                     <template v-else="">
-                                        <a :href="'{{.BaseUrl}}/book/' + item.identify + '/dashboard'" title="项目概要" style="font-size: 12px;">
+                                        <a :href="'{{.BaseUrl}}/book/' + item.identify + '/dashboard'" title="{{i18n $.Lang "blog.project_summary"}}" style="font-size: 12px;">
                                         ${item.description}
                                         </a>
                                     </template>
                             </div>
                             <div class="info">
-                                <span title="创建时间" data-toggle="tooltip" data-placement="bottom"><i class="fa fa-clock-o"></i>
+                                <span title="{{i18n $.Lang "blog.create_time"}}" data-toggle="tooltip" data-placement="bottom"><i class="fa fa-clock-o"></i>
                                     ${(new Date(item.create_time)).format("yyyy-MM-dd hh:mm:ss")}
 
                                 </span>
-                                <span title="创建者" data-toggle="tooltip" data-placement="bottom"><i class="fa fa-user"></i> ${item.create_name}</span>
-                                <span title="文档数量" data-toggle="tooltip" data-placement="bottom"><i class="fa fa-pie-chart"></i> ${item.doc_count}</span>
-                                <span title="项目角色" data-toggle="tooltip" data-placement="bottom"><i class="fa fa-user-secret"></i> ${item.role_name}</span>
+                                <span title="{{i18n $.Lang "blog.creator"}}" data-toggle="tooltip" data-placement="bottom"><i class="fa fa-user"></i> ${item.create_name}</span>
+                                <span title="{{i18n $.Lang "blog.doc_amount"}}" data-toggle="tooltip" data-placement="bottom"><i class="fa fa-pie-chart"></i> ${item.doc_count}</span>
+                                <span title="{{i18n $.Lang "blog.project_role"}}" data-toggle="tooltip" data-placement="bottom"><i class="fa fa-user-secret"></i> ${item.role_name}</span>
                                 <template v-if="item.last_modify_text !== ''">
-                                    <span title="最后编辑" data-toggle="tooltip" data-placement="bottom"><i class="fa fa-pencil"></i> 最后编辑: ${item.last_modify_text}</span>
+                                    <span title="{{i18n $.Lang "blog.last_edit"}}" data-toggle="tooltip" data-placement="bottom"><i class="fa fa-pencil"></i> {{i18n $.Lang "blog.last_edit"}}: ${item.last_modify_text}</span>
                                 </template>
 
                             </div>
@@ -133,49 +133,49 @@
         <div class="modal-content">
             <div class="modal-header">
                 <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
-                <h4 class="modal-title" id="myModalLabel">添加项目</h4>
+                <h4 class="modal-title" id="myModalLabel">{{i18n $.Lang "blog.add_project"}}</h4>
             </div>
             <div class="modal-body">
                 <div class="form-group">
                     <div class="pull-left" style="width: 620px">
                         <div class="form-group required">
-                            <label class="text-label col-sm-2">项目空间</label>
+                            <label class="text-label col-sm-2">{{i18n $.Lang "common.project_space"}}</label>
                             <div class="col-sm-10">
                                 <select class="js-data-example-ajax-add form-control" multiple="multiple" name="itemId" id="itemId">
                                 {{if .Item}}<option value="{{.Item.ItemId}}" selected>{{.Item.ItemName}}</option> {{end}}
                                 </select>
-                                <p class="text">每个项目必须归属一个项目空间,超级管理员可在后台管理和维护</p>
+                                <p class="text">{{i18n $.Lang "message.project_must_belong_space"}}</p>
                             </div>
                             <div class="clearfix"></div>
                         </div>
                         <div class="form-group required">
-                            <label class="text-label col-sm-2">项目标题</label>
+                            <label class="text-label col-sm-2">{{i18n $.Lang "blog.project_title"}}</label>
                             <div class="col-sm-10">
-                                <input type="text" class="form-control" placeholder="标题(不超过100字)" name="book_name" id="bookName">
-                                <p class="text">项目名称不能超过100字符</p>
+                                <input type="text" class="form-control" placeholder="{{i18n $.Lang "message.project_title_placeholder"}}" name="book_name" id="bookName">
+                                <p class="text">{{i18n $.Lang "message.project_title_tips"}}</p>
                             </div>
                             <div class="clearfix"></div>
                         </div>
                         <div class="form-group required">
-                           <label class="text-label col-sm-2">项目标识</label>
+                           <label class="text-label col-sm-2">{{i18n $.Lang "blog.project_id"}}</label>
                             <div class="col-sm-10">
-                                <input type="text" class="form-control" placeholder="项目唯一标识(不超过50字)" name="identify" id="identify">
-                                <p class="text">文档标识只能包含小写字母、数字,以及“-”、“.”和“_”符号.</p>
+                                <input type="text" class="form-control" placeholder="{{i18n $.Lang "message.project_id_placeholder"}}" name="identify" id="identify">
+                                <p class="text">{{i18n $.Lang "message.project_id_tips"}}</p>
                             </div>
                             <div class="clearfix"></div>
                         </div>
                         <div class="form-group">
-                            <textarea name="description" id="description" class="form-control" placeholder="描述信息不超过500个字符" style="height: 90px;"></textarea>
+                            <textarea name="description" id="description" class="form-control" placeholder="{{i18n $.Lang "message.project_desc_placeholder"}}" style="height: 90px;"></textarea>
                         </div>
                         <div class="form-group">
-                            <div class="col-lg-6">
+                            <div class="col-lg-4">
                                 <label>
-                                    <input type="radio" name="privately_owned" value="0" checked> 公开<span class="text">(任何人都可以访问)</span>
+                                    <input type="radio" name="privately_owned" value="0" checked> {{i18n $.Lang "blog.public"}}<span class="text">{{i18n $.Lang "message.project_public_desc"}}</span>
                                 </label>
                             </div>
-                            <div class="col-lg-6">
+                            <div class="col-lg-8">
                                 <label>
-                                    <input type="radio" name="privately_owned" value="1"> 私有<span class="text">(只要参与者或使用令牌才能访问)</span>
+                                    <input type="radio" name="privately_owned" value="1"> {{i18n $.Lang "blog.private"}}<span class="text">{{i18n $.Lang "message.project_private_desc"}}</span>
                                 </label>
                             </div>
                             <div class="clearfix"></div>
@@ -183,7 +183,7 @@
                     </div>
                     <div class="pull-right text-center" style="width: 235px;">
                         <canvas id="bookCover" height="230px" width="170px"><img src="{{cdnimg "/static/images/book.jpg"}}"> </canvas>
-                        <p class="text">项目图片可在项目设置中修改</p>
+                        <p class="text">{{i18n $.Lang "message.project_cover_desc"}}</p>
                     </div>
                 </div>
 
@@ -192,8 +192,8 @@
             </div>
             <div class="modal-footer">
                 <span id="form-error-message"></span>
-                <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
-                <button type="button" class="btn btn-success" id="btnSaveDocument" data-loading-text="保存中...">保存</button>
+                <button type="button" class="btn btn-default" data-dismiss="modal">{{i18n $.Lang "common.cancel"}}</button>
+                <button type="button" class="btn btn-success" id="btnSaveDocument" data-loading-text="{{i18n $.Lang "common.processing"}}">{{i18n $.Lang "common.save"}}</button>
             </div>
         </div>
         </form>
@@ -207,41 +207,41 @@
             <div class="modal-content">
                 <div class="modal-header">
                     <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
-                    <h4 class="modal-title">导入项目</h4>
+                    <h4 class="modal-title">{{i18n $.Lang "blog.import_project"}}</h4>
                 </div>
                 <div class="modal-body">
                     <div class="form-group">
                         <div class="form-group required">
-                            <label class="text-label">项目空间</label>
+                            <label class="text-label">{{i18n $.Lang "common.project_space"}}</label>
                             <select class="js-data-example-ajax-import form-control" multiple="multiple" name="itemId">
                                 {{if .Item}}<option value="{{.Item.ItemId}}" selected>{{.Item.ItemName}}</option> {{end}}
                             </select>
-                            <p class="text">每个项目必须归属一个项目空间,超级管理员可在后台管理和维护</p>
+                            <p class="text">{{i18n $.Lang "message.project_must_belong_space"}}</p>
                         </div>
                         <div class="form-group required">
-                            <label class="text-label">项目标题</label>
-                            <input type="text" class="form-control" placeholder="项目标题(不超过100字)" name="book_name" maxlength="100" value="">
-                            <p class="text">项目名称不能超过100字符</p>
+                            <label class="text-label">{{i18n $.Lang "blog.project_title"}}</label>
+                            <input type="text" class="form-control" placeholder="{{i18n $.Lang "blog.project_title_placeholder"}}" name="book_name" maxlength="100" value="">
+                            <p class="text">{{i18n $.Lang "blog.project_title_tips"}}</p>
                         </div>
                         <div class="form-group required">
-                            <label class="text-label">项目标识</label>
-                            <input type="text" class="form-control"  placeholder="项目唯一标识(不超过50字)" name="identify" value="">
+                            <label class="text-label">{{i18n $.Lang "blog.project_id"}}</label>
+                            <input type="text" class="form-control"  placeholder="{{i18n $.Lang "blog.project_id_placeholder"}}" name="identify" value="">
                             <div class="clearfix"></div>
-                            <p class="text">文档标识只能包含小写字母、数字,以及“-”、“.”和“_”符号.</p>
+                            <p class="text">{{i18n $.Lang "blog.project_id_tips"}}</p>
                         </div>
                         <div class="form-group">
-                            <label class="text-label">项目描述</label>
-                            <textarea name="description" id="description" class="form-control" placeholder="描述信息不超过500个字符" style="height: 90px;"></textarea>
+                            <label class="text-label">{{i18n $.Lang "blog.project_desc"}}</label>
+                            <textarea name="description" id="description" class="form-control" placeholder="{{i18n $.Lang "message.project_desc_placeholder"}}" style="height: 90px;"></textarea>
                         </div>
                         <div class="form-group">
-                            <div class="col-lg-6">
+                            <div class="col-lg-4">
                                 <label>
-                                    <input type="radio" name="privately_owned" value="0" checked> 公开<span class="text">(任何人都可以访问)</span>
+                                    <input type="radio" name="privately_owned" value="0" checked> {{i18n $.Lang "blog.public"}}<span class="text">{{i18n $.Lang "message.project_public_desc"}}</span>
                                 </label>
                             </div>
-                            <div class="col-lg-6">
+                            <div class="col-lg-8">
                                 <label>
-                                    <input type="radio" name="privately_owned" value="1"> 私有<span class="text">(只要参与者或使用令牌才能访问)</span>
+                                    <input type="radio" name="privately_owned" value="1"> {{i18n $.Lang "blog.private"}}<span class="text">{{i18n $.Lang "message.project_private_desc"}}</span>
                                 </label>
                             </div>
                             <div class="clearfix"></div>
@@ -257,8 +257,8 @@
                 </div>
                 <div class="modal-footer">
                     <span id="import-book-form-error-message" style="background-color: #ffffff;border: none;margin: 0;padding: 0;"></span>
-                    <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
-                    <button type="button" class="btn btn-success" id="btnImportBook" data-loading-text="创建中...">创建</button>
+                    <button type="button" class="btn btn-default" data-dismiss="modal">{{i18n $.Lang "common.cancel"}}</button>
+                    <button type="button" class="btn btn-success" id="btnImportBook" data-loading-text="{{i18n $.Lang "common.processing"}}">{{i18n $.Lang "common.create"}}</button>
                 </div>
             </div>
         </form>
@@ -273,17 +273,17 @@
             <div class="modal-content">
                 <div class="modal-header">
                     <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
-                    <h4 class="modal-title">删除项目</h4>
+                    <h4 class="modal-title">{{i18n $.Lang "blog.delete_project"}}</h4>
                 </div>
                 <div class="modal-body">
-                    <span style="font-size: 14px;font-weight: 400;">确定删除项目吗?</span>
+                    <span style="font-size: 14px;font-weight: 400;">{{i18n $.Lang "message.confirm_delete_project"}}</span>
                     <p></p>
-                    <p class="text error-message">删除项目后将无法找回。</p>
+                    <p class="text error-message">{{i18n $.Lang "message.warning_delete_project"}}</p>
                 </div>
                 <div class="modal-footer">
                     <span id="form-error-message2" class="error-message"></span>
-                    <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
-                    <button type="submit" id="btnDeleteBook" class="btn btn-primary" data-loading-text="删除中...">确定删除</button>
+                    <button type="button" class="btn btn-default" data-dismiss="modal">{{i18n $.Lang "common.cancel"}}</button>
+                    <button type="submit" id="btnDeleteBook" class="btn btn-primary" data-loading-text="{{i18n $.Lang "common.processing"}}">{{i18n $.Lang "common.confirm_delete"}}</button>
                 </div>
             </div>
         </form>
@@ -415,7 +415,7 @@
             },
             error : function () {
                 layer.close(index);
-                layer.msg('服务器异常');
+                layer.msg('{{i18n $.Lang "message.system_error"}}');
             }
         });
     }
@@ -426,7 +426,7 @@
          * */
         $("#addBookDialogModal").on("show.bs.modal",function () {
             window.bookDialogModal = $(this).find("#addBookDialogForm").html();
-            drawBookCover("bookCover","默认封面");
+            drawBookCover("bookCover","{{i18n $.Lang "blog.default_cover"}}");
             $('.js-data-example-ajax-add').select2({
                 language: "zh-CN",
                 minimumInputLength : 1,
@@ -466,7 +466,7 @@
                 'validateInitialCount': true,
                 "language" : "zh",
                 'allowedFileExtensions': ['zip'],
-                'msgPlaceholder' : '请选择Zip文件',
+                'msgPlaceholder' : '{{i18n $.Lang "message.file_type_placeholder"}}',
                 'elErrorContainer' : "#import-book-form-error-message",
                 'uploadExtraData' : function () {
                     var book = {};
@@ -513,27 +513,27 @@
 
             var itemId = $("#itemId").val();
             if (itemId <= 0) {
-                return showError("请选择项目空间")
+                return showError("{{i18n $.Lang "message.project_space_empty"}}")
             }
             var bookName = $.trim($("#bookName").val());
             if (bookName === "") {
-                return showError("项目标题不能为空")
+                return showError("{{i18n $.Lang "message.project_title_empty"}}")
             }
             if (bookName.length > 100) {
-                return showError("项目标题必须小于100字符");
+                return showError("{{i18n $.Lang "message.project_title_tips"}}");
             }
 
             var identify = $.trim($("#identify").val());
             if (identify === "") {
-                return showError("项目标识不能为空");
+                return showError("{{i18n $.Lang "message.project_id_empty"}}");
             }
             if (identify.length > 50) {
-                return showError("项目标识必须小于50字符");
+                return showError("{{i18n $.Lang "message.project_id_length"}}");
             }
             var description = $.trim($("#description").val());
 
             if (description.length > 500) {
-                return showError("描述信息不超过500个字符");
+                return showError("{{i18n $.Lang "message.project_desc_placeholder"}}");
             }
 
             $this.button("loading");
@@ -567,7 +567,7 @@
                 $this.button("reset");
             }).error(function () {
                 $this.button("reset");
-                return showError("服务器异常");
+                return showError("{{i18n $.Lang "message.system_error"}}");
             });
             return false;
         }).on("blur","#bookName",function () {
@@ -581,30 +581,30 @@
 
             var itemId = $then.find("input[name='itemId']").val();
             if (itemId <= 0) {
-                return showError("请选择项目空间")
+                return showError("{{i18n $.Lang "message.project_space_empty"}}")
             }
 
             var bookName = $.trim($then.find("input[name='book_name']").val());
 
             if (bookName === "") {
-                return showError("项目标题不能为空","#import-book-form-error-message");
+                return showError("{{i18n $.Lang "message.project_title_empty"}}","#import-book-form-error-message");
             }
             if (bookName.length > 100) {
-                return showError("项目标题必须小于100字符","#import-book-form-error-message");
+                return showError("{{i18n $.Lang "message.project_title_tips"}}","#import-book-form-error-message");
             }
 
             var identify = $.trim($then.find("input[name='identify']").val());
             if (identify === "") {
-                return showError("项目标识不能为空","#import-book-form-error-message");
+                return showError("{{i18n $.Lang "message.project_id_empty"}}","#import-book-form-error-message");
             }
             var description = $.trim($then.find('textarea[name="description"]').val());
             if (description.length > 500) {
-                return showError("描述信息不超过500个字符","#import-book-form-error-message");
+                return showError("{{i18n $.Lang "message.project_decs_placeholder"}}","#import-book-form-error-message");
             }
             var filesCount = $('#import-book-upload').fileinput('getFilesCount');
 
             if (filesCount <= 0) {
-                return showError("请选择需要上传的文件","#import-book-form-error-message");
+                return showError("{{i18n $.Lang "message.import_file_empty"}}","#import-book-form-error-message");
             }
             //$("#importBookDialogForm").submit();
             $("#btnImportBook").button("loading");
@@ -636,7 +636,7 @@
                 $("#btnDeleteBook").button("reset");
             },
             error : function () {
-                showError("服务器异常","#form-error-message2");
+                showError("{{i18n $.Lang "message.system_error"}}","#form-error-message2");
                 $("#btnDeleteBook").button("reset");
             }
         });