X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fpgettext.php;h=3a89c024d77c851b7245c7483ae1801e6eab9517;hb=b3e6a1d2832be024819328e51e9e1df4c25b560f;hp=f6f26a8cc4a13b90f8daea14b1ca664f6c8e2f10;hpb=578cb0a55c643702504b1c4c18a0d1a02af5cf80;p=friendica.git diff --git a/include/pgettext.php b/include/pgettext.php index f6f26a8cc4..3a89c024d7 100644 --- a/include/pgettext.php +++ b/include/pgettext.php @@ -3,7 +3,7 @@ /** * @brief translation support * - * Get the language setting directly from system variables, bypassing get_config() + * Get the language setting directly from system variables, bypassing Config::get() * as database may not yet be configured. * * If possible, we use the value from the browser. @@ -14,7 +14,6 @@ use Friendica\Core\Config; require_once "include/dba.php"; -if (! function_exists('get_browser_language')) { /** * @brief get the prefered language from the HTTP_ACCEPT_LANGUAGE header */ @@ -55,7 +54,7 @@ function get_browser_language() { // in case none matches, get the system wide configured language, or fall back to English return Config::get('system', 'language', 'en'); -}} +} function push_lang($language) { @@ -93,7 +92,6 @@ function pop_lang() { // l -if (! function_exists('load_translation_table')) { /** * load string translation table for alternate language * @@ -106,13 +104,11 @@ function load_translation_table($lang) { $a->strings = array(); // load enabled plugins strings - $plugins = q("SELECT name FROM addon WHERE installed=1;"); - if ($plugins!==false) { - foreach ($plugins as $p) { - $name = $p['name']; - if (file_exists("addon/$name/lang/$lang/strings.php")) { - include("addon/$name/lang/$lang/strings.php"); - } + $plugins = dba::select('addon', array('name'), array('installed' => true)); + while ($p = dba::fetch($plugins)) { + $name = $p['name']; + if (file_exists("addon/$name/lang/$lang/strings.php")) { + include("addon/$name/lang/$lang/strings.php"); } } @@ -120,50 +116,92 @@ function load_translation_table($lang) { include("view/lang/$lang/strings.php"); } -}} - -// translate string if translation exists - -if (! function_exists('t')) { -function t($s) { +} +/** + * @brief Return the localized version of the provided string with optional string interpolation + * + * This function takes a english string as parameter, and if a localized version + * exists for the current language, substitutes it before performing an eventual + * string interpolation (sprintf) with additional optional arguments. + * + * Usages: + * - t('This is an example') + * - t('URL %s returned no result', $url) + * - t('Current version: %s, new version: %s', $current_version, $new_version) + * + * @param string $s + * @return string + */ +function t($s) +{ $a = get_app(); - if (x($a->strings,$s)) { + if (x($a->strings, $s)) { $t = $a->strings[$s]; - return is_array($t)?$t[0]:$t; + $s = is_array($t) ? $t[0] : $t; + } + if (func_num_args() > 1) { + $args = array_slice(func_get_args(), 1); + $s = @vsprintf($s, $args); } + return $s; -}} +} -if (! function_exists('tt')){ -function tt($singular, $plural, $count){ +/** + * @brief Return the localized version of a singular/plural string with optional string interpolation + * + * This function takes two english strings as parameters, singular and plural, as + * well as a count. If a localized version exists for the current language, they + * are used instead. Discrimination between singular and plural is done using the + * localized function if any or the default one. Finally, a string interpolation + * is performed using the count as parameter. + * + * Usages: + * - tt('Like', 'Likes', $count) + * - tt("%s user deleted", "%s users deleted", count($users)) + * + * @global type $lang + * @param string $singular + * @param string $plural + * @param int $count + * @return string + */ +function tt($singular, $plural, $count) +{ global $lang; $a = get_app(); - if (x($a->strings,$singular)) { + if (x($a->strings, $singular)) { $t = $a->strings[$singular]; - $f = 'string_plural_select_' . str_replace('-','_',$lang); - if (! function_exists($f)) - $f = 'string_plural_select_default'; - $k = $f($count); - return is_array($t)?$t[$k]:$t; - } - - if ($count!=1){ - return $plural; + if (is_array($t)) { + $plural_function = 'string_plural_select_' . str_replace('-', '_', $lang); + if (function_exists($plural_function)) { + $plural_function = 'string_plural_select_default'; + } + $i = $plural_function($count); + $s = $t[$i]; + } else { + $s = $t; + } + } elseif (string_plural_select_default($count)) { + $s = $plural; } else { - return $singular; + $s = $singular; } -}} + + $s = @sprintf($s, $count); + + return $s; +} // provide a fallback which will not collide with // a function defined in any language file - -if (! function_exists('string_plural_select_default')) { -function string_plural_select_default($n) { - return ($n != 1); -}} +function string_plural_select_default($n) +{ + return $n != 1; +}