Scripts to permit koha webpages to display in different natural languages
Courtesy of Pawel Skuza
This commit is contained in:
parent
6269ad87bf
commit
ecc63eda57
|
|
@ -0,0 +1,170 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
use strict;
|
||||
|
||||
use locale;
|
||||
use POSIX;
|
||||
use Locale::gettext;
|
||||
|
||||
my $tofile;
|
||||
if (exists $ENV{"HTTP_ACCEPT"}) {
|
||||
$tofile=0;
|
||||
} else {
|
||||
$tofile=1;
|
||||
}
|
||||
|
||||
|
||||
print "Content-Type: text/html
\n\n" unless($tofile);
|
||||
|
||||
my $path=$ENV{"PATH_TRANSLATED"};
|
||||
|
||||
textdomain("koha");
|
||||
|
||||
my %lang=(
|
||||
fr => "fr_FR",
|
||||
pl => "pl_PL",
|
||||
);
|
||||
|
||||
my @lang=split/,/,$ENV{"HTTP_ACCEPT_LANGUAGE"};
|
||||
my $lang="us_US";
|
||||
|
||||
foreach (@lang){
|
||||
my $lg=$lang{$_};
|
||||
setlocale(LC_MESSAGES,$lg);
|
||||
my $tmp = gettext($_);
|
||||
if ($tmp ne $_)
|
||||
{
|
||||
$lang=$tmp;
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
setlocale(LC_MESSAGES,$lang);
|
||||
|
||||
my @katalog;
|
||||
my $plik;
|
||||
|
||||
if ($tofile){
|
||||
|
||||
@katalog=`ls -R`;
|
||||
|
||||
$plik=$ARGV[0];
|
||||
if ($plik eq ''){
|
||||
$plik="koha.gettext.c";
|
||||
}
|
||||
|
||||
} else {
|
||||
@katalog=("cos");
|
||||
}
|
||||
|
||||
my $kat;
|
||||
my (%dgettxt, %dane, %dane2, @dane2);
|
||||
my $i;
|
||||
|
||||
$dgettxt{'iso-8859-1'}=1;
|
||||
my $txt =<<TXT;
|
||||
<HTML>
|
||||
<META http-equiv=Content-Type content="text/thml;
|
||||
charset=${\(gettext('iso-8859-1'))}">
|
||||
TXT
|
||||
|
||||
foreach(@katalog){
|
||||
|
||||
if (/:$/){
|
||||
$kat="$`/";
|
||||
next;
|
||||
}
|
||||
|
||||
if ($tofile){
|
||||
unless ($_=~/(\.html|\.inc)$/i) {
|
||||
next;
|
||||
}
|
||||
}
|
||||
|
||||
print "$kat$_" if ($tofile);
|
||||
|
||||
my $dane;
|
||||
{
|
||||
local $/;
|
||||
if ($tofile){
|
||||
open PL, "$kat$_";
|
||||
} else {
|
||||
open PL, "$path";
|
||||
}
|
||||
$dane=<PL>;
|
||||
close PL;
|
||||
}
|
||||
|
||||
|
||||
$dane=~s/<html>/$txt/i;
|
||||
|
||||
$dane=~s/%/&zamien/ges; # change % (specjal symbol)
|
||||
$dane=~s/\\\'/&zamien/ges; # change \'
|
||||
$dane=~s/\\\"/&zamien/ges; # change \"
|
||||
|
||||
# taka out graphics
|
||||
$dane=~s/[\"\']\/?([\w-\/\.]*?\.gif)[\"\']/&zamien($1)/ges;
|
||||
|
||||
# $dane=~s/messenger\s*\((.*?)\)\s*[\}\{;]/&zamien($1)/ges;
|
||||
# $dane=~s/\.write(ln)?\s*\((.*?)\)\s*[\};]/&zamien($2)/ges;
|
||||
|
||||
# take out string in field alt
|
||||
$dane=~s/alt\s*=\s*[\"]([^\"]*)[\"]/&zamien($1)/iges;
|
||||
$dane=~s/alt\s*=\s*[\']([^\']*)[\']/&zamien($1)/iges;
|
||||
|
||||
$dane=~s/<!--.*?-->/&zamien/ges;
|
||||
$dane=~s/<script.*?<\/script>/&zamien/iges;
|
||||
|
||||
$dane=~s/<[\w\/]\w*\s*((\w*\s*=\s*(\'[^\']*\'|\"[^\"]*\"|[\w-\/?&,\.=%#]*)|[%\d*%]|\w)\s*)*>/&zamien/ges;
|
||||
$dane=~s/<!\[.*?\]>/&zamien/ges;
|
||||
$dane=~s/<![^>]*>/&zamien/ges;
|
||||
$dane=~s/<#.*?#>/&zamien/ges;
|
||||
|
||||
my $dane2=$dane;
|
||||
$dane2=~s/(\s*%\d+%\s*)+/%/gs;
|
||||
$dane2=~s/^%//g;
|
||||
$dane2=~s/%$//g;
|
||||
foreach my $tmp(split/%/,$dane2){
|
||||
my $tmp_ok = $tmp;
|
||||
$tmp_ok=~s/\s+/ /gs;
|
||||
next unless ($tmp_ok=~/\w+/);
|
||||
$dgettxt{$tmp_ok}++ unless $dgettxt{$tmp_ok};
|
||||
$tmp=~s/([\)\(])/\\$1/g;
|
||||
$dane=~s/$tmp/gettext($tmp_ok)/es;
|
||||
}
|
||||
unless ($tofile){
|
||||
while($dane=~/%\d+%/){
|
||||
$dane=~s/%(\d+)%/$dane2{$1}/g;
|
||||
}
|
||||
print $dane;
|
||||
}
|
||||
}
|
||||
|
||||
if ($tofile) {
|
||||
|
||||
open PK, ">$plik";
|
||||
foreach my $tmp(sort keys %dgettxt){
|
||||
$tmp=~s/\"/\\\"/gs;
|
||||
print PK "gettext(\"$tmp\");\n";
|
||||
}
|
||||
close PK;
|
||||
}
|
||||
|
||||
exit;
|
||||
|
||||
###########################################################
|
||||
|
||||
sub zamien {
|
||||
my $tmp = $&;
|
||||
unless ($dgettxt{$_[0]}) {
|
||||
$dgettxt{$_[0]}++;
|
||||
}
|
||||
$tmp=~s/$_[0]/gettext($&)/es;
|
||||
unless ($dane{$tmp}) {
|
||||
push @dane2, $tmp;
|
||||
$dane2{$i}=$tmp;
|
||||
$dane{$tmp}=$i++;
|
||||
}
|
||||
return "%${\($dane{$tmp})}%";
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
This is small note about 'translator.pl'.
|
||||
Author: Pawel Skuza
|
||||
email: pawelzc@cz.top.pl
|
||||
|
||||
Script 'translator.pl' do two things:
|
||||
1. Prepare strings which can be translate;
|
||||
2. Translate strings used gettext.
|
||||
|
||||
1. Prepare strings which can be translate.
|
||||
Copy file 'translator.pl' into root koha directory and execute it.
|
||||
eg.
|
||||
cd /usr/src/koha
|
||||
cp scripts/translator.pl .
|
||||
./translator.pl some_file_name
|
||||
xgettext some_file_name -okoha.po
|
||||
vi koha.po //now you must translate koha.po
|
||||
msgfmt koha.po -okoha.mo
|
||||
cp koha.mo /usr/share/locale/$$/LC_MESSAGES //where $$ is your language
|
||||
|
||||
note: if you omnit 'some_file_name' translator create 'koha.gettext.c'
|
||||
|
||||
2. Translate strings used gettext.
|
||||
You have to configure your apache. Put this lines in koha and opac virtual:
|
||||
|
||||
Action text/html /cgi-bin/koha/translator.pl
|
||||
Action text/plane /cgi-bin/koha/translator.pl
|
||||
|
||||
Don't forget set up the language preference in your browser.
|
||||
Loading…
Reference in New Issue