ossn.lib.languages.php
Go to the documentation of this file.
1 <?php
2 /**
3  * Open Source Social Network
4  *
5  * @packageOpen Source Social Network
6  * @author Open Social Website Core Team <[email protected]>
7  * @copyright 2014 iNFORMATIKON TECHNOLOGIES
8  * @license General Public Licence http://www.opensource-socialnetwork.org/licence
9  * @link http://www.opensource-socialnetwork.org/licence
10  */
11 /**
12  * Register a language in system;
13  * @param string $code code of language;
14  *
15  * @last edit: $arsalanshah
16  * @return void;
17  */
18 function ossn_register_language($code = '', $file) {
19  if(isset($code) && isset($file)) {
20  global $Ossn;
21  $Ossn->locale[$code][] = $file;
22  }
23 }
24 
25 /**
26  * Get a languages strings;
27  * @param string $code Code of language;
28  * @param array $params Translations;
29  *
30  * @return void;
31  */
32 function ossn_register_languages($code, $params = array()) {
33  global $Ossn;
34  if(isset($Ossn->localestr[$code], $code)) {
35  $params = array_merge($Ossn->localestr[$code], $params);
36  }
37  $Ossn->localestr[$code] = $params;
38 }
39 
40 /**
41  * Get registered language codes;
42  *
43  * @return array
44  */
45 function ossn_locales() {
46  global $Ossn;
47  if(!isset($Ossn->locale)) {
48  return false;
49  }
50  foreach($Ossn->locale as $key => $val) {
51  $keys[] = $key;
52  }
53  if(!empty($keys)) {
54  return $keys;
55  } else {
56  return array();
57 
58  }
59 }
60 
61 /**
62  * Print a locale;
63  * @param string $id Id of locale;
64  * @param array $args Array;
65  *
66  * @return string
67  */
68 function ossn_print($id = '', $args = array()) {
69  global $Ossn;
70  $id = strtolower($id);
71  $code = ossn_site_settings('language');
72  if(!empty($Ossn->localestr[$code][$id])) {
73  $string = $Ossn->localestr[$code][$id];
74  if($args) {
75  $string = vsprintf($string, $args);
76  }
77  return $string;
78  } else {
79  return $id;
80  }
81 
82 }
83 
84 /**
85  * Load system locales
86  *
87  * @return void
88  */
90  global $Ossn;
91  $active = ossn_site_settings('language');
92  if(isset($Ossn->locale[$active])) {
93  foreach($Ossn->locale[$active] as $locales) {
94  if(is_file($locales)) {
95  include_once($locales);
96  }
97  }
98  }
99 }
100 /**
101  * Load json locales.
102  *
103  * @return string|false or false
104  */
106  global $Ossn;
107  $code = ossn_site_settings('language');
108  $json = json_encode($Ossn->localestr[$code]);
109  if($json) {
110  return $json;
111  }
112  return false;
113 }
114 /**
115  * Return an array of installed translations as an associative
116  * array "two letter code" => "native language name".
117  *
118  * @return array
119  */
120 
121 function ossn_get_installed_translations($percentage = true) {
122  global $Ossn;
123  $installed = array();
125 
126  foreach($Ossn->locale as $k => $v) {
127  $installed[$k] = ossn_print($k, array(), $k);
128  $completeness = ossn_get_language_completeness($k);
129  if(($completeness < 100) && ($k != 'en') && $percentage !== false) {
130  $installed[$k] .= " (" . $completeness . "% " . ossn_print('ossn:language:complete') . ")";
131  }
132  }
133 
134  return $installed;
135 }
136 /**
137  * Return the level of completeness for a given language code (compared to english)
138  *
139  * @param string $language Language
140  *
141  * @return int
142  */
143 function ossn_get_language_completeness($language) {
144  global $Ossn;
145  $en = count($Ossn->localestr['en']);
146 
147  $missing = ossn_get_missing_language_keys($language);
148  if($missing) {
149  $missing = count($missing);
150  } else {
151  $missing = 0;
152  }
153 
154  //$lang = count($Ossn->translations[$language]);
155  $lang = $en - $missing;
156 
157  return round(($lang / $en) * 100, 2);
158 }
159 /**
160  * Return the translation keys missing from a given language,
161  * or those that are identical to the english version.
162  *
163  * @param string $language The language
164  *
165  * @return mixed
166  */
167 function ossn_get_missing_language_keys($language) {
168  global $Ossn;
169 
170  $missing = array();
171 
172  foreach($Ossn->localestr['en'] as $k => $v) {
173  if(!isset($Ossn->localestr[$language][$k])) {
174  $missing[] = $k;
175  }
176  }
177 
178  if(count($missing)) {
179  return $missing;
180  }
181 
182  return false;
183 }
184 /**
185  * Get list of ISO 639-1 language codes
186  *
187  * @return array
188  */
190  return array(
191  'aa',
192  'ab',
193  'af',
194  'am',
195  'ar',
196  'as',
197  'ay',
198  'az',
199  'ba',
200  'be',
201  'bg',
202  'bh',
203  'bi',
204  'bn',
205  'bo',
206  'br',
207  'ca',
208  'co',
209  'cs',
210  'cy',
211  'da',
212  'de',
213  'dz',
214  'el',
215  'en',
216  'eo',
217  'es',
218  'et',
219  'eu',
220  'fa',
221  'fi',
222  'fj',
223  'fo',
224  'fr',
225  'fy',
226  'ga',
227  'gd',
228  'gl',
229  'gn',
230  'gu',
231  'he',
232  'ha',
233  'hi',
234  'hr',
235  'hu',
236  'hy',
237  'ia',
238  'id',
239  'ie',
240  'ik',
241  'is',
242  'it',
243  'iu',
244  'iw',
245  'ja',
246  'ji',
247  'jw',
248  'ka',
249  'kk',
250  'kl',
251  'km',
252  'kn',
253  'ko',
254  'ks',
255  'ku',
256  'ky',
257  'la',
258  'ln',
259  'lo',
260  'lt',
261  'lv',
262  'mg',
263  'mi',
264  'mk',
265  'ml',
266  'mn',
267  'mo',
268  'mr',
269  'ms',
270  'mt',
271  'my',
272  'na',
273  'ne',
274  'nl',
275  'no',
276  'oc',
277  'om',
278  'or',
279  'pa',
280  'pl',
281  'ps',
282  'pt',
283  'qu',
284  'rm',
285  'rn',
286  'ro',
287  'ru',
288  'rw',
289  'sa',
290  'sd',
291  'sg',
292  'sh',
293  'si',
294  'sk',
295  'sl',
296  'sm',
297  'sn',
298  'so',
299  'sq',
300  'sr',
301  'ss',
302  'st',
303  'su',
304  'sv',
305  'sw',
306  'ta',
307  'te',
308  'tg',
309  'th',
310  'ti',
311  'tk',
312  'tl',
313  'tn',
314  'to',
315  'tr',
316  'ts',
317  'tt',
318  'tw',
319  'ug',
320  'uk',
321  'ur',
322  'uz',
323  'vi',
324  'vo',
325  'wo',
326  'xh',
327  'yi',
328  'yo',
329  'za',
330  'zh',
331  'zu'
332  );
333 }
334 /**
335  * Load all available languages
336  *
337  * @return void
338  */
340  $codes = ossn_standard_language_codes();
341  $path = ossn_route();
342 
343  $components = new OssnComponents;
344 
345  //load core framework languages
346  foreach($codes as $code) {
347  $file = $path->locale . "ossn.{$code}.php";
348  if(is_file($file)) {
349  include_once($file);
350  }
351  }
352  //load component languages
353  $components = $components->getActive();
354  foreach($components as $component) {
355  foreach($codes as $code) {
356  $file = $path->components . '/' . $component->com_id . "/locale/ossn.{$code}.php";
357  if(is_file($file)) {
358  include_once($file);
359  }
360  }
361  }
362 }
363 /**
364  * Get list of all available languages
365  *
366  * @return array
367  */
369  $codes = ossn_standard_language_codes();
370  $path = ossn_route();
371 
372  $com_langs = array();
373  $core_langs = array();
374 
375  $components = new OssnComponents;
376 
377  //load core framework languages
378  foreach($codes as $code) {
379  $file = $path->locale . "ossn.{$code}.php";
380  if(is_file($file)) {
381  $core_langs[] = $code;
382  }
383  }
384  //load component languages
385  $components = $components->getActive();
386  foreach($components as $component) {
387  foreach($codes as $code) {
388  $file = $path->components . '/' . $component->com_id . "/locale/ossn.{$code}.php";
389  if(is_file($file)) {
390  $com_langs[] = $code;
391  }
392  }
393  }
394  $langs = array_merge($com_langs, $core_langs);
395  return array_unique($langs);
396 }