Fazer aplicação detectar automaticamente a linguagem do sistema

2
  1. O que um aplicativo deve desenvolver em um sistema Linux como o Ubuntu para detectar automaticamente a linguagem do sistema? Existem aplicativos, como o Liferea, que alteram automaticamente seu idioma para corresponder ao do sistema, sem alterar qualquer preferência do próprio programa: o comportamento "padrão" para todos os programas?

  2. Deve haver uma opção no programa para permitir que o usuário escolha o idioma mesmo assim?

  3. Todas essas traduções acompanham o próprio programa? E se o usuário definiu um idioma do sistema não disponível nas traduções do programa?

  4. O Ubuntu ou a maioria das distribuições Linux são específicas?

por hytromo 07.10.2012 / 11:01

2 respostas

2

Eu sei que o desenvolvimento de aplicativos com o Quickly e o suporte ao Launchpad Traduções para fazer isso. Eu não sou especialista, então confira esses links além da minha resposta:

link

link

Meu aplicativo importa o módulo gettext que me permite marcar strings que serão exibidas ao usuário no programa. Quando meu programa é submetido ao Launchpad via Quickly, o Launchpad é configurado para varrer automaticamente o código-fonte e gerar arquivos de modelo de tradução especiais para as cadeias marcadas. Os usuários do Kindpad Kind (ou o desenvolvedor) podem usar o modelo para gerar traduções para cada string e idioma que desejarem. Esses arquivos de tradução podem então ser sincronizados com sua ramificação de origem e mesclados antes do lançamento. No tempo de execução, o módulo gettext substitui as cadeias marcadas pela tradução apropriada com base na localidade do seu sistema.

Para resumir, segue uma lista do processo:

  • importe o gettext para o seu programa
  • Marcar strings que precisam ser traduzidas
  • Configurar traduções no Launchpad
  • Traduza modelos e sincronize com a fonte

Aqui está o cabeçalho do meu programa onde eu importo o gettext através do local (note que Quickly adiciona tudo isso para mim! locale e bindtextdomain são adicionados porque está sendo colocado em /opt/extras.ubuntu.com eu acho):

import locale
from locale import gettext as _
locale.bindtextdomain('drawers', '/opt/extras.ubuntu.com/drawers/share/locale')
locale.textdomain('drawers')

Agora, basta marcar o texto a ser traduzido com _("text to be translated") em todo o meu programa.

    
por Ian B. 08.10.2012 / 22:53
0

No futuro, mesmo se eles estiverem relacionados, sugiro abrir perguntas separadas para cada um. De qualquer forma, vou tentar respondê-las:

  

O que um aplicativo deve desenvolver em um sistema Linux como o Ubuntu para detectar automaticamente a linguagem do sistema?

Você só precisa inicializar gettext no seu aplicativo. O Gettext é a tecnologia padrão de internacionalização e localização do Ubuntu e da grande maioria das outras distros baseadas em Linux (se considerarmos Android uma distro, então seria a única exceção).

No caso mais básico, e usando o Python

import gettext
from gettext import gettext as _
locale.bindtextdomain('yourapp', '/usr/share/locale')
locale.textdomain('yourapp')

Notas:

  • No Python, para oferecer suporte à instalação de /opt , você precisará usar a biblioteca locale em vez de gettext (para fins práticos, eles são equivalentes)
  • Existem ligações gettext para praticamente qualquer linguagem de programação, não apenas Python.
  

Este deve ser o comportamento "padrão" para todos os programas?

Sim.

  

Deve haver uma opção no programa para permitir que o usuário escolha a linguagem mesmo assim?

Não. Se você quiser ter essa opção, estará por conta própria e terá que implementá-la por conta própria. A convenção é que há apenas um idioma por usuário e você altera isso apenas em um lugar, afetando todos os aplicativos no sistema.

  

Todas essas traduções acompanham o próprio programa?

Sim, eles são enviados junto com o aplicativo como arquivos binários .mo , um para cada idioma traduzido.

  

E se o usuário tiver definido um idioma do sistema não disponível nas traduções do programa?

O padrão para gettext é usar o inglês como fallback.

  

Este Ubuntu ou a maioria das distribuições Linux é específica?

Este é o comportamento padrão para distribuições Linux.

    
por David Planella 09.10.2012 / 12:53