Visão geral - estrutura do banco de dados

QTranslate

O QTranslate não gera nenhuma tabela nova no banco.

Ele usa um padrão de shortcodes para quebrar os textos do banco de dados em várias linguagens em um mesmo registro e depois faz um parse, ex:

<--:en-->english text<!--:--><--:de-->german text<!--:-->

WPML

O WPML cria várias tabelas adicionais a instalação do WordPress?.

Ao todo são 16 tabelas extras!

wp_icl_cms_nav_cache wp_icl_content_status wp_icl_core_status wp_icl_flags wp_icl_languages wp_icl_languages_translations wp_icl_locale_map wp_icl_message_status wp_icl_node wp_icl_plugins_texts wp_icl_reminders wp_icl_string_positions wp_icl_string_status wp_icl_string_translations wp_icl_strings wp_icl_translations

Nessas tabelas ficam gravadas todas as traduções de posts, taxonomia e strings. No caso de posts e taxonomia ficam gravadas as relações entre os posts que são traduções uns dos outros.

proposta

A proposta desse plugin é, idealmente, não criar nenhuma tabela extra e criar um post_type "translation" para as traduções de posts.

Criar um custom_post_type para cada idioma de post_type. * Exemplo

page --- page_en

page_es

post --- post_en

post_es

Não será possivel usar o post_parent para relacionamento com as traduções pois o tipo página já utiliza para hierarquia.

Tradução de posts

QTranslate

Utiliza seu sistema de tag para dividir o conteúdo do post em um mesmo registro.

Na interface de edição de post tem uma série de javascripts que reconstroem o editor dividindo as linguagens do titulo, conteudo e excerpt do post.

Na hora de exibir faz parse desses conteúdos.

WPML

Guarda na tabela icl_translations as seguintes informações:

* translation_id – serial number * element_type – the type of the element * element_id – the ID of the item * trid – the ID of the translation group * language_code – language code of the item * source_language_code – if translated, the language of the original item

Na tabela de posts, cria vários posts do post_type 'post' e depende das informações acima para saber se um post é apenas uma tradução de outro post.

proposta

Para cada post de tradução, criar um novo post com post_type "translation", ou "post_en" e post_meta indicando de qual post ele é uma tradução.

Ter um post_name (slug) independente para que as URLs fiquem consistentes (nenhum dos outros dois plugins faz isso.

Tradução de Tags e Categorias

QTranslate

Cria uma opção na tabela wp_options chamada "qtranslate_term_name" que guarda um dicionário de dicionários com as traduçoes dos termos (tanto categorias como tags). O índice que ele usa é o slug do termo.

WPML

Da mesma maneira que faz com posts

proposta

Algo semelhante ao que o QTranslate faz ou criarmos mais uma coluna dentro da tabela de terms

Tradução de Configurações e textos em geral

QTranslate

Não faz. Vc precisa digitar as tags de idiomas dele na mão.

WPML

Tem uma tabela para tradução de strings, na qual você pode registrar qualquer string do site para ser traduzido. Desenvolvedores de plugins podem usar a API para registrar strings para serem traduzidas pela interface do WPML.

proposta

Gravar novos valores para todas as entradas da tabela wp_options. Ou como um novo registro com o sufixo _{LANGUAGE}.

Na interface de edição o usuário sempre escolherá qual é o idioma que ele está editando (estilo QTranslate). A interface exibirá, então, a entrada na tabela wp_options da linguagem atual.

O plugin apresentará opção para troca do idioma de administração do WordPress? estilo QTranslate.

Dessa maneira, com filtros nas funcoes get_option e update_option, conseguimos traduzir todos os textos, inclusive de widget e temas que não necessariamente foram criados com este suporte.

Preferencialmente será submetido um patch para o core do WP para permitir construir mais facilmente o hook no get_option e update_option.