Elimine arquivos de idiomas individuais quando desnecessários em help.ubuntu.com

1

Os documentos de ajuda da área de trabalho do Ubuntu e o Ubuntu Serverguide são publicados no site help.ubuntu.com em aproximadamente 60 idiomas (embora muitos traduções são muito incompletas). O fluxo de trabalho de compilação de documentos é um pouco exagerado, porque faz versões de idiomas específicos de cada arquivo, mesmo que sejam idênticos para todos os idiomas. Por exemplo:

doug@s15:~/docs-trunk/z/html/ubuntu-docs$ ls -l *yelp-note-warning*
-rw-r--r-- 1 doug doug 1088 Mar 13 23:55 yelp-note-warning.png.am
-rw-r--r-- 1 doug doug 1088 Mar 13 23:55 yelp-note-warning.png.ar
-rw-r--r-- 1 doug doug 1088 Mar 13 23:55 yelp-note-warning.png.ast
-rw-r--r-- 1 doug doug 1088 Mar 13 23:55 yelp-note-warning.png.az
...
-rw-r--r-- 1 doug doug 1088 Mar 13 23:55 yelp-note-warning.png.ur
-rw-r--r-- 1 doug doug 1088 Mar 13 23:55 yelp-note-warning.png.uz
-rw-r--r-- 1 doug doug 1088 Mar 13 23:55 yelp-note-warning.png.zh-CN
-rw-r--r-- 1 doug doug 1088 Mar 13 23:55 yelp-note-warning.png.zh-HK
-rw-r--r-- 1 doug doug 1088 Mar 13 23:55 yelp-note-warning.png.zh-TW

Para esse arquivo, seria adequado ter apenas um arquivo chamado yelp-note-warning.png

Para completar, um exemplo em que não poderíamos criar apenas um arquivo:

doug@s15:~/docs-trunk/z/html/ubuntu-docs$ ls -l figures/unity-workspace-intro*
-rw-r--r-- 1 doug doug 48077 Mar 13 23:55 figures/unity-workspace-intro.png.am
-rw-r--r-- 1 doug doug 48077 Mar 13 23:55 figures/unity-workspace-intro.png.ar
-rw-r--r-- 1 doug doug 48077 Mar 13 23:55 figures/unity-workspace-intro.png.ast
...
-rw-r--r-- 1 doug doug 48077 Mar 13 23:55 figures/unity-workspace-intro.png.da
-rw-r--r-- 1 doug doug 64335 Mar 13 23:55 figures/unity-workspace-intro.png.de
-rw-r--r-- 1 doug doug 48077 Mar 13 23:55 figures/unity-workspace-intro.png.el
...
-rw-r--r-- 1 doug doug 48077 Mar 13 23:55 figures/unity-workspace-intro.png.id
-rw-r--r-- 1 doug doug 47152 Mar 13 23:55 figures/unity-workspace-intro.png.it
-rw-r--r-- 1 doug doug 48077 Mar 13 23:55 figures/unity-workspace-intro.png.ja
...
-rw-r--r-- 1 doug doug 48077 Mar 13 23:55 figures/unity-workspace-intro.png.zh-HK
-rw-r--r-- 1 doug doug 48077 Mar 13 23:55 figures/unity-workspace-intro.png.zh-TW

Minha pergunta é: Como podemos identificar que todos os arquivos são idênticos e, em caso positivo, substituí-los por um arquivo sem um sufixo específico do idioma?

pseudocódigo:

For all files, including sub-folders{
   If all language specific versions of the file are identical{
      Replace the language specific versions with one non-language specific version.
   }
}

No momento, estamos preocupados apenas com os documentos de ajuda da área de trabalho, embora, se algo for descoberto, também o façamos para o Serverguide.

Isso pode ser feito no Makefile, se possível (e preferido). Ou como um script autônomo (que eu suponho que poderia ser chamado do Makefile). Minha preocupação com a escrita de um programa c para ele, é que nem todos os membros da equipe de documentação do Ubuntu são também c programadores, causando uma preocupação potencial de manutenção no caminho. Está previsto, mas não é um requisito, que o novo código, conforme o pseudo código acima, seja adicionado no final da seção de instalação do Makefile:

# Installs all HTML files to a single multilingual directory for subsequent copying to
# the web server document structure (e.g. to run with Apache and MultiViews enabled)
install:
        rm -Rf "$(INSTALLDIR)"/*; \
        mkdir -p "$(INSTALLDIR)"; \
        cp -R "$(HTMLDESTDIR)/"* "$(INSTALLDIR)"; \
        for lc in C $(help_linguas); do \
                lang='echo $$lc | $(SED) -e 's/[@_]/-/''; \
                if test "$$lang" = "C"; then lang=en; fi; \
                if test "$$lang" = "gl"; then lang=gl-GL; fi; \
                if test "$$lang" = "ms"; then lang=ms-MS; fi; \
                if test "$$lang" = "pl"; then lang=pl-PL; fi; \
                cp -af "$(INSTALLDIR)/$$lang"/*.css "$(INSTALLDIR)"; \
                rm -Rf "$(INSTALLDIR)/$$lang"/*.css ; \
                find "$(INSTALLDIR)/$$lang" -type f -exec mv {} {}.$$lang \; ; \
                cp -af "$(INSTALLDIR)/$$lang"/* "$(INSTALLDIR)"; \
                rm -Rf "$(INSTALLDIR)/$$lang" ; \
        done
        ... new code, per this question, goes here ...

EDIT: A solução de Gunnar é ótima, mas ainda existem outros arquivos que são redundantes. Arquivos All.js por exemplo, e ainda alguns arquivos .png no diretório principal.

EDIT: A solução revisada de Gunnar aborda todos os problemas, para uma economia líquida de 3326 arquivos a menos apenas para as páginas da Web de 17.04 desktops.

Referências:
The html compile Makefile . (veja o segmento install no final). Todo o código do projeto . O procedimento de compilação .
O arquivo .htaccess do site . A resposta de Gunnar depende do fallback da linguagem.

    
por Doug Smythies 14.03.2017 / 19:03

1 resposta

1

Eu fiz uma tentativa de corrigi-lo:

link

Ele mantém a extensão .en e depende do arquivo .htaccess como fallback.
A primeira tentativa resultou em sempre obter a versão do arquivo .png que não tinha extensão de idioma, não importa qual idioma real estava sendo solicitado, a segunda tentativa tem .png.en como a extensão de arquivo genérico e se baseia no arquivo .htaccess do site LanguagePriority fallabck diretiva para fornecer esse arquivo em situações onde não há um específico para esse idioma desejado.
Exemplo:

-rw-rw-r-- 1 doug doug  64335 Mar 14 19:50 unity-workspace-intro.png.de
-rw-r--r-- 1 doug doug  48077 Mar 14 19:50 unity-workspace-intro.png.en
-rw-rw-r-- 1 doug doug  47152 Mar 14 19:50 unity-workspace-intro.png.it

O alemão obterá o arquivo .png.de, o italiano o arquivo .png.it e qualquer outro pedido de idioma receberá o arquivo .png.en.

    
por Gunnar Hjalmarsson 15.03.2017 / 01:01