[RESOLVIDO] Traduzir JavaHelp

Olá pessoal!

Estou precisando traduzir os textos fixos do JavaHelp. Pesquisei aqui no GUJ e o único post que encontrei que tem haver com o que preciso é esse aqui:

http://www.guj.com.br/posts/list/39294.java#217915

Só que eu não entendi o post, na verdade qto a reescrever a classe javax.help.resources.Constants.java eu entendi, mas e ai? Como faço pro JavaHelp ler essa classe que eu fiz invés da dele?

Bom, eu não entendi, preciso de ajuda e fiquei com vergonha de perguntar naquele post pq ele é bem antigo, de 2006, acho que nem rola…rs…

Alguém pode me ajudar? Ou se tiver algum outro jeito de traduzir o JavaHelp eu tb aceito!

Grata,
Renata :wink:

Bom, pelo que está escrito, você precisa mencionar essa classe (no seu classpath) antes dos jars do JavaHelp, para que ela “sobreponha” a classe original que está nos jars do JavaHelp. Parece uma solução meio “suja”, na verdade, mas não sei se é a única possível.

thingol, me perdoe pela ignorancia, mas poderia ser mais espec[ifico?

Desculpa msm! To com a sensacao de que eh algo idiota mas que eu nao estou enxergando… :oops:

Obrigada

pelo que eu entendi vai ser quase uma “gambiarra” :shock:

Nem me fale! “Gambiarra” é pouco pra isso ai!

Mas o problema é que não estou conseguindo mais nada! Pesquisando descobri esse comando: xml:lang=“pt-BR”

Segundo alguns manuais que achei na internet, esse comando deve ser colocado dentro do tag <presentation>, ficaria assim por ex:

&lt;presentation xml:lang="pt-BR" default="true" displayviews="true" displayviewimages="true"&gt;

Bom, tentei fazer isso ai. Mas acham que funcionou? Que nada! Cansei de testar de todas as formas possíveis e não traduz!

Por favor, ngn sabe o que posso fazer pra resolver isso? Alguma dica?

SOCORRO! :roll:

Grata,
Renata

Bom pessoal… estou aqui “revivendo” este tópico que ainda não foi solucionado.

Faz tempo já… 2 meses… e nada.

Ngn. tem alguma dica pra mim?

OBS: Aproveito para deixar uma pergunta aos moderadores: o que houve com a opção de pesquisa do nosso forum? não está funcionando, já fiz teste… procurem por “javahelp” por ex… essa msm é sobre isso, mas se vc procurar ele não encontra nenhum resultado.

Bom,

É como eu já te disse. O JavaHelp possui um mecanismo de internacionalização porém não existe a tradução para o Locale pt_BR. Logo, como o .jar da biblioteca javahelp é assinado, as soluções para este problema é tudo “gambiarra”. Então o que poderia ser feito?
Primeira opção:

  • Criar a mesma classe Constants traduzindo conforme necessidade usando a mesma estrutura que contem no .jar do javahelp.
    Segunda opção (Não testei)
  • Descompactar todo o jar do jh.jar, modificar o META-INF/MANIFEST.MF tirando as assinaturas e gerar o .jar novamente.

Melhor solução é traduzir a classe Constants, e mandar para os desenvolvedores da API, nestes dois meses que já se passaram provavelmente você teria pelo menos uma resposta concreta do problema.

É isso, abraço.

[quote=Eliezer Reis]Bom,

É como eu já te disse. O JavaHelp possui um mecanismo de internacionalização porém não existe a tradução para o Locale pt_BR. Logo, como o .jar da biblioteca javahelp é assinado, as soluções para este problema é tudo “gambiarra”. Então o que poderia ser feito?
Primeira opção:

  • Criar a mesma classe Constants traduzindo conforme necessidade usando a mesma estrutura que contem no .jar do javahelp.
    Segunda opção (Não testei)
  • Descompactar todo o jar do jh.jar, modificar o META-INF/MANIFEST.MF tirando as assinaturas e gerar o .jar novamente.

Melhor solução é traduzir a classe Constants, e mandar para os desenvolvedores da API, nestes dois meses que já se passaram provavelmente você teria pelo menos uma resposta concreta do problema.

É isso, abraço.[/quote]

Então, sua opção 1 eu tentei, e funciona, mas não como preciso. É que não preciso simplesmente TRADUZIR a classe, preciso INTERNACIONALIZÁ-LA. Se eu faço a super gambiarra do tipo: pego o Constants.java, traduzo, gero o .class, abro o jar do javahelp, removo o Constants.class que está lá e coloco no lugar o que eu gerei, funciona, funcioná só pra português, não consigo internacionalizar. Eu já tentei colocar dentro dessa classe meus comandos de internacionalização, ele dá erro, não encontra os caminhos, só pau. Então, por fim, desta forma não consegui fazer funcionar.

Quanto a opção 2, eu pensei em algo assim. Mas a caca é que quando eu abro o source ele não encontra várias coisas. Fica dando erro por não encontrar várias classes. Então obviamente não tem como eu gerar o jar novamente.

Eu mando AGORA a Constants.java pra quem quer que seja, traduzida. Mas na boa? Não acho que funcione. Tentei usar alguma das que ele já possue e simplesmente não funciona, continua sempre em inglês (o idioma default). Por isso eu penso que não ia fazer a menor diferença. Fora que faz bem mais de 2 meses que estou mexendo com isso (intercalando com outras coisas é claro) e não vi um release de versão sequer ser liberado. Eu duvido que eles estão mexendo nisso e liberando ai a cada 2 meses como vc disse…

Grata,
Renata

Acho que você não entendeu o que eu quis dizer! Olha só, o JavaHelp vem com internacionalização somente para os seguintes Locales (Linguas): en (default), ar, cs, de, es, fr, he, ja, pl, ru, sk e zh. Infelizmente não tem como aumentar mais línguas porém você consegue substituir o suporte para estas linguas. Mas como?

Crie no seu projeto o pacote(package) javax.help.resources e dentro deste pacote crie a classe Constants.java ou Constants_<algum dos locales citados acima> (Constants_pl).

Agora traduza a classe http://www.koders.com/java/fidF95BF2B283469F5B6CFA4D8C479FD5568434DEF3.aspx?s=javax.help.resources#L21.

Em algum momento do seu código você terá algo semelhante como abaixo para criar sua interface de ajuda. Observe a linha 3 e perceba que estou mudando os Labels do JavaHelp para francês. Agora basta usar este mesmo recurso para apontar para sua nova classe traduzida e mantendo ainda suporte as demais línguas. Se você usar a classe Constants.java o locale correto deverá ser “en”.

ClassLoader cl = this.getClass().getClassLoader();
try {
	Locale.setDefault(new Locale("fr"));

	URL hsURL = HelpSet.findHelpSet(cl, helpHS);
	hs = new HelpSet(null, hsURL);
} catch (Exception e) {
	return;
}
		
hb = hs.createHelpBroker();
Dimension ds = Toolkit.getDefaultToolkit().getScreenSize();
hb.setSize(ds);
hb.setDisplayed(true);

Isso resolve? Se você precisar internacionalizar mais que 12 línguas dai complicou. Embora não tenha testado (falta de tempo mesmo) o segundo passo que citei acima deverá funcionar.

Melhorou em algo? Abraço!

[quote=Eliezer Reis]Acho que você não entendeu o que eu quis dizer! Olha só, o JavaHelp vem com internacionalização somente para os seguintes Locales (Linguas): en (default), ar, cs, de, es, fr, he, ja, pl, ru, sk e zh. Infelizmente não tem como aumentar mais línguas porém você consegue substituir o suporte para estas linguas. Mas como?

Crie no seu projeto o pacote(package) javax.help.resources e dentro deste pacote crie a classe Constants.java ou Constants_<algum dos locales citados acima> (Constants_pl).

Agora traduza a classe http://www.koders.com/java/fidF95BF2B283469F5B6CFA4D8C479FD5568434DEF3.aspx?s=javax.help.resources#L21.

Em algum momento do seu código você terá algo semelhante como abaixo para criar sua interface de ajuda. Observe a linha 3 e perceba que estou mudando os Labels do JavaHelp para francês. Agora basta usar este mesmo recurso para apontar para sua nova classe traduzida e mantendo ainda suporte as demais línguas. Se você usar a classe Constants.java o locale correto deverá ser “en”.

ClassLoader cl = this.getClass().getClassLoader();
try {
	Locale.setDefault(new Locale("fr"));

	URL hsURL = HelpSet.findHelpSet(cl, helpHS);
	hs = new HelpSet(null, hsURL);
} catch (Exception e) {
	return;
}
		
hb = hs.createHelpBroker();
Dimension ds = Toolkit.getDefaultToolkit().getScreenSize();
hb.setSize(ds);
hb.setDisplayed(true);

Isso resolve? Se você precisar internacionalizar mais que 12 línguas dai complicou. Embora não tenha testado (falta de tempo mesmo) o segundo passo que citei acima deverá funcionar.

Melhorou em algo? Abraço![/quote]

FUNCIONOU!

Eliezer, eu tava fazendo tudo isso que vc falou… quer dizer, quase tudo!
Faz 2 meses já que eu tô trocando idéia com o povo do forum da SUN, os nego que desenvolveram o tal do JavaHelp (imagina minha cara qdo abri o fonte do JavaHelp e vi na assinatura do autor do fonte o msm nome do kra que tá me mandando e-mail no forum…rs…)

Eles me falaram pra fazer um projeto separado, com uma pkg javax.help.resources, pra colocar ali dentro minha Constants_pt.java, compilar, etc, etc… como vc falou.

Eu já tava cansada de fazer isso, já tentei de tudo alias, muitas coisas. Mas um detalhe que vc falou clareou qual era o problema e pq não funcionava daquela forma, vc disse:

“Crie no seu projeto o pacote(package) javax.help.resources e dentro deste pacote crie a classe Constants.java ou Constants_<algum dos locales citados acima> (Constants_pl).”

E depois:

“Se você precisar internacionalizar mais que 12 línguas dai complicou.”

Ai que eu me toquei!!!

Eu já tava fazendo isso, mas eu tava criando um Constants_pt.java. Como não existe Constants_pt.java o desgraçado do JavaHelp não reconhecia minha classe! Agora eu simplesmente, depois de ler o que vc escreveu e me tocar da “babada” que eu tava cometendo, eu apenas fui lá, renomeei minha Constants_pt.java pra Constants.java, rodei o projeto e TUDO FUNCIONOU!

Ah, e não precisa se preocupar em internacionalizar “apenas” 12 idiomas…rs… Eu peguei e internacionalizei minha classe Constants.java, desta forma qq idioma que for colocado no meu sistema, funcionará nela tb. Lindo né? rs

MUITO obrigada! Fazia tempo que eu tava apanhando disso ai… Vlw msm!!! :lol:

AuhAuhAuhAAUH. Pior que eu também estou a alguns meses tentando te explicar isso. Que bom que funcionou!

Alias, acaba de me ocorrer que você consegue usar mais de 12 línguas apenas deixando dinâmica a sua classe Constantes.java.

Veja este método da classe Constants.

 public Object[][] getContents() {
    return new Object[][] {{"",""} , {"",""}}
 }

Você pode fazer este método retornar o resultado de um outro método seu que faz o preenchimento da tradução caso ela não seja suportada pelo JavaHelp.

 public Object[][] getContents() {
    return MINHA_CLASSE_HELPER.getI18n(); //chamando o metodo estativo getI18n() de outra classe que retorna o preenchimento dos labels em outras línguas.
 }

Existe bem umas 3 possibilidades ainda. Problema e tempo para fazer os testes e te explicar como.

Abraço!

[quote=Eliezer Reis]AuhAuhAuhAAUH. Pior que eu também estou a alguns meses tentando te explicar isso. Que bom que funcionou!

Alias, acaba de me ocorrer que você consegue usar mais de 12 línguas apenas deixando dinâmica a sua classe Constantes.java.

Veja este método da classe Constants.

 public Object[][] getContents() {
    return new Object[][] {{"",""} , {"",""}}
 }

Você pode fazer este método retornar o resultado de um outro método seu que faz o preenchimento da tradução caso ela não seja suportada pelo JavaHelp.

 public Object[][] getContents() {
    return MINHA_CLASSE_HELPER.getI18n(); //chamando o metodo estativo getI18n() de outra classe que retorna o preenchimento dos labels em outras línguas.
 }

Existe bem umas 3 possibilidades ainda. Problema e tempo para fazer os testes e te explicar como.

Abraço![/quote]

Então! Eu sei disso! Foi isso que eu fiz qdo te falei que eu tinha internacionalizado minha Constants.java! hahahahaha… Eu estou ai chamando meu método de internacionalização! 8)

Então Eliezer, eu lembro que vc me mandou a msg em PVT, mas é que eu não fiquei todo esse tempo mexendo só com isso. Tive umas coisas mais urgentes e parei esse projeto de tudo, só a semana passada que retomei com a intenção de terminar de vez.

Enfim, agora deu certo!

VLW