艰难的globalize 历程 (半成品,多谢Eric和cookoo 的指点,将继续补充)

本文主要是介绍艰难的globalize 历程 (半成品,多谢Eric和cookoo 的指点,将继续补充),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Globalize 绝对不是像其网址上的说得那么简单易用,部署的过程中多次有放弃并用手工来汉化的念头。

这个网站wiki曾经给涂鸦的不成样子了
http://www.globalize-rails.org/

有时候可以正常的访问, 如有异常

可以访问Trac的
http://svn.globalize-rails.org/trac/globalize



http://wiki.globalize-rails.org/globalize/

先看看
[size=24]globalize 教程[/size]

http://www.artweb-design.de/articles/2006/06/09/real-fun-get-on-rails-with-globalize

http://www.artweb-design.de/articles/2006/06/13/real-fun-get-on-rails-with-globalize-take-2

光说不练,天桥把式

Beast 汉化示范

安装禽兽不难, 看下面的步骤

http://www.olddognewtricks.co.uk/2006/09/beast.html

能行吗?

不行, 就一步一步地来吧

svn 你有吧, 看准了windows下2进制文件的---------安装方便点

[img]http://subversion.tigris.org/subversion_logo_hor-468x64.png[/img]

http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91

windows 平台用


http://subversion.tigris.org/files/documents/15/34093/svn-1.4.0-setup.exe

对小海龟的客户端, 没有就下, 图式界面适合初学者

http://tortoisesvn.tigris.org/

[img]http://tortoisesvn.tigris.org/tortoisesvn_logo_hor468x64.PNG[/img]

svn checkout http://svn.techno-weenie.net/projects/beast/trunk/

:D checkout 就像download一样下载代码到你的PC上了

rake freeze_edge

:) beast还没进化, 用的是Rails 1.2 版, 有安全漏洞的版哦

gem install RedCloth

:roll: 装红布

:arrow: database.yml 修改数据库的配置(用mysql的话,Mysql里建立个空的schema 名字与yml里的一样,注意用户密码,比如root, )

导入数据表

rake db:schema:load RAILS_ENV=production

:lol: 把加密的salt盐值改了

PASSWORD_SALT 在 config/environment.rb

用ruby script/server -e production 启动

localhost:3000 IE 浏览器就看到了野兽,吼叫吧,现注册

[img]http://bd7lx.iteye.com/upload/picture/pic/176/e987fbb6-58ab-43f6-a52f-f8d4f99f5d1e.jpg[/img]


:arrow:

可以开始Globalize啦

回顾前提条件

Beast(别的RoR程序也可以)已经安装部署好了, 可以运行。
检查确认数据库的设置 conf/database.yml

安装设置 Globalize

ruby script/plugin install http://svn.globalize-rails.org/svn/
globalize/globalize/branches/for-1.1

这个命令有问题,因为svn库里的路径有变化

可以svn 直接把/for-1.1 checkout 到vendor 路径下

命令如下

cd vendor/plugins

svn export svn://svn.globalize-rails.org/globalize/branches/for-1.1 --force

然后回到项目的根目录

下一步配置, 就是在创建翻译表, 留意你的数据库配置和服务在运行中

rake globalize:setup

报错

Mysql::Error: Identifier name
'index_globalize_translations_on_table_name_and_item_id_and_language_id'
is
too long: CREATE INDEX
`index_globalize_translations_on_table_name_and_item_id_and_language_id`
ON
globalize_translations (`table_name`, `item_id`, `language_id`)

类似

http://www.ruby-forum.com/topic/80049

Indentifier name too long
Posted by Dylan Stamat (Guest)
on 05.09.2006 09:57
(Received via mailing list)

Running Edge (4991) and MySQL (5.0.22)
==============================

When running "rake db:migrate"

Mysql::Error: Identifier name
'index_globalize_translations_on_table_name_and_item_id_and_language_id'
is
too long: CREATE INDEX
`index_globalize_translations_on_table_name_and_item_id_and_language_id`
ON
globalize_translations (`table_name`, `item_id`, `language_id`)


Re: Indentifier name too long
Posted by Martin Bernd Schmeil
on 05.09.2006 10:20

Just add a

:name => „something_idx“

parameter to the add_index statement.

Btw. If you have the same problem with foreign_keys:

1) create an index with a shorter name
2) add_fkey …, :name => “something_fk”, :index => false

does the trick.

Also you can handle the identifier name limit for the foreign key itself
and index with a possibly too long name will be auto created …unless you
use the :index => false option. On most (all?) RDBMS you need an index
for foreign keys column(s) though.

- Bernd

上面的介绍不详细, 从数据库里看到表的结构已经建立了,但没有数据,在创建index时候出了问题

cd db
cd migrate

044_globalize_migration.rb 打开有

[img]http://bd7lx.iteye.com/upload/picture/pic/196/67347577-96fa-4afc-bfe3-81a30f457a88.jpg[/img]

找add_index的字段

按上面的Bernd方法,还是不行,提示index建立时出错, :?:

把add_index屏蔽掉, 不是所有....哈

重新运行 rake globalize:setup

检查beast数据库里多了表和数据, Ok

[color=darkred]下一步该Configuration[/color]

config/environment.rb 文件里加入下面的代码, 放在initial xxxx
end 的后面:


[code]# Include your application configuration below
include Globalize
Locale.set_base_language 'en-US'
LOCALES = {'pl' => 'pl-PL',
'en' => 'en-US',
'es' => 'es-ES',
'fr' => 'fr-FR'}.freeze[/code]

LOCALES = {'pl' => 'pl-PL',
'en' => 'en-US',
'es' => 'es-ES',
'fr' => 'fr-FR'}.freeze

可以做相应的修改,

LOCALES = {

'en' => 'en-US',

'zh' => 'zh-CN'


}.freeze

或直接用
Locale.set_base_language('en-US')

config/routes.rb 的文件也来点:

[code]map.connect ':locale/:controller/:action/:id'[/code]

app/controllers/application.rb file:
[code]
class ApplicationController < ActionController::Base

before_filter :set_locale

def set_locale
if !params[:locale].nil? && LOCALES.keys.include?(params[:locale])
Locale.set LOCALES[params[:locale]]
else
redirect_to params.merge( 'locale' => Locale.base_language.code )
end
end

end[/code]

如果再次启动webrick则 localhost:3000的指向为http://localhost:3000/en/forums

:evil: 翻译静态的内容 static content.
生成个翻译的控制器

ruby script/generate controller admin/translate

修改控制器
[code]
class Admin::TranslateController < ApplicationController

def index
@view_translations = ViewTranslation.find(:all, :conditions => [ 'built_in IS NULL AND language_id = ?', Locale.language.id ], :order => 'text')
end

def translation_text
@translation = ViewTranslation.find(params[:id])
render :text => @translation.text || ""
end

def set_translation_text
@translation = ViewTranslation.find(params[:id])
previous = @translation.text
@translation.text = params[:value]
@translation.text = previous unless @translation.save
render :partial => "translation_text", :object => @translation.text
end

end[/code]


创建 app/views/admin/translate/_translation_text.rhtml 局部页面, 里面用来 translation_text action.
[quote]

<%= translation_text || '[no translation]' %>

[/quote]

要翻译静态内容可以使用 in_place_editor helper帮助类(内置在Rails 1.1) , 记着加入下面的代码


<%= javascript_include_tag :defaults %>


到 layout file ( admin 部分)

比如 创建一个程序应用范围的
[size=18]app/views/layouts/application.rhtml[/size] layout –

可以copy 大多数的生成的products.rhtml , 只改标题并加上 javascript tag 标签

下面接着创建
app/views/admin/translate/_translation_form.rhtml
partial 局部模板给the form 这个是用来提供翻译的.
[code]

<!--[form:translate]-->
<p>
<label for="tr_<%= tr.id %>"><%=tr.tr_key%></label>
<br />
<span id="tr_<%= tr.id %>">
<%= render :partial => 'translation_text', :object => tr.text %>
</span>
<%= in_place_editor "tr_#{tr.id}",
:url => { :action => :set_translation_text, :id => tr.id },
:load_text_url => url_for({ :action => :translation_text, :id => tr.id })%>
</p>
<!--[eoform:translate]-->[/code]


帮助类中添加 app/helpers/application_helper.rb file:


[code]def base_language_only
yield if Locale.base?
end

def not_base_language
yield unless Locale.base?
end
[/code]

:P

在 app/views/admin/translate, 建个 index.rhtml
[code]
<% base_language_only do -%>
<div id="language"><h1>Please choose language for translation</h1></div>
<% end -%>

<% not_base_language do -%>
<div id="language"><h1><%= "Language: " + Locale.language.native_name %></h1></div>
<div>
<% @view_translations.each do |tr| -%>
<%= render :partial => 'translation_form', :locals => {:tr => tr}%>
<% end -%>
</div>
<% end -%>
[/code]

[img]http://bd7lx.iteye.com/upload/picture/pic/233/fae11b14-ebe8-4f64-8afe-aabb3cd771c2.jpg[/img]

:arrow:

要知后事如何, 且听下回分解

这篇关于艰难的globalize 历程 (半成品,多谢Eric和cookoo 的指点,将继续补充)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/216392

相关文章

三国地理揭秘:为何北伐之路如此艰难,为何诸葛亮无法攻克陇右小城?

俗话说:天时不如地利,不是随便说说,诸葛亮六出祁山,连关中陇右的几座小城都攻不下来,行军山高路险,无法携带和建造攻城器械,是最难的,所以在汉中,无论从哪一方进攻,防守方都是一夫当关,万夫莫开;再加上千里运粮,根本不需要打,司马懿只需要坚守城池拼消耗就能不战而屈人之兵。 另一边,洛阳的虎牢关,一旦突破,洛阳就无险可守,这样的进军路线,才是顺势而为的用兵之道。 读历史的时候我们常常看到某一方势

【多系统萎缩患者必看】✨维生素补充全攻略,守护你的健康每一天!

亲爱的朋友们,今天我们要聊一个既重要又容易被忽视的话题——‌多系统萎缩患者如何科学补充维生素‌!🌟 在这个快节奏的生活中,健康成为了我们最宝贵的财富,而对于多系统萎缩(MSA)的患者来说,合理的营养补充更是维护身体机能、提升生活质量的关键一步。👇 🌈 为什么多系统萎缩患者需要特别关注维生素? 多系统萎缩是一种罕见且复杂的神经系统疾病,它影响身体的多个系统,包括自主神经、锥体外系、小脑及锥

Vue2电商项目(二) Home模块的开发;(还需要补充js节流和防抖的回顾链接)

文章目录 一、Home模块拆分1. 三级联动组件TypeNav2. 其余组件 二、发送请求的准备工作1. axios的二次封装2. 统一管理接口API----跨域3. nprogress进度条 三、 vuex模块开发四、TypeNav三级联动组件开发1. 动态展示三级联动数据2. 三级联动 动态背景(1)、方式一:CSS样式(2)、方式二:JS 3. 控制二三级数据隐藏与显示--绑定styl

系统架构的发展历程之模块化与组件化

模块化开发方法 模块化开发方法是指把一个待开发的软件分解成若干个小的而且简单的部分,采用对复杂事物分而治之的经典原则。模块化开发方法涉及的主要问题是模块设计的规则,即系统如何分解成模块。而每一模块都可独立开发与测试,最后再组装成一个完整软件。对一个规约进行分解,以得到模块系统结构的方法有数据结构设计法、功能分解法、数据流设计和面向对象的设计等。将系统分解成模块时,应该遵循以下规则: (1)最高模

Numpy random.random()函数补充

np.random.random() np.random.random()的作用是生成指定形状的均匀分布的值为[0,1)的随机数 参数为size,也就是用于指定的形状大小 import numpy as npprint(np.random.random(size=(2, 2)))# [[0.19671797 0.85492315]# [0.99609539 0.66437246]]

”CSS 网格“二维布局系统(补充)——WEB开发系列32

CSS 网格布局是一种二维布局系统,用于网页设计。通过使用网格,你可以将内容以行和列的形式进行排列。此外,网格布局还能够简便地实现一些复杂的布局结构。 一、什么是网格布局? CSS网格布局是一种二维布局系统,它允许我们创建复杂的网页布局,既可以处理行也可以处理列。与传统的布局方法不同,网格布局将网页分成多个可控的区域,这些区域可以任意排列、对齐和调整大小。网格布局使得创建灵活且响应

第一款实时网络游戏的开发历程全解

“我的兴趣是创建世界,而不是生活在别人创建的世界里。我希望游戏世界能让人们能跳出现实世界的局限,去尝试新的身份……不是要脱胎换骨,而是让他们找到自己真正的归属”。所以他创造了第一个网络世界。      特鲁布肖所开发的MUD1(为区别这款游戏与MUD这一游戏类型,后文游戏名统一为MUD1)依然是一个纯文字的世界,没有任何图片,但是不同计算机前的玩家可以在游戏里共同冒险、交流。   与以往具有

小琳AI课堂:大模型的发展历程:从创新到挑战

大家好,这里是小琳AI课堂。今天我们来聊聊大模型的发展历程,这是一段充满创新与挑战的故事。🚀 让我们追溯到20世纪50年代,那时计算机科学和人工智能还处于萌芽阶段。 早期探索(1950s-1970s) 早期探索是大模型发展历程中的一个关键时期,它标志着人工智能作为一门学科的诞生。这个时期,计算机科学和人工智能还处于起步阶段,科学家们充满好奇地探索如何让机器模仿人类智能。这一阶段的探索不仅奠定

“弹性盒子”一维布局系统(补充)——WEB开发系列31

弹性盒子是一种一维布局方法,用于根据行或列排列元素。元素可以扩展以填补多余的空间,或者缩小以适应较小的空间,为容器中的子元素提供灵活的且一致的布局方式。 一、什么是弹性盒子? CSS 弹性盒子(Flexible Box Layout,简称 Flexbox)是 CSS3 中引入的一种布局模式,提供一种有效的方式来布局、对齐和分配容器内空间,特别是在动态和复杂的应用界面中。 1、

UML的图及其他图补充

一、UML图 1.类图 ‌类图‌是统一建模语言(UML)中的一种静态结构图,主要用于描述软件系统的静态结构。它显示了模型中的类、类的内部结构以及它们与其他类的关系。类图是面向对象建模的主要组成部分,用于对系统的词汇进行建模、对简单的协作进行建模以及对逻辑数据库模式进行建模。类图的基本元素包括类、接口以及它们之间的关系,这些元素共同构成了系统的静态结构模型。 总结: 1.静态图、