it-swarm-es.tech

Identificar y localizar cadenas de traducción faltantes en joomla 3

En mi sitio tengo 2 idiomas, noruego e inglés. Estoy desarrollando un nuevo componente con un creador de componentes, pero tengo un problema con la traducción: los archivos en inglés se actualizan con nuevas líneas, mientras que actualizo manualmente la traducción al noruego.

En versiones anteriores de Joomla, era bastante fácil detectar cadenas faltantes, ya que la constante de traducción siempre se mostraba. Sin embargo, a partir de joomla 3.2 ( http://docs.joomla.org/Specification_of_language_files ) la traducción al inglés siempre se usa como reserva si no se encuentra la cadena de idioma correcta. Entonces, para encontrar manualmente la cadena que falta, tengo que buscar en el archivo de traducción en inglés el valor que se muestra, y para cada hit en esta búsqueda, verifique si la constante de traducción existe en el archivo de idioma noruego.

Con suerte, hay una mejor manera de localizar las cadenas de traducción que faltan, ¿alguien puede ayudar?

3
jonasfh

Tengo un par de scripts de fidelidad (linux) para aliviar el dolor de mantener actualizados los archivos de idioma:

Para extraer etiquetas de un componente:

#!/bin/bash

find .../TEMP/com_mycomponent -name "*.php" | xargs grep -o 'COM_MYCOMPONENT_[A-Z0-9\_]\+' | cut -d':' -f2 | sort -u > tags
find .../TEMP/com_mycomponent -name "*.xml" | xargs grep -o 'COM_MYCOMPONENT_[A-Z0-9\_]\+' | cut -d':' -f2 | sort -u >> tags

Para buscar duplicados, etiquetas faltantes o diferencias de contenido:

    // Duplicated check

$ini_file = file_get_contents("es-ES.com_mycomponent.ini");
$ini_lines = explode("\n", $ini_file);
$duplicated = array();

foreach ($ini_lines as $line)
{
    $parts = explode('=', $line);

    if (count($parts) != 2)
    {
        continue;
    }

    $k = $parts[0];
    $v = $parts[1];

    if (array_key_exists($k, $duplicated))
    {
        echo 'DUPLICATED: ' . $k . '=' . $duplicated[$k] . "\n";
        echo 'DUPLICATED: ' . $k . '=' . $v . "\n";
    }
    else
    {
        $duplicated[$k] = $v;
    }
}

// Parse without sections
$ini_array1 = parse_ini_file("en-GB.com_mycomponent.ini");
$ini_array2 = parse_ini_file("es-ES.com_mycomponent.ini");

$ini_array1k = array_keys($ini_array1);
$ini_array2k = array_keys($ini_array2);

$results = array_diff($ini_array1k, $ini_array2k);

foreach ($results as $result)
{
    echo $result . "=\"" . $ini_array1[$result] . "\"\n";
}

if (count($results) == 0)
{
    foreach ($ini_array1k as $key)
    {
        $cpo1 = substr_count($ini_array1[$key], '%');
        $cpo2 = substr_count($ini_array2[$key], '%');

        $cpe1  = substr_count($ini_array1[$key], '$');
        $cpe2  = substr_count($ini_array2[$key], '$');

        $cpbo1  = substr_count($ini_array1[$key], '{');
        $cpbo2  = substr_count($ini_array2[$key], '{');

        $cpbc1  = substr_count($ini_array1[$key], '}');
        $cpbc2  = substr_count($ini_array2[$key], '}');

        $cpme1  = substr_count($ini_array1[$key], '<');
        $cpme2  = substr_count($ini_array2[$key], '<');

        $cpma1  = substr_count($ini_array1[$key], '>');
        $cpma2  = substr_count($ini_array2[$key], '>');

        $cpqqq1  = substr_count($ini_array1[$key], 'QQQ');
        $cpqqq2  = substr_count($ini_array2[$key], 'QQQ');

        if (($cpo1 != $cpo2) || ($cpe1 != $cpe2) || ($cpbo1 != $cpbo2) || ($cpbc1 != $cpbc2) || ($cpma1 != $cpma2) || ($cpme1 != $cpme2) || ($cpqqq1 != $cpqqq2))
        {
            echo 'ERROR: ' . $key . "=\"" . $ini_array1[$key] . "\"\n";
            echo 'ERROR: ' . $key . "=\"" . $ini_array2[$key] . "\"\n\n";
        }
    }
}
3
Anibal

No puedo pensar en ninguna "forma joomla" para hacer esto. Esto se ve principalmente en cómo organizaría su proceso de desarrollo.

Entonces, dado que durante el desarrollo, pueden estar disponibles cadenas de idioma más nuevas y más nuevas, me concentraría en completar el xml en inglés, y cuando lo hiciera, lo copiaría (duplicaría) para crear los parientes para los otros idiomas y traducirlos en el xml.

Corto de actualización:

Para los archivos de idioma incompletos y para encontrar lo que falta, en lugar de escribir un guión, puede copiarlos, pegarlos en un Excel y ordenarlos alfabéticamente o en cualquier otro orden que pueda encontrar conveniente para la comparación. Entonces puede detectar fácilmente qué CONSTANTES faltan en los archivos de otros idiomas.

1
FFrewin

Es posible que desee echar un vistazo a com_localise. Es una extensión destinada a traducir el núcleo de Joomla y las extensiones dentro de Joomla. Puede obtenerlo en el repositorio: https://github.com/joomla-projects/com_localise

Actualmente se ha reelaborado mucho, pero según tengo entendido, debería funcionar bastante bien.

1
Bakual