it-swarm.dev

Identifica e individua le stringhe di traduzione mancanti in joomla 3

Nel mio sito ho 2 lingue, norvegese e inglese. Sto sviluppando un nuovo componente utilizzando un creatore di componenti, ma sto riscontrando un problema con la traduzione: i file in lingua inglese vengono aggiornati con nuove righe, mentre aggiorno manualmente la traduzione norvegese.

Nelle versioni precedenti di Joomla era abbastanza facile individuare stringhe mancanti, poiché la costante di traduzione veniva sempre visualizzata. Tuttavia, a partire da joomla 3.2 ( http://docs.joomla.org/Specification_of_language_files ) la traduzione inglese viene sempre utilizzata come fallback se non viene trovata la stringa di lingua corretta. Quindi ora, per trovare manualmente la stringa mancante, devo cercare nel file di traduzione inglese il valore visualizzato e, per ogni hit in questa ricerca, controllare se la costante di traduzione esiste nel file di lingua norvegese.

Speriamo che ci sia un modo migliore per individuare le stringhe di traduzione mancanti, qualcuno può aiutare?

3
jonasfh

Ho un paio di script fedeli (linux) per alleviare il dolore di mantenere aggiornati i file di lingua:

Per estrarre i tag da 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

Per verificare la presenza di duplicati, tag mancanti o differenze di contenuto:

    // 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

Non riesco a pensare a nessun "modo Joomla" per farlo. Questo sembra principalmente come organizzare il processo di sviluppo.

Quindi, poiché durante lo sviluppo potrebbero essere disponibili stringhe di lingua sempre più recenti, mi concentrerei sul completamento dell'xml in lingua inglese e, al termine, lo copierei (duplicando) per creare i parenti per le altre lingue e tradurli sul xml.

A corto di aggiornamento:

Per i file di lingua incompleti e per trovare ciò che manca, invece di scrivere uno script, è possibile copiarli: incollarli in un Excel e ordinarli in ordine alfabetico o in qualsiasi altro ordine lo si può trovare conveniente per il confronto. Quindi puoi facilmente individuare ciò che COSTANTI mancano nei file delle altre lingue.

1
FFrewin

Potresti dare un'occhiata a com_localise. È un'estensione pensata per tradurre il core di Joomla e le estensioni all'interno dello stesso Joomla. Puoi ottenerlo nel repository: https://github.com/joomla-projects/com_localise

Attualmente è stato rielaborato duramente, ma dalla mia comprensione dovrebbe funzionare abbastanza bene.

1
Bakual