`
pilipala
  • 浏览: 8436 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Gibberish 本地化插件学习

阅读更多
Gibberish是基于rails框架下的一个语言本地化插件, beast项目使用它进行语言本地化。

Gibberish代码不多,也很容易理解,但是很好地实现了语言本地化的功能,读了以后感觉有些收获就写了这篇文档。

一、安装与配置

在rails项目下, 执行
ruby script/plugin install svn://errtheblog.com/svn/plugins/gibberish


在rails项目下,建立 lang 目录,并创建相应语言文件,例如:

en.yml 为英语文件,在其中输入:
login: Login

zh.yml 为中文文件,在其中输入:
login: 登录

这样即可,如果有新的需要本地化字符串,也按同样格式写入两个文件即可。


二、使用方法

通过运行  ruby script/console , 查看一下Gibberish的使用方法。
引用

#初始化加载
>> Gibberish.load_languages!
=> [:zh, :en]

#显示 login
>>  "login"[:login]
=> "Login"

#更改语言为zh

>>  Gibberish.current_language = :zh
=> :zh

>>  "login"[:login]
=> "登录"


稍微复杂的例子是可以写成如下格式

引用
en.yml:
welcome: "Welcome {name}!"

zh:yml:
welcome: "{name},欢迎来访! "

执行:
"welcome"[:welcome,"Mike"]


在不同语言设置时,会显示:

引用
Welcome Mike!

Mike,欢迎来访!


分享到:
评论
4 楼 pure 2007-11-20  
          很不错!
3 楼 macoo 2007-07-29  
好东西,谢谢楼主分享!
2 楼 pilipala 2007-07-28  
四、使用细节

  已经读过源码对一些使用细节有了更清楚的了解:

  1、可以通过Gibberish::Localize#add_reserved_key添加保留字,如:
引用
>>Gibberish.add_reserved_key(:aaa, :bbb)
>> "bbb"[:bbb]
=> nil


  2、对于“string”[:string] 如果未找到定义的,会返回"string"

  3、“string”[] 相当于 “string”[:string]

  4、 类似welcome: "Welcome {name}!" 这种功能是通过下面代码实现的

	string.gsub(/\{\w+\}/) { args.shift }


所以,它只是把大括号里面的内容,按[]中的参数顺序替换而已。

比如,语言文件定义如下:

引用
hello: hi,{name}! how are you, {name}? are you fine, {name}?


在调用时,应该是
引用
“hello”[:hello, "Mike", "Mike", "Mike"]

而不是
引用
“hello”[:hello, "Mike"]


另外,感觉每次更换语言,还需要set current_language 不太好。
因为,有时不同的用户会选用不同的语言,他们如果同时使用,就比较麻烦。
类似这样的调用似乎更好

引用
"welcome"[:zh, "Mike"]


当然,实现上述功能也非常容易。

五、回顾

ruby的Mixin功能强大,可以很容易在一个Class中,加入另一个module的功能,简单这样即可:
class ClassA
	include ModuleA
end


而ruby还有永不关闭的类的说法,我们可以在任何时候修改以往的类库来实现想要的功能。
在这时通常会需要重载以往已经实现的函数,而在Gibberish中就重载了String#[].

在这种情况下通常都有很固定的模式:

  1、def self.included(base) 该函数会在module被别的类Mixin时候执行。

  2、通过 base.class_eval 执行动态代码

  3、使用  alias_method_chain :brackets, :translation

将原有函数命名为 brackets_without_translation

定义新函数 brackets_with_translation完成重载。
1 楼 pilipala 2007-07-28  
三、源码学习

1、初始化加载

    
def load_languages!
   language_files.each do |file| 
      key = File.basename(file, '.*').to_sym
      @@languages[key] = YAML.load_file(file).symbolize_keys
    end
    languages
end


简单地load 相应语言文件yml至 @@languages[key] 中。

2 翻译字符串:

首先, 执行:
String.send :include, Gibberish::StringExt

当Gibberish::StringExt被别的类include时会调用到函数:

	    
def self.included(base)
  base.class_eval do
    alias :brackets :[]
    alias_method_chain :brackets, :translation
    alias :[] :brackets
  end
end


其中:alias_method_chain 大概实现如下:

	
def alias_method_chain(target, feature)
  alias_method "#{target}without#{feature}", target
  alias_method target, "#{target}with#{feature}"
end


所以,再执行String#[]时,会调用到函数 brackets_with_translation

    
def brackets_with_translation(*args)
      args = [underscore.tr(' ', '_').to_sym] if args.empty?
      return brackets_without_translation(*args) unless args.first.is_a? Symbol
      Gibberish.translate(self, args.shift, *args)
    end


当[]中第一个参数不是一个Symbol 还会执行以前的[],否则就执行Gibberish.translate

相关推荐

    前端项目-gibberish-aes.zip

    开发者可以通过阅读和理解这些源码,深入学习AES-CBC的实现细节。 使用Gibberish-AES库的步骤通常如下: 1. 引入库:将库的JavaScript文件引入到HTML或JavaScript项目中。 2. 生成密钥和初始向量:AES-CBC需要一个...

    Gibberish

    在IT行业中,"Gibberish"这个词通常指的是无意义的、乱码或者无法理解的文字。这可能是由于编码错误、不兼容的字符集或者是故意创建的混淆信息。在这个上下文中,我们将探讨“字体”这一标签所关联的知识点,以及...

    gibberish-aes-php:Gibberish AES javascript加密库httpsPHP端口

    参见Gibberish AES javascript加密库, 重要说明:互补JavaScript项目Gibberish AES已被弃用,请参阅 考虑寻找替代PHP和JavaScript解决方案。 此类基于nbari在dalmp dot com 上提出的初始代码 现场演示 要求: ...

    gibberish-language-blog:胡言乱语的秘密语言博客之家

    在IT行业中,我们经常遇到各种有趣的项目,"gibberish-language-blog"就是一个这样的例子,它专注于探索和创建“胡言乱语”或“秘密语言”。这个项目是Gibberish Umbra的一个分支,旨在通过编程和技术手段来构建一个...

    Gibberish:一个 Python Translator Gibberish 模块,它是在我睡前写的,灵感来自 www.reddit.comrswedencomments301sqrdodetot_äror_foföror_lolitote

    #Turn a sentence into gibberish in Swedish >python Gibberish.py -g "My hovercraft is full of eels." "Swedish" Mominon sosvovävovarore äror fofulollol avov ålolaror. # Degibber a sentence and print...

    PyPI 官网下载 | z3c.gibberish-0.1.tar.gz

    《PyPI官网下载:探索z3c.gibberish-0.1.tar.gz中的Python库与分布式技术》 在IT领域,尤其是Python编程环境中,PyPI(Python Package Index)是开发者们获取和分享软件包的重要平台。本次我们将深入探讨一个在PyPI...

    node-gibberish:Python Gibberish-Detector的节点端口

    3. **Node.js模块化**:Node-gibberish作为Node.js模块,遵循CommonJS规范,可以通过`require`来导入和使用,便于项目集成。 4. **文本处理**:该项目专注于处理文本数据,可以帮助开发者过滤无效或无意义的文本,...

    gibberish:Python伪字产生器

    gibberish模块让您生成随机的,可发音的伪单词。 它最初是作为有关密码生成器的开始的,但它还是创造单词或激发词汇创造力的一种有趣方式。 用法 gibberish会创建伪单词,该伪单词由一个听起来像是英语的辅音元音...

    gi-metronome:使用 Gibberish 的简单 HTML5 JS 节拍器

    在音乐制作和学习中,节拍器是一个不可或缺的工具,它帮助音乐家保持节奏的稳定和准确。在这个项目中,我们关注的是一个基于 HTML5 和 JavaScript 的轻量级节拍器,它使用了名为 Gibberish.js 的库来实现音频处理...

    gibber:浏览器的视听实时编码环境

    Gibber加载当前假定位于node_modules/gibberish-dsp/dist/gibberish_worklet.js gibberish_worklet.js的音频工作集。 如果您的节点安装将该Worklet放置在其他位置,则可以在environment.js文件

    gibberish:Go 包胡言乱语可帮助您创建随机的废话文本

    胡言乱语 Gibberish 是一个用于创建随机伪单词、句子和文档的 Go 库。 它目前正在开发中。

    gibberish:使用代码生成技术创建 JIT 优化音频回调的快速 JavaScript DSP 库

    Gibberish 一次处理每个合成块的每个样本,从而实现 JavaScript 合成系统中通常不可能实现的各种效果,最重要的是单样本反馈循环和音频速率调制调度。 请注意,此分支适用于库的第 3 版。 请参阅 Gibber 当前使用...

    gibberish-fe

    乱码

    Copy page URL as plain text-crx插件

    如果社交媒体没有呈现预览 - 您可以先粘贴完整的“Gibberish”URL,让它呈现预览,然后将地址更改为母语的“漂亮”短链接。开发这种微小的延伸允许我通过将菜单选项添加到鼠标右键单击页面的任意位置,而不是乱用...

    Encryption to Magic-crx插件

    受此BoingBoing文章(https://boingboing.net/2016/03/21/nyt-if-you-see-gibberish-on.html)的启发,此扩展名执行以下操作:-将“加密”的出现替换为“ Magic”-用“ Enchanted”代替“ Encrypted”-用“ Bewitch...

    gibberish-libsodium:在浏览器中使用Libsodium进行基于简单密钥加密的示例

    乱糟糟的钠这是一个简单的示例,说明如何使用LibSodium通过密钥加密数据。 这将在浏览器和Node / io.js中均适用-请在查看示例代码使用LibSodium的优势包括用于密钥派生的scrypt函数加密功能已通过验证LibSodium目前...

    最大公共字符串leetcode-python-gibberish:技术面试数据结构与算法练习题

    最大公共字符串leetcode Python胡言乱语 在python中实现的不同数据结构和算法。 练习程序.py 包括面试练习的问题。 收集自 Codefights、Javarevisted、Hackerrank。 练习题列表: 编写代码来检查字符串是否为回文?...

    js非对称加密-aescbc加密方式

    用js实现了非对称加密 aescbc加密 代码片段 function getScrKey(pubExponent,modulus,srcStr){ var publicKey = RSAUtils.getKeyPair(pubExponent, '', modulus); var enStr = RSAUtils.encryptedString(public...

    加密到魔术「Encryption to Magic」-crx插件

    受此BoingBoing文章(https://boingboing.net/2016/03/21/nyt-if-you-see-gibberish-on.html)的启发,此扩展名执行以下操作:-将“加密”的出现替换为“ Magic”-用“ Enchanted”代替“ Encrypted”-用“ Bewitch...

    [数据加密] 数据加密 入门教程 (英文版)

    Encryption turns ordinary, readable data into what looks like gibberish, but gibberish that only the end user can turn back into readable data again. The difficulty of encryption has much to do with ...

Global site tag (gtag.js) - Google Analytics