]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blame - config/cfgroot/lang.pl
immernoch das alte Problem...
[people/pmueller/ipfire-2.x.git] / config / cfgroot / lang.pl
CommitLineData
cd1a2927
MT
1# SmoothWall CGIs\r
2#\r
3# This code is distributed under the terms of the GPL\r
4#\r
5# (c) The SmoothWall Team\r
6# Copyright (c) 2002/08/23 Mark Wormgoor <mark@wormgoor.com> Split from header.pl\r
7#\r
8# $Id: lang.pl,v 1.1.2.11 2005/09/10 16:22:50 eoberlander Exp $\r
9#\r
10\r
11package Lang;\r
12require 'CONFIG_ROOT/general-functions.pl';\r
13use strict;\r
14\r
15### A cache file to avoid long recalculation\r
16$Lang::CacheLang = '/var/run/cache-lang.pl';\r
17\r
18# When you want to add your own language strings/entries to the ipcop language file,\r
19# you should create a file with <PREFIX>.<LANG>.pl into CONFIG_ROOT/addon-lang dir\r
20# <PREFIX> is free choosable but should be significant. An Example might be "myAddnName"\r
21# <LANG> is a mnemonic of the used language like en, de, it, nl etc.\r
22# You can find a detailed list of possible mnemonic's in the file CONFIG_ROOT/langs/list\r
23# A file could be named "VirtualHttpd.en.pl" for example.\r
24#\r
25# The file content has to start with (of course without the leading #):\r
26# --------- CODE ---------\r
27#%tr = (%tr,\r
28# 'key1' => 'value', # add all your entries key/values here \r
29# 'key2' => 'value' # and end with (of course without the leading #):\r
30#);\r
31# --------- CODE END---------\r
32#\r
33# After you have copied all your files to CONFIG_ROOT/add-lang you have to run the\r
34# script compilation:\r
35# perl -e "require '/CONFIG_ROOT/lang.pl'; &Lang::BuildCacheLang"\r
36\r
37\r
38### Initialize language\r
39%Lang::tr = ();\r
40my %settings = ();\r
41&General::readhash("${General::swroot}/main/settings", \%settings);\r
42reload($settings{'LANGUAGE'});\r
43\r
44# language variable used by makegraphs script\r
45our $language;\r
46$language = $settings{'LANGUAGE'};\r
47\r
48#\r
49# Load requested language file from cachefile. If cachefile doesn't exist, build on the fly.\r
50# (it is a developper options)\r
51#\r
52sub reload {\r
53\r
54 my ($LG) = @_;\r
55 %Lang::tr = (); # start with a clean array\r
56\r
57 # Use CacheLang if present & not empty.\r
58 if (-s "$Lang::CacheLang.$LG" ) {\r
59 ##fix: need to put a lock_shared on it in case rebuild is active ?\r
60 do "$Lang::CacheLang.$LG";\r
61 #&General::log ("cachelang file used [$LG]"); \r
62 return;\r
63 }\r
64 \r
65 #&General::log("Building on the fly cachelang file for [$LG]");\r
66 do "${General::swroot}/langs/en.pl";\r
67 do "${General::swroot}/langs/$LG.pl" if ($LG ne 'en');\r
68\r
69 my $AddonDir = ${General::swroot}.'/addon-lang';\r
70\r
71 opendir (DIR, $AddonDir);\r
72 my @files = readdir (DIR);\r
73 closedir (DIR);\r
74\r
75 # default is to load english first\r
76 foreach my $file ( grep (/.*\.en.pl$/,@files)) {\r
77 do "$AddonDir/$file";\r
78 }\r
79\r
80 # read again, overwriting 'en' with choosed lang\r
81 if ($LG ne 'en') {\r
82 foreach my $file (grep (/.*\.$LG\.pl$/,@files) ) {\r
83 do "$AddonDir/$file";\r
84 }\r
85 }\r
86}\r
87\r
88#\r
89# Assume this procedure is called with enough privileges.\r
90# Merge ipcop langage file + all other extension found in addon-lang\r
91# to build a 'cachefile' for selected language\r
92#\r
93sub BuildUniqueCacheLang {\r
94\r
95 my ($LG) = @_;\r
96 \r
97 # Make CacheLang empty so that it won't be used by Lang::reload\r
98 open (FILE, ">$Lang::CacheLang.$LG") or return 1;\r
99 flock (FILE, 2) or return 1;\r
100 close (FILE);\r
101\r
102 # Load languages files\r
103 &Lang::reload ($LG);\r
104 \r
105 # Write the unique %tr=('key'=>'value') array\r
106 open (FILE, ">$Lang::CacheLang.$LG") or return 1;\r
107 flock (FILE, 2) or return 1;\r
108 print FILE '%tr=(';\r
109 foreach my $k ( keys %Lang::tr ){\r
110 $Lang::tr{$k} =~ s/\'/\\\'/g; # quote ' => \'\r
111 print FILE "'$k' => '$Lang::tr{$k}',"; # key => value,\r
112 }\r
113 print FILE ');';\r
114 close (FILE);\r
115 \r
116 # Make nobody:nobody file's owner\r
117 # Will work when called by root/rc.sysinit\r
118 chown (0,0,"$Lang::CacheLang.$LG");\r
119 chmod (0004,"$Lang::CacheLang.$LG");\r
120 return 0;\r
121}\r
122\r
123#\r
124# Switch Ipcop Language for each lang then call build cachelang\r
125#\r
126sub BuildCacheLang {\r
127\r
128 my $AddonDir = ${General::swroot}.'/addon-lang';\r
129 \r
130 # Correct permission in case addon-installer did not do it\r
131 opendir (DIR, $AddonDir);\r
132 my @files = readdir (DIR);\r
133 foreach my $file (@files) {\r
134 next if (($file eq '..') || ($file eq '.'));\r
135 chown (0,0,"$AddonDir/$file");\r
136 chmod (0004,"$AddonDir/$file");\r
137 }\r
138 closedir (DIR);\r
139\r
140 my $selected = '';;\r
141 my $missed = '';\r
142 my $error = 0;\r
143 \r
144 open (LANGS, "${General::swroot}/langs/list");\r
145 while (<LANGS>) {\r
146 ($selected) = split (':');\r
147 if (BuildUniqueCacheLang ($selected) == 1) {\r
148 $missed = $selected; # will try latter. Can only be the current cachelang file locked\r
149 };\r
150 }\r
151 close (LANGS);\r
152\r
153 if ($missed) { # collision with current cache lang being used ?\r
154 $error = &BuildUniqueCacheLang ($missed);\r
155 }\r
156 \r
157 &General::log ("WARNING: cannot build cachelang file for [$missed].") if ($error);\r
158 return $error;\r
159}\r
1601;\r