Rails Bootstrap Markdown 如何中文本地化

chengkai1853 · 2015年11月17日 · 最后由 chengkai1853 回复于 2015年11月18日 · 4033 次阅读

我开始参照 ruby-china 写 markdown 的评论框,但是后来发现 bootstrap-markdown 已经封装好了,而且功能齐全,于是改用了它。但是在使用的时候遇到了语文,它默认是英文。看它的文档doc,本地化很简单,只需要如下一行代码就能搞定:

添加了

(function ($) {
  $.fn.markdown.messages.zh = {
    'Bold': "粗体",
    'Italic': "斜体",
    'Heading': "标题",
    'URL/Link': "链接",
    'Image': "图片",
    'List': "列表",
    'Unordered List': "无序列表",
    'Ordered List': "有序列表",
    'Code': "代码",
    'Quote': "引用",
    'Preview': "预览",
    'strong text': "粗体",
    'emphasized text': "强调",
    'heading text': "标题",
    'enter link description here': "输入链接说明",
    'Insert Hyperlink': "URL地址",
    'enter image description here': "输入图片说明",
    'Insert Image Hyperlink': "图片URL地址",
    'enter image title here': "在这里输入图片标题",
    'list text here': "这里是列表文本",
    'code text here': "这里输入代码",
    'quote here': "这里输入引用文本"


  };
}(jQuery));

然后再添加如下代码就 ok 了

$(document).ready(function(){
  $("[data-provide=markdown]").markdown({language: 'zh'})
})

但是完全不起作用,跟踪了半天的 js 代码也没找到具体原因。最后跟踪到了这里:

$.fn.markdown = function (option) {
  return this.each(function () {
    var $this = $(this)
      , data = $this.data('markdown')
      , options = typeof option == 'object' && option;
    if (!data) $this.data('markdown', (data = new Markdown(this, options)))
  })
};

按照以上写法,到这里

if (!data) $this.data('markdown', (data = new Markdown(this, options)))

由于 data 存在,就不会继续执行了。我怀疑是文档有问题或者是自己用法有问题,请用过的大神指点一下。

doc 里面用的是

$.fn.markdown.messages['fr'] = {

你用的是

$.fn.markdown.messages.zh = {

还是有点不一样吧。

#1 楼 @dc2000 fr 是法语,我用的是中文呢,所以是 zh

#2 楼 @chengkai1853 你把代码改成这样

$.fn.markdown.messages['zh'] = {

再试一试看看。

#3 楼 @dc2000 试了,和这个没有关系。我再跟踪他的 javascript 的时候,发现 fn.markdown.messages.zh 的值是正常传入了的,但是在以下哪行代码的时候,会产生问题。data 是已经存在的。就不会执行那行代码了。不清楚是我跟踪错了还是这个用法用错了。

if (!data) $this.data('markdown', (data = new Markdown(this, options)))
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>

   <link href="css/bootstrap.min.css" rel="stylesheet" media="screen">  
   <link href="css/bootstrap-markdown.min.css" rel="stylesheet" media="screen">
   <script type="text/javascript" src="js/jquery-2.1.4.min.js"></script>
   <script type="text/javascript" src="js/bootstrap.min.js"></script> 
   <script type="text/javascript" src="js/bootstrap-markdown.js"></script>   

</head>
<body>
 <form>
    <input name="title" type="text" placeholder="Title?" />
    <textarea id="testlang" name="content" data-provide="markdown" rows="10"></textarea>
    <label class="checkbox">
      <input name="publish" type="checkbox"> Publish
    </label>
    <hr/>
    <button type="submit" class="btn">Submit</button>
  </form>   
<script type="text/javascript">

(function ($) {
  $.fn.markdown.messages.zh = {
    'Bold': "粗体",
    'Italic': "斜体",
    'Heading': "标题",
    'URL/Link': "链接",
    'Image': "图片",
    'List': "列表",
    'Unordered List': "无序列表",
    'Ordered List': "有序列表",
    'Code': "代码",
    'Quote': "引用",
    'Preview': "预览",
    'strong text': "粗体",
    'emphasized text': "强调",
    'heading text': "标题",
    'enter link description here': "输入链接说明",
    'Insert Hyperlink': "URL地址",
    'enter image description here': "输入图片说明",
    'Insert Image Hyperlink': "图片URL地址",
    'enter image title here': "在这里输入图片标题",
    'list text here': "这里是列表文本",
    'code text here': "这里输入代码",
    'quote here': "这里输入引用文本"
  };

}(jQuery));
 $("#testlang").markdown({language:'zh'});
</script>
</body> 
</html>

上面是我做的测试例子,可以转换中文,你看看是不是少了什么文件,比如 css,js 脚本什么的。

#5 楼 @dc2000 问题解决了,真的非常感谢,原来是我没理解 javascript 在 head 和 body 的区别,我该重新看看 Asset Pipeline 了

head 部分中的脚本:需调用才执行的脚本或事件触发执行的脚本放在 HTML 的 head 部分中。当你把脚本放在 head 部分中时,可以保证脚本在任何调用之前被加载。
body 部分中的脚本:当页面被加载时执行的脚本放在 HTML 的 body 部分。放在 body 部分的脚本通常被用来生成页面的内容

需要 登录 后方可回复, 如果你还没有账号请 注册新账号