]> git.mxchange.org Git - friendica.git/blobdiff - include/pgettext.php
Improved translation functions
[friendica.git] / include / pgettext.php
index 2e902a6ab0c2bbfd39bd2b8068474120a1c8a654..ae1ce009c11765654e3d4101462a3fb04abd2dee 100644 (file)
@@ -120,48 +120,90 @@ function load_translation_table($lang) {
 
 }}
 
-// 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;
+}