]> dev.renevier.net Git - syp.git/blob - inc/i10n/updatelang.php
3133e845d07a4cb787f698e62b58ef89e5615c18
[syp.git] / inc / i10n / updatelang.php
1 #!/usr/bin/php
2 <?php
3
4 // only execute from command line
5 if (!(isset ($argc)) || !(isset ($argv))) {
6     exit (0);
7 }
8
9 $ROOTDIR="../../";
10 $SCRIPTS=array("admin"); // scripts in rootdir we need to link to
11
12 function usage() {
13     global $argv;
14     return ("Usage: " . $argv[0] . " [lang1] [lang2]\n");
15 }
16
17 function warn($str) { // writes string to stderr
18     error ($str);
19 }
20
21 function error($str) { // writes string to stderr
22     $stderr = fopen ('php://stderr', 'w');
23     fwrite ($stderr, $str);
24     fclose ($stderr); 
25 }
26
27 function main($argv, $argc, $rootdir, $scripts) {
28     $options = getopt("h");
29     if (isset ($options ['h'])) {
30         print usage ();
31         return 0;
32     }
33
34     if ($argc <= 1) { // update all existing langs
35         foreach (scandir (".") as $entry) {
36             if (is_dir ($entry) && !($entry[0] == ".") && !($entry == "en")) {
37                 updatelang ($entry, $rootdir, $scripts);
38             }
39         }
40     } else {
41         foreach (array_slice ($argv, 1) as $item) {
42             updatelang ($item, $rootdir, $scripts); 
43         }
44     }
45
46     return 0;
47 }
48
49 function escape_newline ($str, $tab) {
50     return str_replace("\n", "\\n\" .\n$tab$tab\"", $str);
51 }
52 function escape_slash ($str) {
53     $res = str_replace("\\", "\\\\", $str);
54     $res = str_replace("\"", "\\\"", $res);
55     return $res;
56 }
57
58 function escape_all ($str, $tab) {
59     $str = escape_slash ($str);
60     $str = escape_newline ($str, $tab);
61     return $str;
62 }
63
64 function updatelang($lang, $rootdir, $scripts) {
65     if (!preg_match ('/^[a-zA-Z]{2,3}(-[a-zA-Z]{2,3})?$/', $lang)) {
66         warn ("$lang is not a valid lang format.\n");
67         return false;
68     }
69     if ($lang == "en") {
70         warn ("en is reference language. It must be managed manually.\n");
71         return false;
72     }
73     
74     if (!is_dir ($lang)) {
75         if (!mkdir ($lang)) {
76             error ("could not create $lang directory.\n");
77             return false;
78         }
79     }
80
81     require ("en/syp.php");
82     if (is_file ("$lang/syp.php")) {
83         require ("$lang/syp.php");
84     }
85
86     $translator_name = $translations[$lang]["_translator_name"];
87     $translator_mail = $translations[$lang]["_translator_mail"];
88     $language_name   = $translations[$lang]["_language_name"];
89
90     $tab = str_repeat (" ", 4);
91
92     $tmpname = tempnam ("", "");
93     $output = fopen($tmpname, "w");
94
95     fwrite ($output, "<?php\n");
96
97     fwrite ($output, "$tab" . "\$translations['" . $lang . "'] = array(\n");
98     fwrite ($output, "$tab$tab" . "// your name\n");
99     fwrite ($output, "$tab$tab" . "\"_translator_name\" => \"" . escape_slash ($translator_name) . "\",\n");
100     fwrite ($output, "\n");
101
102     fwrite ($output, "$tab$tab" . "// your email\n");
103     fwrite ($output, "$tab$tab" . "\"_translator_mail\" => \"" . escape_slash ($translator_mail) . "\",\n");
104     fwrite ($output, "\n");
105
106     fwrite ($output, "$tab$tab" . "// your language name in your language. It will be used to link to\n");
107     fwrite ($output, "$tab$tab" . "// pages in your languages from pages in other\n");
108     fwrite ($output, "$tab$tab" . "\"_language_name\" => \"" . escape_slash ($language_name) . "\",\n");
109     fwrite ($output, "\n");
110
111     fwrite ($output, "$tab$tab" . "/* starts translation */\n");
112     fwrite ($output, "\n");
113     fwrite ($output, "\n");
114
115     foreach ($translations['en'] as $key => $value) {
116         if ($key[0] == "_") {
117             continue;
118         }
119         $value = $translations[$lang][$key];
120
121         fwrite ($output, "$tab$tab" . "\"" . escape_all ($key, $tab) . "\"" . "\n");
122         fwrite ($output, "$tab$tab  " . "=>\n");
123         fwrite ($output, "$tab$tab" . "\"" . escape_all ($value, $tab) . "\"" . "\n");
124         fwrite ($output, "$tab$tab  " . ",\n");
125         fwrite ($output, "\n");
126     }
127
128     fwrite ($output, "$tab" . ")\n");
129     fwrite ($output, "?>"); // <?php <- fixes vim syntax
130
131     fclose($output);
132
133     if (!rename ($tmpname, "$lang/syp.php")) {
134         error ("could not move $tmpname to $lang/sys.php");
135         unlink ($tmpname);
136         return false;
137     }
138     if (!chmod ("$lang/syp.php", 0644)) {
139         error ("could not set permissions to $lang/sys.php");
140         return false;
141     }
142     
143     foreach ($scripts as $script) {
144         $link = $rootdir . "/"  . $script . "." . $lang . ".php";
145         $target = $script . ".php";
146         if (!file_exists ($link)) {
147             if (!symlink ($target, $link)) {
148                 error ("could not link $target to $link");
149             }
150         }
151     }
152     return true;
153 }
154
155 exit (main($argv, $argc, $ROOTDIR, $SCRIPTS));
156 ?>