[ruby-gnome2-doc-cvs] [Hiki] update - tips_libglade_i18n

Back to archive index

ruby-gnome2-hiki-pt_BR****@sourc***** ruby-gnome2-hiki-pt_BR****@sourc*****
2004年 4月 5日 (月) 10:32:13 JST


-------------------------
REMOTE_ADDR = 200.216.146.191
REMOTE_HOST = 
        URL = http://ruby-gnome2.sourceforge.jp/pt_BR/?tips_libglade_i18n
-------------------------
+ {{link nil, "Ruby-GNOME2+Tips", nil, nil}}
+ 
  = 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.
+ 
+ Autor da Tradu$Bne(Bo para Portugu$BsT(B: ((<Joao Pedrosa|jpedrosa>))





ruby-gnome2-cvs メーリングリストの案内
Back to archive index