Thread Template: Mehrsprachige Website (19 answers)
Opened by Froschpopo at 2012-08-01 00:28

pq
 2012-08-01 01:19
#160336 #160336
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
2012-07-31T22:28:00 Froschpopo
(HTML::Template::Compiled werde ich in Zukunft nicht mehr nutzen können)

darf ich fragen warum?

Quote
Wie macht ihr denn sowas?
[...]
Aber mal angenommen:
# language_de-DE.txt:
title = "Willkommen bei [% domain %]";


ich benutze hier fürs forum ein plugin, welches du im battie-repository findest.

hier mal ein beispiel:


Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use strict;
use warnings;
use v5.010;

use HTML::Template::Compiled 0.99;
use HTML::Template::Compiled::Plugin::Translate;
my $map = {
    welcome => ["Willkommen bei %1s"],
    user_online => ["Es ist %1s Nutzer online", "Es sind %1s Nutzer online"],
};
my $t = HTML::Template::Compiled::Plugin::Translate->new({ map => $map });
my $htc = HTML::Template::Compiled->new(
    filename => "translate.html",
    tagstyle => [qw/ +tt /],
    plugin => [$t],
);
$htc->param(
    usercount => 2,
    domain => "example.org",
);
say $htc->output;


Code: (dl )
1
2
3
<title>[%translate id=welcome args=".domain" %]</title>

[%translate id="user_online" count=.usercount args=.usercount %]


Ausgabe:
Code: (dl )
1
2
3
<title>Willkommen bei example.org</title>

Es sind 2 Nutzer online


die $map definiert die übersetzungen für eine sprache, jeweils in singular und plural, falls nötig. mittels dem template-attribut count kann man die anzahl dann über eine template-variable spezifizieren (count=.usercount).

Man kann weitere Template-Variablen in den Text einfügen. Positioniert wird über %1s, %2s usw., und die argumente werden mittels args übergeben (args=".domain").

Nachteil dieses Ansatzes ist, dass die komplette Übersetzungsliste für eine Sprache geladen werden muss, das kann man aber je nach Anwendung optimieren, z.b. unter mod_perl beim serverstart in den speicher laden oder mittels memcached bei bedarf laden.

gettext bietet wohl auch einige möglichkeiten, aber ich konnte mich nie so richtig damit anfreunden.

edit: url zum plugin: http://perlboard.svn.sourceforge.net/viewvc/perlbo...
Last edited: 2012-08-01 01:25:12 +0200 (CEST)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem

View full thread Template: Mehrsprachige Website