Pular para o conteúdo principal

Metadados e Traduções

Tradutor do Omeka S

O Omeka S possui um sistema de tradução centralizado baseado em gettext. Cada módulo e tema pode fornecer arquivos .po e .mo com traduções para diferentes idiomas. O helper $this->translate() acessa estas traduções em tempo de execução.

Quando o tema ou um template chama $this->translate('Texto'), o Omeka S busca a tradução nos arquivos de idioma carregados. A ordem de precedência é: tema primeiro, depois módulos, depois core. Se nenhuma tradução for encontrada, o texto original é retornado.

Para vocabulários de metadados como Dublin Core, o Omeka S armazena os labels em inglês no banco de dados. O tradutor do Omeka S deve fornecer a tradução destes labels através dos arquivos de idioma. Quando um template exibe $property->label(), o valor vem do banco e pode ser traduzido via $translate().

Fallback do tema

Arquivo view/common/property-translations.php fornece um fallback estático para labels de propriedades que o tradutor do Omeka S não resolve. Este arquivo é carregado via require_once em templates que precisam de traduções de metadados.

Como foi construído

O arquivo define um array global $GLOBALS['propertyTranslationMap'] mapeando termos de propriedade para labels em português. O array cobre múltiplos vocabulários:

  • Dublin Core Terms: 55 termos de dcterms:
  • Dublin Core: 15 termos de dc:
  • Friend of a Friend: 5 termos de foaf:
  • SKOS e RDFS: 4 termos
  • schema.org: 8 termos
  • BIBO: 75 termos bibliográficos

Exemplo de estrutura:

$GLOBALS['propertyTranslationMap'] = [
'dcterms:title' => 'Título',
'dcterms:creator' => 'Criador',
'bibo:author' => 'Autor',
'bibo:isbn' => 'ISBN',
];

Como usar como desenvolvedor

Templates que exibem metadados de recursos carregam o arquivo e usam o mapeamento:

require_once __DIR__ . '/property-translations.php';
$translationMap = &$GLOBALS['propertyTranslationMap'];

$propertyTerm = 'dcterms:title';
if (isset($translationMap[$propertyTerm])) {
$label = $translationMap[$propertyTerm]; // 'Título'
} else {
$label = $translate($rawLabel); // Fallback para tradutor do Omeka
}

Consumidores deste fallback:

  • view/common/resources/meta.phtml: exibição de metadados de itens e coleções
  • view/omeka/site/index/search.phtml: filtros de busca

Extensão do mapeamento

Para adicionar traduções de novos vocabulários:

  1. Edite view/common/property-translations.php
  2. Adicione entradas ao array $GLOBALS['propertyTranslationMap']
  3. Use o prefixo do vocabulário seguido do termo: 'prefix:termo' => 'Tradução'

O mapeamento estático é consultado antes do tradutor do Omeka S. Se o termo existe no array, a tradução do array é usada. Se não existe, o sistema recorre ao tradutor ou ao label bruto do banco.

Exibição de metadados

Arquivo view/common/resources/meta.phtml renderiza metadados de itens e coleções em formato tabular. Este partial consome o fallback de traduções para labels de propriedades.

Estrutura de renderização

O partial recebe um recurso e opcionalmente coleções associadas. Ele itera sobre $resource->values(), obtém o termo de cada propriedade, e busca a tradução no mapeamento. Valores são renderizados via asHtml() com ajustes para URIs receberem sublinhado.

Layout de duas colunas

Metadados são distribuídos em duas colunas. A primeira coluna exibe campos principais em ordem fixa: título, data, criador, assunto, formato, editor, tipo, direitos. A segunda coluna exibe propriedades restantes.

O controle de quais campos aparecem na primeira coluna é feito via array $firstColumnFields e mapeamento $fieldTermMapping no próprio partial. Cada campo pode mapear para múltiplos termos de vocabulário.

URI styling

Valores do tipo URI recebem classe CSS underline! para indicar que são links:

if ($value->type() === 'uri') {
$valueString = preg_replace(
'/(<a\s+[^>]*class=["\'])([^"\']*)(["\'])/i',
'$1$2 underline!$3',
$valueString,
1
);
}

Integração com templates

Templates de item e item-set incluem o partial de metadados passando contexto:

echo $this->partial('common/resources/meta', [
'item' => $item,
'itemSets' => $itemSets,
'filterLocale' => $filterLocale,
'lang' => $lang,
]);

O partial carrega property-translations.php, processa valores do recurso, aplica traduções, e renderiza HTML estruturado com classes Tailwind para estilização.