mirror of https://github.com/movim/movim
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
369 lines
9.3 KiB
369 lines
9.3 KiB
<?php
|
|
|
|
/**
|
|
* @file i18n.php
|
|
* This file is part of MOVIM.
|
|
*
|
|
* @brief A collection of functions to translate strings.
|
|
*
|
|
* @author Etenil <etenil@etenilsrealm.nl>
|
|
*
|
|
* @version 1.0
|
|
* @date 22 December 2010
|
|
*
|
|
* Copyright (C)2010 MOVIM team.
|
|
*
|
|
* This library is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License as published by
|
|
* the Free Software Foundation; either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
$language = "";
|
|
$translations = array();
|
|
|
|
/**
|
|
* Translates strings into the given langage.
|
|
*/
|
|
function t($string)
|
|
{
|
|
global $language;
|
|
global $translations;
|
|
|
|
if(isset($translations[$string])) {
|
|
return $translations[$string];
|
|
}
|
|
|
|
return $string;
|
|
}
|
|
|
|
function get_quoted_string($string)
|
|
{
|
|
$matches = array();
|
|
preg_match('#"(.+)"#', $string, $matches);
|
|
|
|
return $matches[1];
|
|
}
|
|
|
|
/**
|
|
* Parses a .po file.
|
|
*/
|
|
function parse_lang_file($pofile)
|
|
{
|
|
if(!file_exists($pofile)) {
|
|
return false;
|
|
}
|
|
|
|
// Parsing the file.
|
|
$handle = fopen($pofile, 'r');
|
|
|
|
$trans_string = array();
|
|
|
|
$msgid = "";
|
|
$msgstr = "";
|
|
|
|
$last_token = "";
|
|
|
|
while($line = fgets($handle)) {
|
|
if($line[0] == "#" || trim(rtrim($line)) == "") {
|
|
continue;
|
|
}
|
|
|
|
if(preg_match('#^msgid#', $line)) {
|
|
if($last_token == "msgstr") {
|
|
$trans_string[$msgid] = $msgstr;
|
|
}
|
|
$last_token = "msgid";
|
|
$msgid = get_quoted_string($line);
|
|
}
|
|
else if(preg_match('#^msgstr#', $line)) {
|
|
$last_token = "msgstr";
|
|
$msgstr = get_quoted_string($line);
|
|
}
|
|
else {
|
|
$$last_token .= get_quoted_string($line);
|
|
}
|
|
}
|
|
if($last_token == "msgstr") {
|
|
$trans_string[$msgid] = $msgstr;
|
|
}
|
|
|
|
fclose($handle);
|
|
|
|
return $trans_string;
|
|
}
|
|
|
|
/**
|
|
* Loads the given language.
|
|
*/
|
|
function load_language($lang)
|
|
{
|
|
global $translations;
|
|
global $language;
|
|
|
|
if($lang == $language) {
|
|
return true;
|
|
}
|
|
|
|
$translations = parse_lang_file(BASE_PATH . '/i18n/' . $lang . '.po');
|
|
|
|
$language = $lang;
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Loads a .po file and adds the translations to the existing ones.
|
|
* Conflicting translation strings will be rejected.
|
|
*/
|
|
function load_extra_lang($directory)
|
|
{
|
|
global $translations;
|
|
global $language;
|
|
|
|
// Converting to unix path (simpler and portable.)
|
|
$directory = str_replace('\\', '/', $directory);
|
|
|
|
if($directory[-1] != '/') {
|
|
$directory .= '/';
|
|
}
|
|
|
|
$trans = parse_lang_file($directory . $language . '.po');
|
|
|
|
if(!$trans) {
|
|
return false;
|
|
}
|
|
|
|
// Merging the arrays. The existing translations have priority.
|
|
foreach($trans as $msgid => $msgstr) {
|
|
if(array_key_exists($msgid, $translations)) {
|
|
continue;
|
|
}
|
|
$translations[$msgid] = $msgstr;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Return an array containing all the presents languages in i18n/
|
|
*
|
|
*/
|
|
|
|
function load_lang_array() {
|
|
|
|
$lang_list = array(
|
|
'aa' => "Afar",
|
|
'ab' => "Abkhazian",
|
|
'af' => "Afrikaans",
|
|
'am' => "Amharic",
|
|
'an' => "Aragonés",
|
|
'ar' => "عربي",
|
|
'as' => "Assamese",
|
|
'ast' => "asturianu",
|
|
'ay' => "Aymara",
|
|
'az' => "Азәрбајҹан",
|
|
'ba' => "Bashkir",
|
|
'be' => "Беларускі",
|
|
'ber_tam' => "Tamazigh",
|
|
'ber_tam_tfng' => "Tamazigh tifinagh",
|
|
'bg' => "български",
|
|
'bh' => "Bihari",
|
|
'bi' => "Bislama",
|
|
'bm' => "Bambara",
|
|
'bn' => "Bengali; Bangla",
|
|
'bo' => "Tibetan",
|
|
'br' => "brezhoneg",
|
|
'bs' => "bosanski",
|
|
'ca' => "català",
|
|
'co' => "corsu",
|
|
'cpf' => "Kréol réyoné",
|
|
'cpf_dom' => "Kreyòl",
|
|
'cpf_hat' => "Kréyòl (Péyi Dayiti)",
|
|
'cs' => "čeština",
|
|
'cy' => "Cymraeg", # welsh, gallois
|
|
'da' => "dansk",
|
|
'de' => "Deutsch",
|
|
'dz' => "Bhutani",
|
|
'el' => "ελληνικά",
|
|
'en' => "English",
|
|
'en_hx' => "H4ck3R",
|
|
'en_sm' => "Smurf",
|
|
'eo' => "Esperanto",
|
|
'es' => "Español",
|
|
'es_co' => "Colombiano",
|
|
'et' => "eesti",
|
|
'eu' => "euskara",
|
|
'fa' => "فارسى",
|
|
'ff' => "Fulah", // peul
|
|
'fi' => "suomi",
|
|
'fj' => "Fiji",
|
|
'fo' => "føroyskt",
|
|
'fon' => "fongbè",
|
|
'fr' => "Français",
|
|
'fr_sc' => "schtroumpf",
|
|
'fr_lpc' => "langue parlée complétée",
|
|
'fr_lsf' => "langue des signes française",
|
|
'fr_spl' => "français simplifié",
|
|
'fr_tu' => "français copain",
|
|
'fy' => "Frisian",
|
|
'ga' => "Irish",
|
|
'gd' => "Scots Gaelic",
|
|
'gl' => "galego",
|
|
'gn' => "Guarani",
|
|
'grc' => "Ἀρχαία Ἑλληνική", // grec ancien
|
|
'gu' => "Gujarati",
|
|
'ha' => "Hausa",
|
|
'hbo' => "עברית־התנך", // hebreu classique ou biblique
|
|
'he' => "עברית",
|
|
'hi' => "हिंदी",
|
|
'hr' => "hrvatski",
|
|
'hu' => "magyar",
|
|
'hy' => "Armenian",
|
|
'ia' => "Interlingua",
|
|
'id' => "Indonesia",
|
|
'ie' => "Interlingue",
|
|
'ik' => "Inupiak",
|
|
'is' => "íslenska",
|
|
'it' => "italiano",
|
|
'it_fem' => "italiana",
|
|
'iu' => "Inuktitut",
|
|
'ja' => "日本語",
|
|
'jv' => "Javanese",
|
|
'ka' => "ქართული",
|
|
'kk' => "कोंकणी",
|
|
'kl' => "kalaallisut",
|
|
'km' => "Cambodian",
|
|
'kn' => "Kannada",
|
|
'ko' => "한국어",
|
|
'ks' => "Kashmiri",
|
|
'ku' => "Kurdish",
|
|
'ky' => "Kirghiz",
|
|
'la' => "lingua latina",
|
|
'lb' => "Lëtzebuergesch",
|
|
'ln' => "Lingala",
|
|
'lo' => "ພາສາລາວ", # lao
|
|
'lt' => "lietuvių",
|
|
'lu' => "luba-katanga",
|
|
'lv' => "latviešu",
|
|
'man' => "mandingue", # a traduire en mandingue
|
|
'mfv' => "manjak", # ISO-639-3
|
|
'mg' => "Malagasy",
|
|
'mi' => "Maori",
|
|
'mk' => "македонски јазик",
|
|
'ml' => "Malayalam",
|
|
'mn' => "Mongolian",
|
|
'mo' => "Moldavian",
|
|
'mos' => "Moré",
|
|
'mr' => "मराठी",
|
|
'ms' => "Bahasa Malaysia",
|
|
'mt' => "Maltese",
|
|
'my' => "Burmese",
|
|
'na' => "Nauru",
|
|
'nap' => "napulitano",
|
|
'ne' => "Nepali",
|
|
'nqo' => "N'ko", // www.manden.org
|
|
'nl' => "Nederlands",
|
|
'no' => "norsk",
|
|
'nb' => "norsk bokmål",
|
|
'nn' => "norsk nynorsk",
|
|
'oc' => "òc",
|
|
'oc_lnc' => "òc lengadocian",
|
|
'oc_ni' => "òc niçard",
|
|
'oc_ni_la' => "òc niçard (larg)",
|
|
'oc_prv' => "òc provençau",
|
|
'oc_gsc' => "òc gascon",
|
|
'oc_lms' => "òc lemosin",
|
|
'oc_auv' => "òc auvernhat",
|
|
'oc_va' => "òc vivaroaupenc",
|
|
'om' => "(Afan) Oromo",
|
|
'or' => "Oriya",
|
|
'pa' => "Punjabi",
|
|
'pbb' => 'Nasa Yuwe',
|
|
'pl' => "polski",
|
|
'ps' => "Pashto, Pushto",
|
|
'pt' => "Português",
|
|
'pt_br' => "Português do Brasil",
|
|
'qu' => "Quechua",
|
|
'rm' => "Rhaeto-Romance",
|
|
'rn' => "Kirundi",
|
|
'ro' => "română",
|
|
'roa' => "ch'ti",
|
|
'ru' => "русский",
|
|
'rw' => "Kinyarwanda",
|
|
'sa' => "संस्कृत",
|
|
'sc' => "sardu",
|
|
'scn' => "sicilianu",
|
|
'sd' => "Sindhi",
|
|
'sg' => "Sangho",
|
|
'sh' => "srpskohrvastski",
|
|
'sh_latn' => 'srpskohrvastski',
|
|
'sh_cyrl' => 'Српскохрватски',
|
|
'si' => "Sinhalese",
|
|
'sk' => "slovenčina", // (Slovakia)
|
|
'sl' => "slovenščina", // (Slovenia)
|
|
'sm' => "Samoan",
|
|
'sn' => "Shona",
|
|
'so' => "Somali",
|
|
'sq' => "shqip",
|
|
'sr' => "српски",
|
|
'src' => 'sardu logudorésu', // sarde cf 'sc'
|
|
'sro' => 'sardu campidanésu',
|
|
'ss' => "Siswati",
|
|
'st' => "Sesotho",
|
|
'su' => "Sundanese",
|
|
'sv' => "svenska",
|
|
'sw' => "Kiswahili",
|
|
'ta' => "தமிழ்", // Tamil
|
|
'te' => "Telugu",
|
|
'tg' => "Tajik",
|
|
'th' => "ไทย",
|
|
'ti' => "Tigrinya",
|
|
'tk' => "Turkmen",
|
|
'tl' => "Tagalog",
|
|
'tn' => "Setswana",
|
|
'to' => "Tonga",
|
|
'tr' => "Türkçe",
|
|
'ts' => "Tsonga",
|
|
'tt' => "Татар",
|
|
'tw' => "Twi",
|
|
'ty' => "reo mā`ohi", // tahitien
|
|
'ug' => "Uighur",
|
|
'uk' => "українська",
|
|
'ur' => "ٱردو",
|
|
'uz' => "U'zbek",
|
|
'vi' => "Tiếng Việt",
|
|
'vo' => "Volapuk",
|
|
'wa' => "walon",
|
|
'wo' => "Wolof",
|
|
'xh' => "Xhosa",
|
|
'yi' => "Yiddish",
|
|
'yo' => "Yoruba",
|
|
'za' => "Zhuang",
|
|
'zh' => "中文", // chinois (ecriture simplifiee)
|
|
'zh_tw' => "台灣中文", // chinois taiwan (ecr. traditionnelle)
|
|
'zu' => "Zulu"
|
|
|
|
);
|
|
$dir = scandir(BASE_PATH . '/i18n/');
|
|
$po = array();
|
|
foreach($dir as $files) {
|
|
$explode = explode('.', $files);
|
|
if(end($explode) == 'po') {
|
|
$po[$explode[0]] = $lang_list[$explode[0]];
|
|
}
|
|
}
|
|
|
|
return $po;
|
|
}
|
|
|
|
|
|
?>
|