Locale-TextDomain-OO - Was hat sich getan?‎

Ursprünglich als Erweiterung

Probleme

Pause

Ziele zum Teil übernommen

Neuheiten

Neuheiten

Architektur

https://metacpan.org/pod/Locale::TextDomain::OO#Overview

Architektur Lexikon

Architektur Translator

empfohlenes Plugin

Getext

    ...->loc_('This is a text.');

Gettext mit Plural, Kontext und Platzhalter

    ...->loc_npx(
        'appointment',
        'This is {dates :num} date.',
        'This are {dates :num} dates.',
        1,
        dates => 1,
    );

Maketext

    ...->loc_m(
        'Send email to <strong>[_1]</strong>.',
        #                      ^^^^
        'Max Mustermann <mustermann@example.com>',
    );

Bei Maketext kann man dem Platzhalter das Attribut :html nicht geben.

Maketext mit Kontext

    ...->loc_mp(
        'appointment',
        'This are [*,_1,date,dates].',
        #     ^^^
        1,
    );

Bei Maketext ist man mit dem Plural etwas eingeschränkt.

HTML und JavaScript

Prinzipiell kann man HTML auch mit übersetzen, jedoch ist es 2. Wahl nach plain Text.

JavaScript wird auch mit übersetzt.

    ...->loc_('... <a href="foo.de" on...="...">...</a> ...');

Man läuft Gefahr HTML und JavaScript mit der Übersetzung zu zerstören.

nicht vorhanden - nicht kaputt

HTML geht unwahrscheinlicher kaputt, weil primitiv. JavaScript geht nicht kaputt.

Die Lösung ist hier HTML::Zoom und leeres a-Tag, weil es erst während dem Rendern konfiguriert wird. (Patrick Grämer)

    <span class="...">... <a>...</a> ...</span>

... und fertigen Link einsetzen

    ->replace_content( \$ctx->loc_('<a>...</a>') )
    ->then
    ->collect({
        filter => sub {
            $_
                ->select('a')
                ->set_attribute('href' => 'foo.de');
        },
        passthrough => 1,
    })

JavaScript Initialisierung

<script type="text/javascript">
    var language_locales = {
        "LC_NUMERIC":{
            "decimal_point":".", "thousands_sep":",", "grouping":["3","3"]
        },
        "LC_MONETARY":{
            "n_sep_by_space":"0", "currency_symbol":"£", "p_sign_posn":"1", "negative_sign":"-", "int_curr_symbol":"GBP ", "frac_digits":"2", "p_sep_by_space":"0", "positive_sign":"", "n_cs_precedes":"1", "p_cs_precedes":"1", "int_frac_digits":"2", "mon_grouping":["3","3"], "n_sign_posn":"1", "mon_thousands_sep":",", "mon_decimal_point":"."}
        };
    var language_tag = "i-default";
    $(function() {
        $.datepicker.setDefaults($.datepicker.regional['en-GB']);

Extract

Locale::TextDomain::OO::Extract

Process

Locale::TextDomain::OO::Process

https://metacpan.org/.../example/21_process_utf-8.pl

Das Beispiel sagt schon alles, wie der Ablauf ist. Wenn man mit mo-Files arbeitet, muss man am Ende noch ausführen:

    $process->spew(mo => "../2nd_${language}_${domain}_clean.mo");

Autotranslator 1/2

Locale::Utils::Autotranslator

Autotranslator 2/2

Locale::Utils::Autotranslator

https://metacpan.org/.../example/01_my_translator_utf-8.pl

Das Beispiel zeigt auch, wie die Platzhalter beim Übersetzungstool ankommen.

Ende