Utilizador:He7d3r/Tools/LanguageConverter


Este script permite a conversão entre idiomas e/ou suas variantes. No Wikisource lusófono, é usado especificamente para realizar a conversão entre a ortografia de um texto antigo e a ortografia atual da língua portuguesa (tanto a variante usada em Portugal quanto a do Brasil).

Configurando o scriptEditar

Dependendo do objetivo para o qual o script for utilizado, e dos idiomas nos quais for habilitado, é necessário fazer algumas configurações para que ele funcione como desejado. Para isso, é utilizado o objeto window.LanguageConverter.config, no qual são colocadas uma ou mais das seguintes configurações:

  • msg: um objeto que reúne as mensagens da interface.
    • error_missing_dict: texto exibido quando o dicionário não for encontrado
    • error_missing_dict_name: texto exibido caso não seja definido o nome de um dos dicionários
    • error_word_processing: texto exibido no caso de ocorrer um erro ao processar determinada palavra
    • error_word_processing: texto exibido no caso de ocorrer um erro ao processar determinada conversão tipográfica
    • help_page_link: texto exibido no link para a página de ajuda sobre o conversor, caso ela tenha sido definida através de help_page.
    • show_changes_link texto do link que mostra as alterações realizadas
    • hide_changes_link texto do link que oculta as alterações realizadas
  • word_chars: define o conjunto de caracteres que formam o alfabeto do idioma da wiki em que o script será usado;
  • typo_changes: objeto que no qual são definidas as conversões tipográficas realizadas em cada variante/idioma;
  • ws_error: define as mensagens de erro exibidas caso ocorra algum problema ao executar o script;
  • ns_list e selection_mode: definem em que páginas o sistema estará habilitado.
    • ns_list indica um ou mais espaços nominais da wiki em que o script será usado.
    • selection_mode: define como é feita a seleção das páginas nas quais o sistema estará habilitado. Os valores possíveis são "OR" e "AND";
    • Combinações possíveis
      • Todas as páginas de quaisquer espaços nominais
      • Apenas as páginas que forem marcadas com a {{Modernização automática}}
      • Todas as páginas dos espaços nominais indicados
      • Todas as páginas dos espaços nominais indicados e também todas aquelas que forem marcadas com a {{Modernização automática}}
      • Apenas as páginas dos espaços nominais indicados que estiverem marcadas com a {{Modernização automática}}
  • local_dic_id: define os atributos id usados nos elementos HTML da {{Modernização automática}} para cada variante;
  • no_conversion_class: define a classe usada para evitar a conversão do texto dos elementos HTML que forem marcados;
  • global_dic_page: define as páginas da wiki em que são mantidos os dicionários nos quais a conversão é baseada;
  • variants_list: define os idiomas e/ou suas variantes em que a conversão é permitida;
  • show_changes: define se as expressões convertidas devem ser marcadas pelo script com uma classe que possa ser destacada usando CSS;
  • max_seq: define o número máximo de palavras consecutivas (separadas por espaços) que podem formar uma expressão que seja aceita pelo script;
  • help_page: define em que página do projeto está disponível ajuda sobre o sistema de conversão. Se for definida juntamente com help_page_link, será adicionado um link ao menu (cujo texto será help_page_link), apontando para a página de ajuda;
  • show_menu_title: define se o nome da variante atual deve ser exibida no título do menu de seleção.

Sugestões de aprimoramentosEditar

  • Permitir escolher se será exibido o título do menu de conversões, para reduzir os problemas com telas menores, nas quais os novos menus do topo se sobrepõe com "Ler", "Editar", etc...   Feito Outras opções seriam:
    • Definir nomes mais curtos, ou mostrar somente as bandeiras no menu, ou ainda, adotar a estratégia da commons:Template:Ls colocando uma caixa de seleção logo abaixo do título das páginas em que o script for habilitado;
    • Mover os links novamente para a barra lateral (como no Wikisource francês), tornando-o diferente do LanguageConverter do MediaWiki;
  • Conferir e corrigir possível bug que parece impedir a conversão de certas sequências de palavras;
  • Definir a melhor forma de realizar a "localização" do script (provavelmente um objeto redefinido em cada idioma, cujas propriedades sejam os nomes das mensagens e coisas do gênero)
  • Permitir que seja escolhido um "idioma padrão" de modo que (ver comentário no Wikisource Norueguês):
    • Haja apenas uma opção "modernizar" que realizará a modernização para a variante que o leitor tiver definido em suas preferências; ou
    • Tudo seja convertido ao carregar a página sem ter que clicar no menu;
      • Parece resolvido agora que se usa um cookie para guardar no navegador a última variante que foi utilizada para que ela seja usada novamente ao mudar de página;
  • Tornar possível usá-lo para converter o conteúdo da caixa de edição (poderia ser útil para traduções/modernizações)
  • Permitir a indicação de conversões em locais específicos com algo do tipo <span class="only-default" title="<expressão portuguesa> (em Portugal) e <expressão brasileira> (no Brasil)">expressão original</span><span class="only-PT">expressão portuguesa</span><span class="only-BR">expressão brasileira</span> que estaria em uma predefinição para permitir {{Variações|expressão original|pt-PT=expressão portuguesa atual|pt-BR=expressão brasileira atual}}. Ver também m:Meta:Language select, commons:Template:Ls (aprimoramento de m:Template:Ls) e commons:MediaWiki:Multilingual description.js.
    • As classes "only-XX" teriam "display:none" por padrão, estando visíveis apenas para quem definisse uma variante ou quem sabe nos 'tooltips'.
  • Considerar troca da abordagem usada na parte central do script para que ele use a regra "a maior string tem precedência", como no LanguageConverter do MediaWiki (isso traria vantagens para a inclusão de variações de uma palavra (plurais, conjugações dos verbos, etc...)
    • Provavelmente precisaria usar uma função strtr análoga à existente em PHP (ou talvez à preg_replace, no caso de se tentar usar ambas as abordagens. Ver também dicas na zh.wp);
    • Isso possibilitaria a conversão de expressões em que aparecem parêntesis, como "Rato (informática): Mouse"
    • Uma vez alterada a abordagem, pode-se considerar a possibilidade de oferecer suporte ao uso de expressões regulares nos dicionários (conforme sugerido aqui), ou em um dicionário a parte, editável apenas por admins (por questões de segurança), ou no próprio script de modo similar ao que se faz atualmente com a variável "ws_typo".
      • Isso reduziria o número de regras necessárias para incluir certas conversões
      • Poderia ser menos eficiente do que substituições simples (confirmar).

ImplementadasEditar

  • Criar mecanismo semelhante à sintaxe do conversor de idiomas do MediaWiki que permite -{marcar determinado texto que não deve ser convertido}-. Possivelmente, será usado algum elemento HTML com uma classe que será detectada pelo script (cujo nome poderá ser personalizado conforme a wiki).
    • Basta adicionar a classe definida na opção no_conversion_class a um elemento e seu conteúdo não será convertido.
  • Adicionar link para uma página de ajuda de cada wiki (isto seria definido por "idioma do conteúdo")   Feito
  • Fazer melhor uso de programação orientada a objetos, escopos etc...   Feito
  • Adicionar um link para mostrar/ocultar conversões (que irá adicionar/remover a classe usada ao elemento bodyContent)
    • Trocar Ids por classes, como em var x = document.getElementById('bodyContent'); x.className += ' <nova classe>';   Feito
  • Implementar algum sistema de fallbacks para:
    • Quando não for especificada a tradução de uma variável, usar a versão em inglês como substituta;   Feito
    • Permitir que um dos dicionários seja "complementar" ao dicionário "principal", sobrescrevendo apenas as regras de conversão que forem distintas entre as variantes do idioma.   Feito
      • Evitaria duplicação de regras idênticas entre os dicionários;
      • Seria preciso obter uma página a mais através da API do MediaWiki (talvez tornando-o mais lento); A API aceita vários títulos em uma única chamada, separados por uma barra vertical "|".

HistóricoEditar

Para checar qual a versão do script que está em execução em uma página na qual ele esteja ativado, coloque o seguinte código na barra de endereços:

javascript:alert(LanguageConverter.version)
Versão 2.x
  • 2.15: Substituição de algumas funções de configuração por uma equivalente em jQuery (reduzindo o tamanho do código)
  • 2.5: Correção para que o conteúdo de tags <span class="v-...">...</span> criadas pelo script não seja convertido (excedia o limite de profundidade na recursão feita pela lc.conv_node_from_dic)
  • 2.4: Correção de problema com dicionários externos
  • 2.3: Uso de um cookie para guardar a última variante selecionada
  • 2.2: Adição de suporte ao uso de vários dicionários para cada variante/idioma (por exemplo para ter um dicionário principal e outro(s) secundário(s) para regras de algum tipo específico)
  • 2.1: Adição de suporte ao uso de dicionários mantidos em outros wikiprojetos
  • Melhor uso de objetos JavaScript e closures
  • Uso de jQuery em alguns lugares;
  • Adição de link para uma página de ajuda (por wikiprojeto)
  • Melhor suporte à criação de dicionários locais em páginas específicas;
  • Otimização de algumas partes e correção de alguns bugs;
  • Melhoria no suporte à conversão de expressões com mais de uma palavra;
  • Adição de parâmetro para personalizar o conjunto de páginas em que o script deve ser habilitado (por espaços nominais e/ou marcação de páginas individualmente);
  • Adição de suporte aos //comentários no fim das linhas do dicionário;
  • Expansão dos conjuntos de caracteres aceitos (os "alfabetos" usado pelo script);
  • Adição de "spinner" durante a conversão;
  • Melhoria na documentação interna do script seguindo convenções do JSDoc;
  • Adição de tratamento de erros ao realizar a conversão de cada expressão;
  • Suporte a vários idiomas e variantes (francês, norueguês, português e galego);
  • Uso do parâmetro "variant" na URL para definir a variante do português para a qual deve ser feita a conversão;
  • Adoção dos menus no topo como no conversor de idiomas do MediaWiki;
  • Adição de spans em torno do texto convertido, para facilitar a visualização das mudanças ("diff" básico);
  • Tradução e adição de suporte básico para o português brasileiro;
Versão 1.0, criada pelo ThomasV

Onde ele é usado?Editar

Aqui no Wikisource lusófono, o script está ativo em todas as páginas que incluem a {{Modernização automática}}.

Se estiver usando o script em outro projeto, adicione o seguinte comentário, para que ele apareça na lista de uso global do script:

// [[File:User:He7d3r/Tools/LanguageConverter.js]] (workaround for [[phab:T35355]])

ou acrescente abaixo seu nome e uma ligação para a página correspondente, assim poderá ser avisado no caso de atualizações:

Script Usuário
w:MediaWiki:Gadget-LanguageConverter.js Quaisquer wikipedistas
b:MediaWiki:Gadget-LanguageConverter.js Quaisquer wikilivristas
w:es:User:Eduardo_P/vector.js Eduardo P
no:User:V85/vector.js V85
no:User:Anjar/vector.js Anjar