HXL-CPLP / forum

Fórum do Grupo de Usuários do Padrão HXL da Comunidade dos Países de Língua Portuguesa, "HXL-CPLP"
https://github.com/HXL-CPLP/forum/issues
The Unlicense
2 stars 0 forks source link

Convenção de tags HXL em conjunto de dados para armazenar Memória de Tradução (eng: HXL translation memory TM) #58

Open fititnt opened 3 years ago

fititnt commented 3 years ago

Vide:

TODO: adicionar mais informações

fititnt commented 3 years ago
Codicem,Res Wikidata codicem,"Meta, situs interretialis",Latine linguam,Latine linguam (meta),Lingua Lusitana,Lingua Lusitana (meta),Lingua Anglica,Lingua Anglica (meta),Lingua Hispanica,Lingua Hispanica (meta)
#item+id,#meta+wikidata+code+list,#meta+item+url+list,#item+i_la+i_lat+is_latn,#meta+item+i_la+i_lat+is_latn,#item+i_pt+i_por+is_latn,#meta+item+i_pt+i_por+is_latn,#item+i_en+i_eng+is_latn,#meta+item+i_en+i_eng+is_latn,#item+i_es+i_spa+is_latn,#meta+item+i_es+i_spa+is_latn
API_anglicum_abbreviationem,,,API,,API,,API,,,

vs

#item+id,#item+i_la+i_lat+is_latn,#item+i_pt+i_por+is_latn,#item+i_en+i_eng+is_latn,#item+i_es+i_spa+is_latn
API_anglicum_abbreviationem,API,API,API,
canonicum_URL_nomen,Canonicum URL,URL canônica,Canonical URL,

Captura de tela de 2021-05-26 23-35-18

Captura de tela de 2021-05-26 23-34-22

fititnt commented 3 years ago

Ferramentas de traduções as vezes chaman de 'domain' um tipo de agrupamento de informação dentro de um sofware, vide https://man7.org/linux/man-pages/man3/gettext.3.html#:~:text=A%20message%20domain%20is%20a,through%20a%20preceding%20textdomain%20call.

Ainda que seja meio 'exagerado' para usar fora do HXL-CPLP, creio que vamos deixar a planilha com agrupamentos que se inspiram na forma como latim é usado na taxonomia.

Categoriae_taxonomicae_la

fititnt commented 3 years ago

Captura de tela de 2021-05-27 22-07-59

fititnt commented 3 years ago

Dois pontos

Estratégia para representar "" (string vazia)

Precisamos de alguma forma de representar string vazia que é intencionalmente vazia e não uma falta de tradução.

Sem isso programas vão acabar entrando em modo de fallback.

Estratégia de escolher "qual idioma de fallback" para strings não traduzidas

Creio que exceto para relações mais obvias (exemplo: mesma língua, apenas outro script) a gente tenda a dar fallback por sistema de escrita.

Ou seja, se estiver usando Latn

fititnt commented 3 years ago

[()] sendo usado para representar vazio intencional

Captura de tela de 2021-05-29 18-32-57

fititnt commented 3 years ago

A nova implementação usando Emojis ainda não está pronta. Porém o https://hapi.etica.ai/mappam-situm.html está sendo usando temporariamente como área de testes para futura documentação.

Algo que está precisando de especial atenção é que depurar Tags Liquid não é muito amigável. Então toda implementação que estamos fazendo da primeira versão que usa as memórias de tradução devem tentar ajudar ao máximo encontrar exatamente onde estão erros. E possivelmente tolerar eles de forma aceitável em vez de quebrar catastroficamente toda produção de arquivos derivados.

Captura de tela de 2021-05-30 17-07-17

fititnt commented 3 years ago

Que MARAVILHA!

Descobri que via estratégias como esta aqui https://fettblog.eu/snippets/jekyll/liquid-in-frontmatter/ é possível usar tags liquid até mesmo em data files.

Some-se a isso que estamos usando planilhas na nuvem para adicionar tradução/localização, com essa nova abordagem permitiria reuso ainda mais intenso de variáveis e com menos programação necessária!!!

Captura de tela de 2021-06-03 19-40-28

Pontos de desafio

Tecnicamente isso significa que o https://github.com/HXL-CPLP/Auxilium-Humanitarium-API vai precisar de tema Jekyll criado especialmente para ele. Porém isso se paga mais tarde em alta reusabilidade!!!

fititnt commented 3 years ago

Ok, AGORA SIM! Podemos usar tags liquid até mesmo em data files!!! 🚀 <3

A forma como isso é feita é um tanto... peculiar. Mas funciona!.

Vou deixar aqui pois é algo que não encontrei explicado para quem usa Jekyll

Explicação

Etapa 1: usa próprio jekyll para gerar arquivos json finais, como se fossem páginas do site

A primeira vez que o site é construido, ele vai gerar os arquivos em /data/ (site publico)

Captura de tela de 2021-06-05 02-04-44

Porém, a geração das paginas de API vão falhar, com a mensagem de erro [🔎ℹ️ Hapi::HapiApiGenerator:29] requīrendum: 'bundle exec jekyll build' !!!

Captura de tela de 2021-06-05 02-01-45

Etapa 2, alternativa A: caso esteja usando jekyll para GitHub pages

O GitHub pages roda bundle exec jekyll build antes de realmente ser publicado o site

# .github/workflows/05-deploy-github-pages.yml

# (...)

      - uses: ruby/setup-ruby@v1
        with:
          ruby-version: 3.0 # Not needed with a .ruby-version file
          bundler-cache: true # runs 'bundle install' and caches installed gems automatically
      # - run: bundle exec rake

      # 🐉 hic sunt dracones 🐉
      # To allow use liquid variables _even_ on data files, we
      #   1. build site once, and copy data to from
      #        _site/data/*.l10n.json =>  _data/*.l10n.json
      #   2. Then the real build will use the *.l10n.json, and ignore the
      #      source files
      - name: "Steps before Jekyll: bundle exec jekyll build"
        run: bundle exec jekyll build
        continue-on-error: true

(...)

Etapa 2, alternativa B: caso esteja testando localmente

Se estiver testando localmente usando bundle exec jekyll serve --watch, a primeiríssima vez modificar qualquer arquivo no disco para ele usar o que foi construido imeditamente antes.

Sim, tecnicamente o 'build' dos data files com as tags liquid esta sempre um passo atrasado. Tentei fazer automático, mas é complicado :(

Resultado final

Nesse exemplo, o site irá exibir todas as páginas adicionais que foram ignoradas na primeira etapa.

Captura de tela de 2021-06-05 02-02-15

Como eu disse, funciona. É gambiarra, mas funciona.

fititnt commented 3 years ago

NOSSA SENHORA! E não é que funciona muito bem!?

refs

Depois de um bom tempo apenas programando e preparando as coisas, somente agora que esta dando para ver o resultado. Mas se além exportar, ficar um pouco mais fácil re-sincronizar os trabalhos que forem feitos no MateCat de volta, a gente aqui do HXL-CPLP vai conseguir manter um serviço super profissional, mesmo que para maioria das línguas seriam pessoas voluntárias.


Exemplum: okf_table_src-tab-trg


### ACTUM I

hxlspec _hxltm/exemplum/hxltm_2_okf_table_src-tab-trg.hxlspec.json > _hxltm/out/hxltm_2_okf_table_src-tab-trg_temp1.csv

head -n4  _hxltm/out/hxltm_2_okf_table_src-tab-trg_temp1.csv
#    pt,en,Comment
#    #x_target,#x_source,#x_comment
#    Língua portuguesa (alfabeto latino),English language (Latin script),Q1|https://github.com/HXL-CPLP/forum/issues/58|https://example.org|∅
#    por-Latn,eng-Latn,||∅

### ACTUM II
# _[eng-Latn] Since we have different column order, we enforce it here [eng-Latn]_
csvcut -c en,pt,Comment _hxltm/out/hxltm_2_okf_table_src-tab-trg_temp1.csv > _hxltm/out/hxltm_2_okf_table_src-tab-trg_temp2.csv

head -n4 _hxltm/out/hxltm_2_okf_table_src-tab-trg_temp2.csv
#    en,pt,Comment
#    #x_source,#x_target,#x_comment
#    English language (Latin script),Língua portuguesa (alfabeto latino),Q1|https://github.com/HXL-CPLP/forum/issues/58|https://example.org|∅
#    eng-Latn,por-Latn,||∅

### ACTUM III
# _[eng-Latn] Remove only the '#x_target,#x_source,#x_comment' line [eng-Latn]_

sed -i '2d' _hxltm/out/hxltm_2_okf_table_src-tab-trg_temp2.csv
#    en,pt,Comment
#    English language (Latin script),Língua portuguesa (alfabeto latino),Q1|https://github.com/HXL-CPLP/forum/issues/58|https://example.org|∅
#    eng-Latn,por-Latn,||∅
#    English language,Língua portuguesa,||∅

### ACTUM IV
# _[eng-Latn] hen, generate a Tab-separed CSV (a TSV) [eng-Latn]_
csvformat --out-tabs _hxltm/out/hxltm_2_okf_table_src-tab-trg_temp2.csv > _hxltm/out/hxltm_2_okf_table_src-tab-trg.tsv

head -n4 _hxltm/out/hxltm_2_okf_table_src-tab-trg.tsv
#    en pt  Comment
#    English language (Latin script)    Língua portuguesa (alfabeto latino) Q1|https://github.com/HXL-CPLP/forum/issues/58|https://example.org|∅
#    eng-Latn   por-Latn    ||∅
#    English language   Língua portuguesa   ||∅

### ACTUM V
# _[eng-Latn] Create an XLIFF 2 file [eng-Latn]_

sh /opt/okapi/tikal.sh -x _hxltm/out/hxltm_2_okf_table_src-tab-trg.tsv -fc okf_table_src-tab-trg -nocopy
#    -------------------------------------------------------------------------------
#    Okapi Tikal - Localization Toolset
#    Version: 2.1.41.0
#    -------------------------------------------------------------------------------
#    Extraction
#    Source language: en
#    Target language: pt-BR
#    Default input encoding: UTF-8
#    Filter configuration: okf_table_src-tab-trg
#    Output: /workspace/git/HXL-CPLP/Auxilium-Humanitarium-API/_hxltm/out/hxltm_2_okf_table_src-tab-trg.tsv.xlf
#    Input: /workspace/git/HXL-CPLP/Auxilium-Humanitarium-API/_hxltm/out/hxltm_2_okf_table_src-tab-trg.tsv
#    Done in 0.772s

_hxltm/out/hxltm_2_okf_table_src-tab-trg.tsv.xlf

<?xml version="1.0" encoding="UTF-8"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:okp="okapi-framework:xliff-extensions" xmlns:its="http://www.w3.org/2005/11/its" xmlns:itsxlf="http://www.w3.org/ns/its-xliff/" its:version="2.0">
<file original="_hxltm/out/hxltm_2_okf_table_src-tab-trg.tsv" source-language="en" target-language="pt-BR" datatype="x-text/csv" okp:inputEncoding="UTF-8">
<body>
<group id="3" restype="row">
<trans-unit id="1">
<source xml:lang="en">en</source>
<target xml:lang="pt-BR">pt</target>
<note>Comment</note>
</trans-unit>
</group>
<group id="6" restype="row">
<trans-unit id="2">
<source xml:lang="en">English language (Latin script)</source>
<target xml:lang="pt-BR">Língua portuguesa (alfabeto latino)</target>
<note>Q1|https://github.com/HXL-CPLP/forum/issues/58|https://example.org|∅</note>
</trans-unit>
</group>
<!-- (...) -->

<group id="438" restype="row">
<trans-unit id="129">
<source xml:lang="en">This division includes activities of households as employers of domestic personnel. Furthermore, it includes the undifferentiated subsistence goods-producing and services producing activities of households.</source>
<target xml:lang="pt-BR"></target>
</trans-unit>
</group>
<group id="441" restype="row">
<trans-unit id="130">
<source xml:lang="en">This class includes activities (...)</source>
<target xml:lang="pt-BR"></target>
</trans-unit>
</group>
</body>
</file>
</xliff>

Captura de tela de 2021-06-27 01-11-39

Captura de tela de 2021-06-27 01-11-58

fititnt commented 2 years ago

Estou tendo que investigar alguma solução para abrir arquivos com extensão .tbx.

OmegaT

Fiz um teste de 10 minutos, usando sudo snap install omegat-cat. O arquivo IATE_export.tbx de 1.3GB talvez até seja suportado, mas modo somente leitura e somente se ele, em teoria, encontrar os termos.

Então, não é muito ideal para visualizar.

virtaal

A versão .exe, abrindo com Wine, parece não entender o arquivo IATE_export.tbx de 1.3GB (porém é uma versão de quase 10 anos, pelo jeito!). Porém talvez a versão re-escrita que suporta python3 consiga fazê-lo.

É algo para tentar em outro momento.