Por que meu aplicativo não carrega os arquivos de tradução do lib

1

Eu tenho um aplicativo de clique que depende de alguma lib,
e eu tenho o pacote que lib no pacote de clique.
a lib carregou bem. mas o arquivo de traduções (.mo) não é fundado.
meu arquivo de clique livre se parece com isso:

/
/share
/share/locale/<LANG>/LC_MESSAGES/somlib.mo
/lib/i386-linux-gnu/somelib.so

Claro, há mais arquivos, mas isso é o que eu acho relevante para a pergunta.

Eu também tento colocá-lo em /usr/share/locale/<LANG>/LC_MESSAGES/somlib.mo

mas o que eu encontrei, que o lib tenta encontrar os arquivos de traduções em real /usr/share/locale/... o que eu não tenho acesso a ele, com o pacote click para colocar arquivos lá ... < br> (eu copio os arquivos para este caminho com mv , e é trabalho)

Eu tentei usar strace para saber onde essa biblioteca procura seus arquivos, mas não sei como fazer isso no telefone (usando emulador). tentando strace qmlscene me deu erro que eu tenho que conectar ao servidor mir, ou algo parecido.

Obrigado.

    
por avi software 19.06.2015 / 10:51

1 resposta

2

O diretório em que o gettext pesquisará por um domínio de tradução específico é controlado pelo bindtextdomain função. A biblioteca provavelmente tem uma chamada para essa função em algum lugar em suas rotinas de inicialização. Então, duas opções que você pode tentar são:

  1. Modifique a biblioteca para que a chamada bindtextdomain especifique um diretório baseado em $APP_DIR . Então, onde a biblioteca pode ser executada:

    bindtextdomain (PACKAGE, PACKAGE_LOCALE_DIR);
    

    Você pode alterá-lo para algo como:

    const char *app_dir = getenv("APP_DIR");
    if (app_dir) {
        char *localedir = NULL;
        asprintf(&localedir, "%s/share/locale", app_dir);
        bindtextdomain(PACKAGE, localedir);
        free(localedir);
    } else {
        /* Not running as a click package: use compiled in default */
        bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR);
    }
    
  2. Faça uma segunda chamada para bindtextdomain que será executada após a inicialização da biblioteca que define o diretório correto para o domínio de tradução da biblioteca (possivelmente usando código semelhante ao acima).

É difícil oferecer mais conselhos sem saber mais sobre os detalhes.

    
por James Henstridge 22.06.2015 / 16:44