ruby-gnome2-hiki-pt_BR****@sourc*****
ruby-gnome2-hiki-pt_BR****@sourc*****
2004年 4月 5日 (月) 09:25:56 JST
------------------------- REMOTE_ADDR = 200.216.151.125 REMOTE_HOST = URL = http://ruby-gnome2.sourceforge.jp/pt_BR/?tips_libglade_i18n ------------------------- = Suportando internacionaliza$Bgc(Bo (i18n) em Ruby/Libglade == Introdu$Bgc(Bo Este tutorial mostrar como fazer Ruby/Libglade aproveitar as vantagens das strings traduzidas pelo gettext. Para aqueles de voc$BsT(B que conhecem pouco ou nada dos conceitos do gettext, ler o ((<manual|URL:http://www.gnu.org/software/gettext/manual>)) provavelmente uma boa id$BqJ(Ba. Antes de iniciar, certifique-se que voctem o Ruby-GNOME2 instalado. Enquanto escrevia este tutorial, usei Ruby 1.8.1, Ruby-GNOME2 0.8.1 e gettext 0.12.1 em uma m$BaR(Buina com o Gentoo Linux. Podem existir algumas diferen$BmB(Bs entre as vers$B(Bs que causam problemas, ent$BeP(B lembre-se disso se algo n$BeP(B funcionar para voc N$BeP(B sei se ou como qualquer coisa disto funciona no Microsoft Windows. Se algu$BqN(B gostaria de contribui informa$Bne(Bo sobre isso, seria de grande ajuda. Um bocado desta inforam$Bne(Bo foi obtida do ((<FAQ de PyGTK|URL:http://www.async.com.br/faq/pygtk/index.py?req=show&file=faq22.001.htp>)). == Criando uma interface no Glade O primeiro passo pe criar a interface com 'glade-2'. Toda vez que voccria um componente (widget) com um campo de texto, o XML gerado terum campo 'translatable="yes"' adicionado a ele. Ent$BeP(B vpara "Options->LibGlade Options" e selecione 'Save Translatable Strings'. No campo de texto, insira um nome de arquivo para salvar as strings ('glade-msg.c' um bom nome). A sa$ByE(Ba (output) estem um formato parecido com C, porque isso o que o xgettext usar == Criando as tradu$Bnw(Bes ((*Nota*)) esta se$Bne(Bo bastante emprestada do ((<FAQ de PyGTK |URL:http://www.async.com.br/faq/pygtk/index.py?req=show&file=faq22.001.htp>)). mencionado acima. Incluesta se$Bne(Bo para que o leitor n$BeP(B tenha que dar voltas por a Pr$B(Bimo, vocquerercriar o arquivo principal de tradu$Bne(Bo. Para fazer isso, use o comando a seguir: xgettext -kN_ -o myapp.pot glade-msg.c Olhe dentro desse arquivo. Vocdeverver as strings de glade listadas. Esse arquivo .pot deverser enviado para tradutores. Uma vez que eles recebam o arquivo, eles dever$BeP(B criar um arquivo '.po'. Como um exemplo, para criar uma tradu$Bne(Bo Alemeles usariam: LANG=de_DE msginit Isso criaro arquivo 'de.po', onde as strings traduzidas dever$BeP(B ser entradas. O arquivo de tradu$Bne(Bo precisa ser convertido para um formato bin$BaS(Bio antes de ser usado: msgfmt de.po -o myapp.mo Esse arquivo deverent$BeP(B ser colocado em um diret$B(Bio apropriado. Na minha m$BaR(Buina, isso iria em /usr/share/locale/de/LC_MESSAGES/ == Escrevendo seu c$B(Bigo Agora para dizer para Ruby/Libglade carregar os arquivos de 'locale'. Normalmente vocteria uma linha no seu c$B(Bigo similar a esta: @glade = GladeXML.new('myapp.glade') { |handler| method(handler) } Para conseguir que as strings traduzidas sejam carregadas, vocprecisa especificar um nome de 'locale' para que o glade saiba qual de arquivo carregar as strings. Altere o c$B(Bigo acima para: @glade = GladeXML.new('myapp.glade', nil, 'myapp') { |handler| method(handler) } O terceiro par$BcN(Betro, 'myapp', dirao glade para procurar por 'myapp.mo'. Agora para carregar a aplica$Bne(Bo: LANG=de_DE ruby myapp.rb As strings traduzidas dever$BeP(B aparecer. Isso tudo. == Gerando automaticamente o arquivo de tradu$Bne(Bo bin$BaS(Bio ((*Nota*)) esta se$Bne(Bo baseada no c$B(Bigo inclu$ByE(Bo com this section is based on code included with ((<a distribui$Bne(Bo ruby-gettext |URL:http://ponx.s5.xrea.com/hiki/ruby-gettext.html>)) de Masao Mutoh. Para cada arquivo traduzido, vocprecisarcriar um novo arquivo '.mo'. Com o ((<install.rb|URL:http://i.loveruby.net/en/setup.html>)) de Minero Aoki isso se torna bastante f$BaD(Bil de automatizar. Para este exemplo n$B(B fingiremos que jtemos tradu$Bnw(Bes em Espanhol e Alem$BeP(B criadas, nomeadas 'de.po' e 'es.po', respectivamente. cd $PROJECTROOT mkdir po mkdir po/de mkdir po/es cp de.po po/de/myapp.po cp es.po po/es/myapp.po Ent$BeP(B, no seu diret$B(Bio principal, crie um arquivo nomeado post-setup.rb que cont$BqN(B: require 'fileutils' podir = srcdir_root + "/po/" modir = srcdir_root + "/data/locale/%s/LC_MESSAGES/" Dir.glob("po/*/*.po") do |file| lang, basename = /po\/([\w\.]*)\/(.*)\.po/.match(file).to_a[1,2] FileUtils.mkdir_p modir % lang system("msgfmt #{podir}#{lang}/#{basename}.po -o #{modir}#{basename}.mo" % lang) end Vocpode tamb$BqN(B querer criar o seguinte pre-clean.rb: Dir.glob("data/**/*.mo").each do |file| File.delete(file) end Agora, quando 'ruby install.rb setup' executado, os arquivos de tradu$Bne(Bo ser$BeP(B gerados. No 'ruby install.rb install' eles ser$BeP(B instalados no local correto. == Conclus$BeP(B Espero que isto tenha sido claro. Se as pessoas tiverem problemas, sintam-se livres para me contactarem e tentarei ajudlas. Gostaria de melhorar este documento, assim tamb$BqN(B me contacte com corre$Bnw(Bes e etc. == Autor Zachary P. Landau (kapheine AT hypa DOT net). O leitor deve estar avisado que estou longe de ser um expert no assunto. Eu apenas recentemente comecei a tentar adicionar suporte a internacionaliza$Bne(Bo a um dos meus projetos. Enquanto procurava por informa$Bne(Bo, encontrei apenas peda$BmP(Bs que precisavam ser unidos. Escrevi este tutorial em uma tentativa de evitar que outras pessoas tenham que fazer o mesmo. Isso dito, eu ficarua feliz em incorporar adi$Bnw(Bes e corre$Bnw(Bes de pessoas que sabem mais sobre o assunto. Por favor me contacte com qualquer informa$Bne(Bo que voctenha. == Log de Altera$Bnw(Bes :2004-03-20 Zachary P. Landau Vers$BeP(B inicial.