From 417b32c881b8712175c60f8656f179f1d2f26e90 Mon Sep 17 00:00:00 2001 From: Adam Magness Date: Sat, 20 Jan 2018 09:41:50 -0500 Subject: [PATCH 01/27] Create L10n class Create L10n class and functions from pgettext.php --- src/Core/L10n.php | 235 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 235 insertions(+) create mode 100644 src/Core/L10n.php diff --git a/src/Core/L10n.php b/src/Core/L10n.php new file mode 100644 index 0000000000..381cd930b2 --- /dev/null +++ b/src/Core/L10n.php @@ -0,0 +1,235 @@ +3 ) { + $dashpos = strpos($lang_parse[1][$i], '-'); + if (!in_array(substr($lang_parse[1][$i], 0, $dashpos), $lang_list ) ) { + $lang_list[] = strtolower(substr($lang_parse[1][$i], 0, $dashpos)); + } + } + } + } + } + + // check if we have translations for the preferred languages and pick the 1st that has + foreach ($lang_list as $lang) { + if ($lang === 'en' || (file_exists("view/lang/$lang") && is_dir("view/lang/$lang"))) { + $preferred = $lang; + break; + } + } + if (isset($preferred)) { + return $preferred; + } + + // 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) { + global $lang, $a; + + $a->langsave = $lang; + + if ($language === $lang) { + return; + } + + if (isset($a->strings) && count($a->strings)) { + $a->stringsave = $a->strings; + } + $a->strings = []; + load_translation_table($language); + $lang = $language; + } + + function pop_lang() { + global $lang, $a; + + if ($lang === $a->langsave) { + return; + } + + if (isset($a->stringsave)) { + $a->strings = $a->stringsave; + } else { + $a->strings = []; + } + + $lang = $a->langsave; + } + + // l + + /** + * load string translation table for alternate language + * + * first plugin strings are loaded, then globals + * + * @param string $lang language code to load + */ + function load_translation_table($lang) { + $a = get_app(); + + $a->strings = []; + // load enabled plugins strings + $plugins = dba::select('addon', ['name'], ['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"); + } + } + + if (file_exists("view/lang/$lang/strings.php")) { + include("view/lang/$lang/strings.php"); + } + + } + + /** + * @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)) { + $t = $a->strings[$s]; + $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; + } + + /** + * @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)) { + $t = $a->strings[$singular]; + 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 { + $s = $singular; + } + + $s = @sprintf($s, $count); + + return $s; + } + + // provide a fallback which will not collide with + // a function defined in any language file + function string_plural_select_default($n) + { + return $n != 1; + } + + + + /** + * @brief Return installed languages codes as associative array + * + * Scans the view/lang directory for the existence of "strings.php" files, and + * returns an alphabetical list of their folder names (@-char language codes). + * Adds the english language if it's missing from the list. + * + * Ex: array('de' => 'de', 'en' => 'en', 'fr' => 'fr', ...) + * + * @return array + */ + function get_available_languages() { + $langs = []; + $strings_file_paths = glob('view/lang/*/strings.php'); + + if (is_array($strings_file_paths) && count($strings_file_paths)) { + if (!in_array('view/lang/en/strings.php', $strings_file_paths)) { + $strings_file_paths[] = 'view/lang/en/strings.php'; + } + asort($strings_file_paths); + foreach ($strings_file_paths as $strings_file_path) { + $path_array = explode('/', $strings_file_path); + $langs[$path_array[2]] = $path_array[2]; + } + } + return $langs; + } +} From c8ecc3140534b4138db4eea415685f85bc56a5e0 Mon Sep 17 00:00:00 2001 From: Adam Magness Date: Sun, 21 Jan 2018 11:38:01 -0500 Subject: [PATCH 02/27] Update functions and calls Update function names and calls. --- doc/smarty3-templates.md | 2 +- doc/themes.md | 16 +-- include/acl_selectors.php | 21 ++-- include/api.php | 15 +-- include/bb2diaspora.php | 8 +- include/bbcode.php | 22 ++-- include/conversation.php | 206 +++++++++++++++++------------------ include/datetime.php | 3 +- include/enotify.php | 13 ++- index.php | 7 +- mod/register.php | 7 +- mod/regmod.php | 9 +- src/Core/L10n.php | 43 ++++---- src/Database/DBStructure.php | 3 +- src/Protocol/Diaspora.php | 10 +- util/maintenance.php | 13 ++- 16 files changed, 209 insertions(+), 189 deletions(-) diff --git a/doc/smarty3-templates.md b/doc/smarty3-templates.md index 5c096d2c2d..d44f263255 100644 --- a/doc/smarty3-templates.md +++ b/doc/smarty3-templates.md @@ -39,7 +39,7 @@ They are initialized with an array of data, depending on the tyle of the field. All of these take an array holding the values, e.g. for a one line text input field, which is required and should be used to type email addesses use something along the lines of: - '$adminmail' => array('adminmail', t('Site administrator email address'), $adminmail, t('Your account email address must match this in order to use the web admin panel.'), 'required', '', 'email'), + '$adminmail' => array('adminmail', L10n::t('Site administrator email address'), $adminmail, L10n::t('Your account email address must match this in order to use the web admin panel.'), 'required', '', 'email'), To evaluate the input value, you can then use the $_POST array, more precisely the $_POST['adminemail'] variable. diff --git a/doc/themes.md b/doc/themes.md index 531ff9c166..7407a0ca12 100644 --- a/doc/themes.md +++ b/doc/themes.md @@ -109,17 +109,17 @@ The _post functions handle the processing of the send form, in this case they sa To make your own variation appear in the menu, all you need to do is to create a new CSS file in the deriv directoy and include it in the array in the config.php: $colorset = array( - 'default'=>t('default'), - 'greenzero'=>t('greenzero'), - 'purplezero'=>t('purplezero'), - 'easterbunny'=>t('easterbunny'), - 'darkzero'=>t('darkzero'), - 'comix'=>t('comix'), - 'slackr'=>t('slackr'), + 'default'=>L10n::t('default'), + 'greenzero'=>L10n::t('greenzero'), + 'purplezero'=>L10n::t('purplezero'), + 'easterbunny'=>L10n::t('easterbunny'), + 'darkzero'=>L10n::t('darkzero'), + 'comix'=>L10n::t('comix'), + 'slackr'=>L10n::t('slackr'), ); the 1st part of the line is the name of the CSS file (without the .css) the 2nd part is the common name of the variant. -Calling the t() function with the common name makes the string translateable. +Calling the L10n::t() function with the common name makes the string translateable. The selected 1st part will be saved in the database by the theme_post function. function theme_post(App $a){ diff --git a/include/acl_selectors.php b/include/acl_selectors.php index caa3e98c23..31d074276f 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -7,6 +7,7 @@ use Friendica\Content\Feature; use Friendica\Content\Widget; use Friendica\Core\Addon; use Friendica\Core\Config; +use Friendica\Core\L10n; use Friendica\Database\DBM; use Friendica\Model\Contact; use Friendica\Model\GContact; @@ -351,31 +352,31 @@ function populate_acl($user = null, $show_jotnets = false) { if (!$user['hidewall']) { if ($mail_enabled) { $selected = (($pubmail_enabled) ? ' checked="checked" ' : ''); - $jotnets .= '
' . t("Post to Email") . '
'; + $jotnets .= '
' . L10n::t("Post to Email") . '
'; } Addon::callHooks('jot_networks', $jotnets); } else { - $jotnets .= sprintf(t('Connectors disabled, since "%s" is enabled.'), - t('Hide your profile details from unknown viewers?')); + $jotnets .= sprintf(L10n::t('Connectors disabled, since "%s" is enabled.'), + L10n::t('Hide your profile details from unknown viewers?')); } } $tpl = get_markup_template("acl_selector.tpl"); $o = replace_macros($tpl, [ - '$showall'=> t("Visible to everybody"), - '$show' => t("show"), - '$hide' => t("don't show"), + '$showall'=> L10n::t("Visible to everybody"), + '$show' => L10n::t("show"), + '$hide' => L10n::t("don't show"), '$allowcid' => json_encode($perms['allow_cid']), '$allowgid' => json_encode($perms['allow_gid']), '$denycid' => json_encode($perms['deny_cid']), '$denygid' => json_encode($perms['deny_gid']), '$networks' => $show_jotnets, - '$emailcc' => t('CC: email addresses'), - '$emtitle' => t('Example: bob@example.com, mary@example.com'), + '$emailcc' => L10n::t('CC: email addresses'), + '$emtitle' => L10n::t('Example: bob@example.com, mary@example.com'), '$jotnets' => $jotnets, - '$aclModalTitle' => t('Permissions'), - '$aclModalDismiss' => t('Close'), + '$aclModalTitle' => L10n::t('Permissions'), + '$aclModalDismiss' => L10n::t('Close'), '$features' => [ 'aclautomention' => (Feature::isEnabled($user['uid'], "aclautomention") ? "true" : "false") ], diff --git a/include/api.php b/include/api.php index 15ec2db12c..aeab06cf15 100644 --- a/include/api.php +++ b/include/api.php @@ -12,6 +12,7 @@ use Friendica\Core\Addon; use Friendica\Core\System; use Friendica\Core\Config; use Friendica\Core\NotificationsManager; +use Friendica\Core\L10n; use Friendica\Core\PConfig; use Friendica\Core\Worker; use Friendica\Database\DBM; @@ -1176,8 +1177,8 @@ function api_statuses_update($type) if ($posts_day > $throttle_day) { logger('Daily posting limit reached for user '.api_user(), LOGGER_DEBUG); - // die(api_error($type, sprintf(t("Daily posting limit of %d posts reached. The post was rejected."), $throttle_day))); - throw new TooManyRequestsException(sprintf(t("Daily posting limit of %d posts reached. The post was rejected."), $throttle_day)); + // die(api_error($type, sprintf(L10n::t("Daily posting limit of %d posts reached. The post was rejected."), $throttle_day))); + throw new TooManyRequestsException(sprintf(L10n::t("Daily posting limit of %d posts reached. The post was rejected."), $throttle_day)); } } @@ -1200,8 +1201,8 @@ function api_statuses_update($type) if ($posts_week > $throttle_week) { logger('Weekly posting limit reached for user '.api_user(), LOGGER_DEBUG); - // die(api_error($type, sprintf(t("Weekly posting limit of %d posts reached. The post was rejected."), $throttle_week))); - throw new TooManyRequestsException(sprintf(t("Weekly posting limit of %d posts reached. The post was rejected."), $throttle_week)); + // die(api_error($type, sprintf(L10n::t("Weekly posting limit of %d posts reached. The post was rejected."), $throttle_week))); + throw new TooManyRequestsException(sprintf(L10n::t("Weekly posting limit of %d posts reached. The post was rejected."), $throttle_week)); } } @@ -1224,8 +1225,8 @@ function api_statuses_update($type) if ($posts_month > $throttle_month) { logger('Monthly posting limit reached for user '.api_user(), LOGGER_DEBUG); - // die(api_error($type, sprintf(t("Monthly posting limit of %d posts reached. The post was rejected."), $throttle_month))); - throw new TooManyRequestsException(sprintf(t("Monthly posting limit of %d posts reached. The post was rejected."), $throttle_month)); + // die(api_error($type, sprintf(L10n::t("Monthly posting limit of %d posts reached. The post was rejected."), $throttle_month))); + throw new TooManyRequestsException(sprintf(L10n::t("Monthly posting limit of %d posts reached. The post was rejected."), $throttle_month)); } } @@ -4374,7 +4375,7 @@ function api_account_update_profile_image($type) $media = $_FILES['media']; } // save new profile image - $data = save_media_to_database("profileimage", $media, $type, t('Profile Photos'), "", "", "", "", "", $is_default_profile); + $data = save_media_to_database("profileimage", $media, $type, L10n::t('Profile Photos'), "", "", "", "", "", $is_default_profile); // get filetype if (is_array($media['type'])) { diff --git a/include/bb2diaspora.php b/include/bb2diaspora.php index 4856d18ab1..2673750eec 100644 --- a/include/bb2diaspora.php +++ b/include/bb2diaspora.php @@ -234,13 +234,13 @@ function format_event_diaspora($ev) { return ''; } - $bd_format = t('l F d, Y \@ g:i A') ; // Friday January 18, 2011 @ 8 AM + $bd_format = L10n::t('l F d, Y \@ g:i A') ; // Friday January 18, 2011 @ 8 AM $o = 'Friendica event notification:' . "\n"; $o .= '**' . (($ev['summary']) ? bb2diaspora($ev['summary']) : bb2diaspora($ev['desc'])) . '**' . "\n"; - $o .= t('Starts:') . ' ' . '[' + $o .= L10n::t('Starts:') . ' ' . '[' . (($ev['adjust']) ? day_translate(datetime_convert('UTC', 'UTC', $ev['start'] , $bd_format )) : day_translate(datetime_convert('UTC', 'UTC', @@ -248,7 +248,7 @@ function format_event_diaspora($ev) { . '](' . System::baseUrl() . '/localtime/?f=&time=' . urlencode(datetime_convert('UTC','UTC',$ev['start'])) . ")\n"; if (! $ev['nofinish']) { - $o .= t('Finishes:') . ' ' . '[' + $o .= L10n::t('Finishes:') . ' ' . '[' . (($ev['adjust']) ? day_translate(datetime_convert('UTC', 'UTC', $ev['finish'] , $bd_format )) : day_translate(datetime_convert('UTC', 'UTC', @@ -257,7 +257,7 @@ function format_event_diaspora($ev) { } if (strlen($ev['location'])) { - $o .= t('Location:') . bb2diaspora($ev['location']) + $o .= L10n::t('Location:') . bb2diaspora($ev['location']) . "\n"; } diff --git a/include/bbcode.php b/include/bbcode.php index 3a187c2815..7fa6d05f89 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -411,7 +411,7 @@ function bb_replace_images($body, $images) { // We're depending on the property of 'foreach' (specified on the PHP website) that // it loops over the array starting from the first element and going sequentially // to the last element - $newbody = str_replace('[$#saved_image' . $cnt . '#$]', '' . t('Image/photo') . '', $newbody); + $newbody = str_replace('[$#saved_image' . $cnt . '#$]', '' . L10n::t('Image/photo') . '', $newbody); $cnt++; } @@ -549,7 +549,7 @@ function bb_ShareAttributes($share, $simplehtml) break; case 4: $headline .= '
' . html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8'); - $headline .= t('%2$s %3$s', $link, $userid, $posted); + $headline .= L10n::t('%2$s %3$s', $link, $userid, $posted); $headline .= ":
"; $text = trim($share[1]); @@ -1180,7 +1180,7 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $simplehtml = fa // Check for [spoiler=Author] text - $t_wrote = t('$1 wrote:'); + $t_wrote = L10n::t('$1 wrote:'); // handle nested quotes $endlessloop = 0; @@ -1202,7 +1202,7 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $simplehtml = fa // Check for [quote=Author] text - $t_wrote = t('$1 wrote:'); + $t_wrote = L10n::t('$1 wrote:'); // handle nested quotes $endlessloop = 0; @@ -1223,8 +1223,8 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $simplehtml = fa // [img]pathtoimage[/img] $Text = preg_replace_callback("/\[img\](.*?)\[\/img\]/ism", 'bb_PictureCache', $Text); - $Text = preg_replace("/\[img\](.*?)\[\/img\]/ism", '' . t('Image/photo') . '', $Text); - $Text = preg_replace("/\[zmg\](.*?)\[\/zmg\]/ism", '' . t('Image/photo') . '', $Text); + $Text = preg_replace("/\[img\](.*?)\[\/img\]/ism", '' . L10n::t('Image/photo') . '', $Text); + $Text = preg_replace("/\[zmg\](.*?)\[\/zmg\]/ism", '' . L10n::t('Image/photo') . '', $Text); // Shared content $Text = preg_replace_callback("/(.*?)\[share(.*?)\](.*?)\[\/share\]/ism", @@ -1232,9 +1232,9 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $simplehtml = fa return bb_ShareAttributes($match, $simplehtml); }, $Text); - $Text = preg_replace("/\[crypt\](.*?)\[\/crypt\]/ism", '
' . t('Encrypted content') . '
', $Text); - $Text = preg_replace("/\[crypt(.*?)\](.*?)\[\/crypt\]/ism", '
' . t('Encrypted content') . '
', $Text); - //$Text = preg_replace("/\[crypt=(.*?)\](.*?)\[\/crypt\]/ism", '
' . t('Encrypted content') . '
', $Text); + $Text = preg_replace("/\[crypt\](.*?)\[\/crypt\]/ism", '
' . L10n::t('Encrypted content') . '
', $Text); + $Text = preg_replace("/\[crypt(.*?)\](.*?)\[\/crypt\]/ism", '
' . L10n::t('Encrypted content') . '
', $Text); + //$Text = preg_replace("/\[crypt=(.*?)\](.*?)\[\/crypt\]/ism", '
' . L10n::t('Encrypted content') . '
', $Text); // Try to Oembed if ($tryoembed) { @@ -1352,7 +1352,7 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $simplehtml = fa // sanitizes src attributes (http and redir URLs for displaying in a web page, cid used for inline images in emails) static $allowed_src_protocols = ['http', 'redir', 'cid']; $Text = preg_replace('#<([^>]*?)(src)="(?!' . implode('|', $allowed_src_protocols) . ')(.*?)"(.*?)>#ism', - '<$1$2=""$4 data-original-src="$3" class="invalid-src" title="' . t('Invalid source protocol') . '">', $Text); + '<$1$2=""$4 data-original-src="$3" class="invalid-src" title="' . L10n::t('Invalid source protocol') . '">', $Text); // sanitize href attributes (only whitelisted protocols URLs) // default value for backward compatibility @@ -1363,7 +1363,7 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $simplehtml = fa $allowed_link_protocols[] = 'redir/'; $regex = '#<([^>]*?)(href)="(?!' . implode('|', $allowed_link_protocols) . ')(.*?)"(.*?)>#ism'; - $Text = preg_replace($regex, '<$1$2="javascript:void(0)"$4 data-original-href="$3" class="invalid-href" title="' . t('Invalid link protocol') . '">', $Text); + $Text = preg_replace($regex, '<$1$2="javascript:void(0)"$4 data-original-href="$3" class="invalid-href" title="' . L10n::t('Invalid link protocol') . '">', $Text); if ($saved_image) { $Text = bb_replace_images($Text, $saved_image); diff --git a/include/conversation.php b/include/conversation.php index 7b358d3dd6..bcc0b855f5 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -137,39 +137,39 @@ function localize_item(&$item) { case ACTIVITY_POST: switch ($obj['object-type']) { case ACTIVITY_OBJ_EVENT: - $post_type = t('event'); + $post_type = L10n::t('event'); break; default: - $post_type = t('status'); + $post_type = L10n::t('status'); } break; default: if ($obj['resource-id']) { - $post_type = t('photo'); + $post_type = L10n::t('photo'); $m = []; preg_match("/\[url=([^]]*)\]/", $obj['body'], $m); $rr['plink'] = $m[1]; } else { - $post_type = t('status'); + $post_type = L10n::t('status'); } } $plink = '[url=' . $obj['plink'] . ']' . $post_type . '[/url]'; if (activity_match($item['verb'], ACTIVITY_LIKE)) { - $bodyverb = t('%1$s likes %2$s\'s %3$s'); + $bodyverb = L10n::t('%1$s likes %2$s\'s %3$s'); } elseif (activity_match($item['verb'], ACTIVITY_DISLIKE)) { - $bodyverb = t('%1$s doesn\'t like %2$s\'s %3$s'); + $bodyverb = L10n::t('%1$s doesn\'t like %2$s\'s %3$s'); } elseif (activity_match($item['verb'], ACTIVITY_ATTEND)) { - $bodyverb = t('%1$s attends %2$s\'s %3$s'); + $bodyverb = L10n::t('%1$s attends %2$s\'s %3$s'); } elseif (activity_match($item['verb'], ACTIVITY_ATTENDNO)) { - $bodyverb = t('%1$s doesn\'t attend %2$s\'s %3$s'); + $bodyverb = L10n::t('%1$s doesn\'t attend %2$s\'s %3$s'); } elseif (activity_match($item['verb'], ACTIVITY_ATTENDMAYBE)) { - $bodyverb = t('%1$s attends maybe %2$s\'s %3$s'); + $bodyverb = L10n::t('%1$s attends maybe %2$s\'s %3$s'); } $item['body'] = sprintf($bodyverb, $author, $objauthor, $plink); @@ -202,7 +202,7 @@ function localize_item(&$item) { $Bphoto = '[url=' . Profile::zrl($Blink) . '][img]' . $Bphoto . '[/img][/url]'; } - $item['body'] = sprintf( t('%1$s is now friends with %2$s'), $A, $B)."\n\n\n".$Bphoto; + $item['body'] = sprintf( L10n::t('%1$s is now friends with %2$s'), $A, $B)."\n\n\n".$Bphoto; } if (stristr($item['verb'], ACTIVITY_POKE)) { @@ -243,11 +243,11 @@ function localize_item(&$item) { * we can't have a translation string with three positions but no distinguishable text * So here is the translate string. */ - $txt = t('%1$s poked %2$s'); + $txt = L10n::t('%1$s poked %2$s'); // now translate the verb $poked_t = trim(sprintf($txt, "", "")); - $txt = str_replace( $poked_t, t($verb), $txt); + $txt = str_replace( $poked_t, L10n::t($verb), $txt); // then do the sprintf on the translation string @@ -275,19 +275,19 @@ function localize_item(&$item) { case ACTIVITY_POST: switch ($obj['object-type']) { case ACTIVITY_OBJ_EVENT: - $post_type = t('event'); + $post_type = L10n::t('event'); break; default: - $post_type = t('status'); + $post_type = L10n::t('status'); } break; default: if ($obj['resource-id']) { - $post_type = t('photo'); + $post_type = L10n::t('photo'); $m=[]; preg_match("/\[url=([^]]*)\]/", $obj['body'], $m); $rr['plink'] = $m[1]; } else { - $post_type = t('status'); + $post_type = L10n::t('status'); } // Let's break everthing ... ;-) break; @@ -297,7 +297,7 @@ function localize_item(&$item) { $parsedobj = parse_xml_string($xmlhead.$item['object']); $tag = sprintf('#[url=%s]%s[/url]', $parsedobj->id, $parsedobj->content); - $item['body'] = sprintf( t('%1$s tagged %2$s\'s %3$s with %4$s'), $author, $objauthor, $plink, $tag ); + $item['body'] = sprintf( L10n::t('%1$s tagged %2$s\'s %3$s with %4$s'), $author, $objauthor, $plink, $tag ); } if (activity_match($item['verb'], ACTIVITY_FAVORITE)) { @@ -324,8 +324,8 @@ function localize_item(&$item) { $Blink = $target['author-link']; $A = '[url=' . Profile::zrl($Alink) . ']' . $Aname . '[/url]'; $B = '[url=' . Profile::zrl($Blink) . ']' . $Bname . '[/url]'; - $P = '[url=' . $target['plink'] . ']' . t('post/item') . '[/url]'; - $item['body'] = sprintf( t('%1$s marked %2$s\'s %3$s as favorite'), $A, $B, $P)."\n"; + $P = '[url=' . $target['plink'] . ']' . L10n::t('post/item') . '[/url]'; + $item['body'] = sprintf( L10n::t('%1$s marked %2$s\'s %3$s as favorite'), $A, $B, $P)."\n"; } } } @@ -601,8 +601,8 @@ function conversation(App $a, $items, $mode, $update, $preview = false) { $items = $cb['items']; $conv_responses = [ - 'like' => ['title' => t('Likes','title')], 'dislike' => ['title' => t('Dislikes','title')], - 'attendyes' => ['title' => t('Attending','title')], 'attendno' => ['title' => t('Not attending','title')], 'attendmaybe' => ['title' => t('Might attend','title')] + 'like' => ['title' => L10n::t('Likes','title')], 'dislike' => ['title' => L10n::t('Dislikes','title')], + 'attendyes' => ['title' => L10n::t('Attending','title')], 'attendno' => ['title' => L10n::t('Not attending','title')], 'attendmaybe' => ['title' => L10n::t('Might attend','title')] ]; // array with html for each thread (parent+comments) @@ -746,8 +746,8 @@ function conversation(App $a, $items, $mode, $update, $preview = false) { $drop = [ 'dropping' => $dropping, 'pagedrop' => $page_dropping, - 'select' => t('Select'), - 'delete' => t('Delete'), + 'select' => L10n::t('Select'), + 'delete' => L10n::t('Delete'), ]; $star = false; @@ -779,7 +779,7 @@ function conversation(App $a, $items, $mode, $update, $preview = false) { 'guid' => (($preview) ? 'Q0' : $item['guid']), 'network' => $item['item_network'], 'network_name' => ContactSelector::networkToName($item['item_network'], $profile_link), - 'linktitle' => sprintf( t('View %s\'s profile @ %s'), $profile_name, ((strlen($item['author-link'])) ? $item['author-link'] : $item['url'])), + 'linktitle' => sprintf( L10n::t('View %s\'s profile @ %s'), $profile_name, ((strlen($item['author-link'])) ? $item['author-link'] : $item['url'])), 'profile_url' => $profile_link, 'item_photo_menu' => item_photo_menu($item), 'name' => $profile_name_e, @@ -791,15 +791,15 @@ function conversation(App $a, $items, $mode, $update, $preview = false) { 'tags' => $tags_e, 'hashtags' => $hashtags_e, 'mentions' => $mentions_e, - 'txt_cats' => t('Categories:'), - 'txt_folders' => t('Filed under:'), + 'txt_cats' => L10n::t('Categories:'), + 'txt_folders' => L10n::t('Filed under:'), 'has_cats' => ((count($categories)) ? 'true' : ''), 'has_folders' => ((count($folders)) ? 'true' : ''), 'categories' => $categories, 'folders' => $folders, 'text' => strip_tags($body_e), 'localtime' => datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'r'), - 'ago' => (($item['app']) ? sprintf( t('%s from %s'),relative_date($item['created']),$item['app']) : relative_date($item['created'])), + 'ago' => (($item['app']) ? sprintf( L10n::t('%s from %s'),relative_date($item['created']),$item['app']) : relative_date($item['created'])), 'location' => $location_e, 'indent' => '', 'owner_name' => $owner_name_e, @@ -814,9 +814,9 @@ function conversation(App $a, $items, $mode, $update, $preview = false) { 'like' => '', 'dislike' => '', 'comment' => '', - 'conv' => (($preview) ? '' : ['href'=> 'display/'.$item['guid'], 'title'=> t('View in context')]), + 'conv' => (($preview) ? '' : ['href'=> 'display/'.$item['guid'], 'title'=> L10n::t('View in context')]), 'previewing' => $previewing, - 'wait' => t('Please wait'), + 'wait' => L10n::t('Please wait'), 'thread_level' => 1, ]; @@ -887,11 +887,11 @@ function conversation(App $a, $items, $mode, $update, $preview = false) { '$baseurl' => System::baseUrl($ssl_state), '$return_path' => $a->query_string, '$live_update' => $live_update_div, - '$remove' => t('remove'), + '$remove' => L10n::t('remove'), '$mode' => $mode, '$user' => $a->user, '$threads' => $threads, - '$dropping' => ($page_dropping && Feature::isEnabled(local_user(), 'multi_delete') ? t('Delete Selected Items') : False), + '$dropping' => ($page_dropping && Feature::isEnabled(local_user(), 'multi_delete') ? L10n::t('Delete Selected Items') : False), ]); return $o; @@ -1053,25 +1053,25 @@ function item_photo_menu($item) { if (local_user()) { $menu = [ - t('Follow Thread') => $sub_link, - t('View Status') => $status_link, - t('View Profile') => $profile_link, - t('View Photos') => $photos_link, - t('Network Posts') => $posts_link, - t('View Contact') => $contact_url, - t('Send PM') => $pm_url + L10n::t('Follow Thread') => $sub_link, + L10n::t('View Status') => $status_link, + L10n::t('View Profile') => $profile_link, + L10n::t('View Photos') => $photos_link, + L10n::t('Network Posts') => $posts_link, + L10n::t('View Contact') => $contact_url, + L10n::t('Send PM') => $pm_url ]; if ($network == NETWORK_DFRN) { - $menu[t("Poke")] = $poke_link; + $menu[L10n::t("Poke")] = $poke_link; } if ((($cid == 0) || ($rel == CONTACT_IS_FOLLOWER)) && in_array($item['network'], [NETWORK_DFRN, NETWORK_OSTATUS, NETWORK_DIASPORA])) { - $menu[t('Connect/Follow')] = 'follow?url=' . urlencode($item['author-link']); + $menu[L10n::t('Connect/Follow')] = 'follow?url=' . urlencode($item['author-link']); } } else { - $menu = [t('View Profile') => $item['author-link']]; + $menu = [L10n::t('View Profile') => $item['author-link']]; } $args = ['item' => $item, 'menu' => $menu]; @@ -1187,19 +1187,19 @@ function format_like($cnt, array $arr, $type, $id) { // list which show all likers switch ($type) { case 'like' : - $phrase = sprintf( t('%s likes this.'), $likers); + $phrase = sprintf( L10n::t('%s likes this.'), $likers); break; case 'dislike' : - $phrase = sprintf( t('%s doesn\'t like this.'), $likers); + $phrase = sprintf( L10n::t('%s doesn\'t like this.'), $likers); break; case 'attendyes' : - $phrase = sprintf( t('%s attends.'), $likers); + $phrase = sprintf( L10n::t('%s attends.'), $likers); break; case 'attendno' : - $phrase = sprintf( t('%s doesn\'t attend.'), $likers); + $phrase = sprintf( L10n::t('%s doesn\'t attend.'), $likers); break; case 'attendmaybe' : - $phrase = sprintf( t('%s attends maybe.'), $likers); + $phrase = sprintf( L10n::t('%s attends maybe.'), $likers); break; } } @@ -1210,13 +1210,13 @@ function format_like($cnt, array $arr, $type, $id) { $arr = array_slice($arr, 0, MAX_LIKERS - 1); } if ($total < MAX_LIKERS) { - $last = t('and') . ' ' . $arr[count($arr)-1]; + $last = L10n::t('and') . ' ' . $arr[count($arr)-1]; $arr2 = array_slice($arr, 0, -1); $str = implode(', ', $arr2) . ' ' . $last; } if ($total >= MAX_LIKERS) { $str = implode(', ', $arr); - $str .= sprintf( t(', and %d other people'), $total - MAX_LIKERS ); + $str .= sprintf( L10n::t(', and %d other people'), $total - MAX_LIKERS ); } $likers = $str; @@ -1225,24 +1225,24 @@ function format_like($cnt, array $arr, $type, $id) { switch ($type) { case 'like': - $phrase = sprintf( t('%2$d people like this'), $spanatts, $cnt); - $explikers = sprintf( t('%s like this.'), $likers); + $phrase = sprintf( L10n::t('%2$d people like this'), $spanatts, $cnt); + $explikers = sprintf( L10n::t('%s like this.'), $likers); break; case 'dislike': - $phrase = sprintf( t('%2$d people don\'t like this'), $spanatts, $cnt); - $explikers = sprintf( t('%s don\'t like this.'), $likers); + $phrase = sprintf( L10n::t('%2$d people don\'t like this'), $spanatts, $cnt); + $explikers = sprintf( L10n::t('%s don\'t like this.'), $likers); break; case 'attendyes': - $phrase = sprintf( t('%2$d people attend'), $spanatts, $cnt); - $explikers = sprintf( t('%s attend.'), $likers); + $phrase = sprintf( L10n::t('%2$d people attend'), $spanatts, $cnt); + $explikers = sprintf( L10n::t('%s attend.'), $likers); break; case 'attendno': - $phrase = sprintf( t('%2$d people don\'t attend'), $spanatts, $cnt); - $explikers = sprintf( t('%s don\'t attend.'), $likers); + $phrase = sprintf( L10n::t('%2$d people don\'t attend'), $spanatts, $cnt); + $explikers = sprintf( L10n::t('%s don\'t attend.'), $likers); break; case 'attendmaybe': - $phrase = sprintf( t('%2$d people attend maybe'), $spanatts, $cnt); - $explikers = sprintf( t('%s anttend maybe.'), $likers); + $phrase = sprintf( L10n::t('%2$d people attend maybe'), $spanatts, $cnt); + $explikers = sprintf( L10n::t('%s anttend maybe.'), $likers); break; } @@ -1272,14 +1272,14 @@ function status_editor(App $a, $x, $notes_cid = 0, $popup = false) '$baseurl' => System::baseUrl(true), '$geotag' => $geotag, '$nickname' => $x['nickname'], - '$ispublic' => t('Visible to everybody'), - '$linkurl' => t('Please enter a link URL:'), - '$vidurl' => t("Please enter a video link/URL:"), - '$audurl' => t("Please enter an audio link/URL:"), - '$term' => t('Tag term:'), - '$fileas' => t('Save to Folder:'), - '$whereareu' => t('Where are you right now?'), - '$delitems' => t('Delete item(s)?') + '$ispublic' => L10n::t('Visible to everybody'), + '$linkurl' => L10n::t('Please enter a link URL:'), + '$vidurl' => L10n::t("Please enter a video link/URL:"), + '$audurl' => L10n::t("Please enter an audio link/URL:"), + '$term' => L10n::t('Tag term:'), + '$fileas' => L10n::t('Save to Folder:'), + '$whereareu' => L10n::t('Where are you right now?'), + '$delitems' => L10n::t('Delete item(s)?') ]); $tpl = get_markup_template('jot-end.tpl'); @@ -1288,13 +1288,13 @@ function status_editor(App $a, $x, $notes_cid = 0, $popup = false) '$baseurl' => System::baseUrl(true), '$geotag' => $geotag, '$nickname' => $x['nickname'], - '$ispublic' => t('Visible to everybody'), - '$linkurl' => t('Please enter a link URL:'), - '$vidurl' => t("Please enter a video link/URL:"), - '$audurl' => t("Please enter an audio link/URL:"), - '$term' => t('Tag term:'), - '$fileas' => t('Save to Folder:'), - '$whereareu' => t('Where are you right now?') + '$ispublic' => L10n::t('Visible to everybody'), + '$linkurl' => L10n::t('Please enter a link URL:'), + '$vidurl' => L10n::t("Please enter a video link/URL:"), + '$audurl' => L10n::t("Please enter an audio link/URL:"), + '$term' => L10n::t('Tag term:'), + '$fileas' => L10n::t('Save to Folder:'), + '$whereareu' => L10n::t('Where are you right now?') ]); $jotplugins = ''; @@ -1328,28 +1328,28 @@ function status_editor(App $a, $x, $notes_cid = 0, $popup = false) $o .= replace_macros($tpl,[ '$return_path' => $query_str, '$action' => 'item', - '$share' => defaults($x, 'button', t('Share')), - '$upload' => t('Upload photo'), - '$shortupload' => t('upload photo'), - '$attach' => t('Attach file'), - '$shortattach' => t('attach file'), - '$weblink' => t('Insert web link'), - '$shortweblink' => t('web link'), - '$video' => t('Insert video link'), - '$shortvideo' => t('video link'), - '$audio' => t('Insert audio link'), - '$shortaudio' => t('audio link'), - '$setloc' => t('Set your location'), - '$shortsetloc' => t('set location'), - '$noloc' => t('Clear browser location'), - '$shortnoloc' => t('clear location'), + '$share' => defaults($x, 'button', L10n::t('Share')), + '$upload' => L10n::t('Upload photo'), + '$shortupload' => L10n::t('upload photo'), + '$attach' => L10n::t('Attach file'), + '$shortattach' => L10n::t('attach file'), + '$weblink' => L10n::t('Insert web link'), + '$shortweblink' => L10n::t('web link'), + '$video' => L10n::t('Insert video link'), + '$shortvideo' => L10n::t('video link'), + '$audio' => L10n::t('Insert audio link'), + '$shortaudio' => L10n::t('audio link'), + '$setloc' => L10n::t('Set your location'), + '$shortsetloc' => L10n::t('set location'), + '$noloc' => L10n::t('Clear browser location'), + '$shortnoloc' => L10n::t('clear location'), '$title' => defaults($x, 'title', ''), - '$placeholdertitle' => t('Set title'), + '$placeholdertitle' => L10n::t('Set title'), '$category' => defaults($x, 'category', ''), - '$placeholdercategory' => Feature::isEnabled(local_user(), 'categories') ? t('Categories (comma-separated list)') : '', - '$wait' => t('Please wait'), - '$permset' => t('Permission settings'), - '$shortpermset' => t('permissions'), + '$placeholdercategory' => Feature::isEnabled(local_user(), 'categories') ? L10n::t('Categories (comma-separated list)') : '', + '$wait' => L10n::t('Please wait'), + '$permset' => L10n::t('Permission settings'), + '$shortpermset' => L10n::t('permissions'), '$ptyp' => $notes_cid ? 'note' : 'wall', '$content' => defaults($x, 'content', ''), '$post_id' => defaults($x, 'post_id', ''), @@ -1357,28 +1357,28 @@ function status_editor(App $a, $x, $notes_cid = 0, $popup = false) '$defloc' => $x['default_location'], '$visitor' => $x['visitor'], '$pvisit' => $notes_cid ? 'none' : $x['visitor'], - '$public' => t('Public post'), + '$public' => L10n::t('Public post'), '$lockstate' => $x['lockstate'], '$bang' => $x['bang'], '$profile_uid' => $x['profile_uid'], - '$preview' => Feature::isEnabled($x['profile_uid'], 'preview') ? t('Preview') : '', + '$preview' => Feature::isEnabled($x['profile_uid'], 'preview') ? L10n::t('Preview') : '', '$jotplugins' => $jotplugins, '$notes_cid' => $notes_cid, - '$sourceapp' => t($a->sourcename), - '$cancel' => t('Cancel'), + '$sourceapp' => L10n::t($a->sourcename), + '$cancel' => L10n::t('Cancel'), '$rand_num' => random_digits(12), // ACL permissions box '$acl' => $x['acl'], - '$group_perms' => t('Post to Groups'), - '$contact_perms' => t('Post to Contacts'), - '$private' => t('Private post'), + '$group_perms' => L10n::t('Post to Groups'), + '$contact_perms' => L10n::t('Post to Contacts'), + '$private' => L10n::t('Private post'), '$is_private' => $private_post, '$public_link' => $public_post_link, //jot nav tab (used in some themes) - '$message' => t('Message'), - '$browser' => t('Browser'), + '$message' => L10n::t('Message'), + '$browser' => L10n::t('Browser'), ]); @@ -1645,7 +1645,7 @@ function get_responses($conv_responses, $response_verbs, $ob, $item) { if (count($ret[$v]['list']) > MAX_LIKERS) { $ret[$v]['list_part'] = array_slice($ret[$v]['list'], 0, MAX_LIKERS); array_push($ret[$v]['list_part'], '' . t('View all') . ''); + . (($ob) ? $ob->getId() : $item['id']) . '">' . L10n::t('View all') . ''); } else { $ret[$v]['list_part'] = ''; } diff --git a/include/datetime.php b/include/datetime.php index 0faea8c90e..5b1c446a90 100644 --- a/include/datetime.php +++ b/include/datetime.php @@ -5,6 +5,7 @@ */ use Friendica\Core\Config; +use Friendica\Core\L10n; use Friendica\Core\PConfig; use Friendica\Database\DBM; @@ -276,7 +277,7 @@ function datetimesel($min, $max, $default, $label, $id = 'datetimepicker', $pick // First day of the week (0 = Sunday) $firstDay = PConfig::get(local_user(), 'system', 'first_day_of_week', 0); - $lang = substr(get_browser_language(), 0, 2); + $lang = substr(L10n::getBrowserLanguage(), 0, 2); // Check if the detected language is supported by the picker if (!in_array($lang, ["ar", "ro", "id", "bg", "fa", "ru", "uk", "en", "el", "de", "nl", "tr", "fr", "es", "th", "pl", "pt", "ch", "se", "kr", "it", "da", "no", "ja", "vi", "sl", "cs", "hu"])) { diff --git a/include/enotify.php b/include/enotify.php index ab4bbc6db2..69921cd4d6 100644 --- a/include/enotify.php +++ b/include/enotify.php @@ -5,6 +5,7 @@ use Friendica\App; use Friendica\Core\Addon; use Friendica\Core\Config; +use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Database\DBM; use Friendica\Util\Emailer; @@ -26,7 +27,7 @@ function notification($params) $a = get_app(); // from here on everything is in the recipients language - push_lang($params['language']); + L10n::pushLang($params['language']); $banner = t('Friendica Notification'); $product = FRIENDICA_PLATFORM; @@ -123,7 +124,7 @@ function notification($params) intval($params['uid']) ); if ($p && count($p)) { - pop_lang(); + L10n::popLang(); return; } @@ -444,7 +445,7 @@ function notification($params) Addon::callHooks('enotify_store', $datarray); if ($datarray['abort']) { - pop_lang(); + L10n::popLang(); return False; } @@ -473,7 +474,7 @@ function notification($params) if ($r) { $notify_id = $r[0]['id']; } else { - pop_lang(); + L10n::popLang(); return False; } @@ -492,8 +493,8 @@ function notification($params) // only continue on if we stored the first one if ($notify_id != $p[0]['id']) { - pop_lang(); - return False; + L10n::popLang(); + return false; } } diff --git a/index.php b/index.php index ad65a701ac..0f769834a9 100644 --- a/index.php +++ b/index.php @@ -15,6 +15,7 @@ use Friendica\Core\Addon; use Friendica\Core\System; use Friendica\Core\Theme; use Friendica\Core\Config; +use Friendica\Core\L10n; use Friendica\Core\Worker; use Friendica\Database\DBM; use Friendica\Model\Profile; @@ -83,9 +84,9 @@ if (!$install) { $maintenance = Config::get('system', 'maintenance'); } -$lang = get_browser_language(); +$lang = L10n::getBrowserLanguage(); -load_translation_table($lang); +L10n::loadTranslationTable($lang); /** * Important stuff we always need to do. @@ -121,7 +122,7 @@ if (x($_SESSION, 'authenticated') && !x($_SESSION, 'language')) { if ((x($_SESSION, 'language')) && ($_SESSION['language'] !== $lang)) { $lang = $_SESSION['language']; - load_translation_table($lang); + L10n::loadTranslationTable($lang); } if ((x($_GET, 'zrl')) && (!$install && !$maintenance)) { diff --git a/mod/register.php b/mod/register.php index 2bd09aca92..009bb43d03 100644 --- a/mod/register.php +++ b/mod/register.php @@ -1,8 +1,11 @@ 3 ) { + if (strlen($lang_parse[1][$i])>3) { $dashpos = strpos($lang_parse[1][$i], '-'); - if (!in_array(substr($lang_parse[1][$i], 0, $dashpos), $lang_list ) ) { + if (!in_array(substr($lang_parse[1][$i], 0, $dashpos), $lang_list)) { $lang_list[] = strtolower(substr($lang_parse[1][$i], 0, $dashpos)); } } @@ -56,8 +56,11 @@ class L10n return Config::get('system', 'language', 'en'); } - - function push_lang($language) { + /** + * @param string $language language + */ + public static function pushLang($language) + { global $lang, $a; $a->langsave = $lang; @@ -70,11 +73,15 @@ class L10n $a->stringsave = $a->strings; } $a->strings = []; - load_translation_table($language); + self::loadTranslationTable($language); $lang = $language; } - function pop_lang() { + /** + * Pop language off the top of the stack + */ + public static function popLang() + { global $lang, $a; if ($lang === $a->langsave) { @@ -90,22 +97,21 @@ class L10n $lang = $a->langsave; } - // l - /** * load string translation table for alternate language * - * first plugin strings are loaded, then globals + * first addon strings are loaded, then globals * * @param string $lang language code to load */ - function load_translation_table($lang) { + public static function loadTranslationTable($lang) + { $a = get_app(); $a->strings = []; - // load enabled plugins strings - $plugins = dba::select('addon', ['name'], ['installed' => true]); - while ($p = dba::fetch($plugins)) { + // load enabled addons strings + $addons = dba::select('addon', ['name'], ['installed' => true]); + while ($p = dba::fetch($addons)) { $name = $p['name']; if (file_exists("addon/$name/lang/$lang/strings.php")) { include("addon/$name/lang/$lang/strings.php"); @@ -115,7 +121,6 @@ class L10n if (file_exists("view/lang/$lang/strings.php")) { include("view/lang/$lang/strings.php"); } - } /** @@ -133,7 +138,7 @@ class L10n * @param string $s * @return string */ - function t($s) + public static function t($s) { $a = get_app(); diff --git a/src/Database/DBStructure.php b/src/Database/DBStructure.php index b3eed0dd1b..0f2dc39e6d 100644 --- a/src/Database/DBStructure.php +++ b/src/Database/DBStructure.php @@ -5,6 +5,7 @@ namespace Friendica\Database; use Friendica\Core\Config; +use Friendica\Core\L10n; use Friendica\Database\DBM; use dba; @@ -68,7 +69,7 @@ class DBStructure { // every admin could had different language foreach ($adminlist as $admin) { $lang = (($admin['language'])?$admin['language']:'en'); - push_lang($lang); + L10n::pushLang($lang); $preamble = deindent(t(" The friendica developers released update %s recently, diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index 9d42d32124..bf917543be 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -1933,11 +1933,11 @@ class Diaspora */ private static function constructLikeBody($contact, $parent_item, $guid) { - $bodyverb = t('%1$s likes %2$s\'s %3$s'); + $bodyverb = L10n::t('%1$s likes %2$s\'s %3$s'); $ulink = "[url=".$contact["url"]."]".$contact["name"]."[/url]"; $alink = "[url=".$parent_item["author-link"]."]".$parent_item["author-name"]."[/url]"; - $plink = "[url=".System::baseUrl()."/display/".urlencode($guid)."]".t("status")."[/url]"; + $plink = "[url=".System::baseUrl()."/display/".urlencode($guid)."]".L10n::t("status")."[/url]"; return sprintf($bodyverb, $ulink, $alink, $plink); } @@ -2405,7 +2405,7 @@ class Diaspora $A = "[url=".$self[0]["url"]."]".$self[0]["name"]."[/url]"; $B = "[url=".$contact["url"]."]".$contact["name"]."[/url]"; $BPhoto = "[url=".$contact["url"]."][img]".$contact["thumb"]."[/img][/url]"; - $arr["body"] = sprintf(t('%1$s is now friends with %2$s'), $A, $B)."\n\n\n".$BPhoto; + $arr["body"] = sprintf(L10n::t('%1$s is now friends with %2$s'), $A, $B)."\n\n\n".$BPhoto; $arr["object"] = self::constructNewFriendObject($contact); @@ -2575,7 +2575,7 @@ class Diaspora intval($contact_record["id"]), 0, 0, - dbesc(t("Sharing notification from Diaspora network")), + dbesc(L10n::t("Sharing notification from Diaspora network")), dbesc($hash), dbesc(datetime_convert()) ); @@ -3677,7 +3677,7 @@ class Diaspora if ($item["attach"]) { $cnt = preg_match_all('/href=\"(.*?)\"(.*?)title=\"(.*?)\"/ism', $item["attach"], $matches, PREG_SET_ORDER); if (cnt) { - $body .= "\n".t("Attachments:")."\n"; + $body .= "\n".L10n::t("Attachments:")."\n"; foreach ($matches as $mtch) { $body .= "[".$mtch[3]."](".$mtch[1].")\n"; } diff --git a/util/maintenance.php b/util/maintenance.php index 39c2acb0e1..a697e66d5a 100644 --- a/util/maintenance.php +++ b/util/maintenance.php @@ -1,9 +1,13 @@ Date: Sun, 21 Jan 2018 12:06:27 -0500 Subject: [PATCH 03/27] Functions and Calls finish the other functions before returning to t() and tt() --- mod/admin.php | 3 ++- mod/install.php | 3 ++- mod/settings.php | 3 ++- src/Core/L10n.php | 15 +++++++++------ 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/mod/admin.php b/mod/admin.php index 4544917010..a3df2d262d 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -10,6 +10,7 @@ use Friendica\Content\Feature; use Friendica\Content\Text\Markdown; use Friendica\Core\Addon; use Friendica\Core\Config; +use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Core\Theme; use Friendica\Core\Worker; @@ -1129,7 +1130,7 @@ function admin_page_site_post(App $a) function admin_page_site(App $a) { /* Installed langs */ - $lang_choices = get_available_languages(); + $lang_choices = L10n::getAvailableLanguages(); if (strlen(Config::get('system', 'directory_submit_url')) && !strlen(Config::get('system', 'directory'))) { diff --git a/mod/install.php b/mod/install.php index b39e7c949a..b0955fdedd 100644 --- a/mod/install.php +++ b/mod/install.php @@ -3,6 +3,7 @@ * @file mod/install.php */ use Friendica\App; +use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Database\DBM; use Friendica\Database\DBStructure; @@ -259,7 +260,7 @@ function install_content(App $a) { $adminmail = notags(trim($_POST['adminmail'])); $timezone = ((x($_POST, 'timezone')) ? ($_POST['timezone']) : 'America/Los_Angeles'); /* Installed langs */ - $lang_choices = get_available_languages(); + $lang_choices = L10n::getAvailableLanguages(); $tpl = get_markup_template('install_settings.tpl'); $o .= replace_macros($tpl, [ diff --git a/mod/settings.php b/mod/settings.php index 5193c4a046..50588e3c67 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -8,6 +8,7 @@ use Friendica\Content\Feature; use Friendica\Content\Nav; use Friendica\Core\Addon; use Friendica\Core\Config; +use Friendica\Core\L10n; use Friendica\Core\PConfig; use Friendica\Core\System; use Friendica\Core\Worker; @@ -1186,7 +1187,7 @@ function settings_content(App $a) } /* Installed langs */ - $lang_choices = get_available_languages(); + $lang_choices = L10n::getAvailableLanguages(); /// @TODO Fix indending (or so) $o .= replace_macros($stpl, [ diff --git a/src/Core/L10n.php b/src/Core/L10n.php index 4fe15b504b..7e079ea6d7 100644 --- a/src/Core/L10n.php +++ b/src/Core/L10n.php @@ -7,6 +7,7 @@ namespace Friendica\Core; use Friendica\Core\Config; use dba; +require_once 'boot.php'; require_once 'include/dba.php'; /** @@ -183,14 +184,14 @@ class L10n if (is_array($t)) { $plural_function = 'string_plural_select_' . str_replace('-', '_', $lang); if (function_exists($plural_function)) { - $plural_function = 'string_plural_select_default'; + $plural_function = 'self::stringPluralSelectDefault'; } $i = $plural_function($count); $s = $t[$i]; } else { $s = $t; } - } elseif (string_plural_select_default($count)) { + } elseif (self::stringPluralSelectDefault($count)) { $s = $plural; } else { $s = $singular; @@ -201,9 +202,10 @@ class L10n return $s; } - // provide a fallback which will not collide with - // a function defined in any language file - function string_plural_select_default($n) + /** + * Provide a fallback which will not collide with a function defined in any language file + */ + private static function stringPluralSelectDefault($n) { return $n != 1; } @@ -221,7 +223,8 @@ class L10n * * @return array */ - function get_available_languages() { + public static function getAvailableLanguages() + { $langs = []; $strings_file_paths = glob('view/lang/*/strings.php'); From d49f986d1eb6894dd948577288357b6c1755e3d3 Mon Sep 17 00:00:00 2001 From: Adam Magness Date: Sun, 21 Jan 2018 13:33:59 -0500 Subject: [PATCH 04/27] Many t() calls modify many t() calls. --- include/datetime.php | 56 ++-- include/enotify.php | 42 +-- include/event.php | 143 ++++----- include/items.php | 17 +- include/like.php | 21 +- include/network.php | 3 +- include/security.php | 7 +- include/tags.php | 4 +- include/text.php | 77 ++--- index.php | 12 +- mod/admin.php | 610 +++++++++++++++++++------------------- mod/allfriends.php | 14 +- mod/api.php | 28 +- mod/apps.php | 14 +- mod/attach.php | 35 ++- mod/babel.php | 29 +- mod/bookmarklet.php | 13 +- mod/cal.php | 31 +- mod/common.php | 8 +- mod/community.php | 23 +- mod/contacts.php | 231 ++++++++------- mod/credits.php | 7 +- mod/crepair.php | 47 +-- mod/delegate.php | 25 +- mod/dfrn_confirm.php | 46 +-- mod/dfrn_request.php | 73 ++--- mod/directory.php | 36 +-- mod/dirfind.php | 11 +- mod/display.php | 11 +- mod/editpost.php | 9 +- mod/events.php | 9 +- mod/follow.php | 21 +- mod/fsuggest.php | 9 +- mod/group.php | 13 +- mod/hcard.php | 3 +- mod/invite.php | 11 +- mod/item.php | 5 +- mod/lostpass.php | 8 +- mod/manage.php | 9 +- mod/match.php | 3 +- mod/message.php | 15 +- mod/network.php | 17 +- mod/nogroup.php | 3 +- mod/notes.php | 3 +- mod/notice.php | 13 +- mod/notifications.php | 7 +- mod/oexchange.php | 7 +- mod/openid.php | 9 +- mod/ostatus_subscribe.php | 3 +- mod/photos.php | 37 +-- mod/poke.php | 10 +- mod/profile.php | 5 +- mod/profile_photo.php | 19 +- mod/profiles.php | 21 +- mod/profperm.php | 7 +- mod/register.php | 6 +- mod/regmod.php | 2 +- mod/repair_ostatus.php | 3 +- mod/search.php | 7 +- mod/settings.php | 26 +- mod/suggest.php | 3 +- mod/tagrm.php | 9 +- mod/uimport.php | 5 +- mod/unfollow.php | 13 +- mod/videos.php | 7 +- mod/viewcontacts.php | 5 +- mod/viewsrc.php | 9 +- mod/wall_attach.php | 3 +- mod/wall_upload.php | 6 +- mod/wallmessage.php | 23 +- src/Core/UserImport.php | 11 +- src/Model/Group.php | 4 +- src/Model/Profile.php | 5 +- src/Module/Login.php | 11 +- 74 files changed, 1099 insertions(+), 1009 deletions(-) diff --git a/include/datetime.php b/include/datetime.php index 5b1c446a90..a8320d3321 100644 --- a/include/datetime.php +++ b/include/datetime.php @@ -18,21 +18,21 @@ use Friendica\Database\DBM; */ function timezone_cmp($a, $b) { if (strstr($a, '/') && strstr($b, '/')) { - if ( t($a) == t($b)) { + if (L10n::t($a) == L10n::t($b)) { return 0; } - return ( t($a) < t($b)) ? -1 : 1; + return (L10n::t($a) < L10n::t($b)) ? -1 : 1; } if (strstr($a, '/')) { return -1; } elseif (strstr($b, '/')) { return 1; - } elseif ( t($a) == t($b)) { + } elseif (L10n::t($a) == L10n::t($b)) { return 0; } - return ( t($a) < t($b)) ? -1 : 1; + return (L10n::t($a) < L10n::t($b)) ? -1 : 1; } /** @@ -57,7 +57,7 @@ function select_timezone($current = 'America/Los_Angeles') { $o .= ''; } $continent = $ex[0]; - $o .= ''; + $o .= ''; } if (count($ex) > 2) { $city = substr($value,strpos($value,'/')+1); @@ -66,13 +66,13 @@ function select_timezone($current = 'America/Los_Angeles') { } } else { $city = $ex[0]; - if ($continent != t('Miscellaneous')) { + if ($continent != L10n::t('Miscellaneous')) { $o .= ''; - $continent = t('Miscellaneous'); - $o .= ''; + $continent = L10n::t('Miscellaneous'); + $o .= ''; } } - $city = str_replace('_', ' ', t($city)); + $city = str_replace('_', ' ', L10n::t($city)); $selected = (($value == $current) ? " selected=\"selected\" " : ""); $o .= ""; } @@ -195,17 +195,17 @@ function dob($dob) 'dob', t('Birthday:'), $value, - (((intval($age)) > 0 ) ? t('Age: ') . $age : ""), + (((intval($age)) > 0 ) ? L10n::t('Age: ') . $age : ""), '', - 'placeholder="' . t('YYYY-MM-DD or MM-DD') . '"' + 'placeholder="' . L10n::t('YYYY-MM-DD or MM-DD') . '"' ] ]); /// @TODO Old-lost code? -// if ($dob && $dob > '0001-01-01') -// $o = datesel($f,mktime(0,0,0,0,0,1900),mktime(),mktime(0,0,0,$month,$day,$year), 'dob'); -// else -// $o = datesel($f,mktime(0,0,0,0,0,1900),mktime(),false,'dob'); + // if ($dob && $dob > '0001-01-01') + // $o = datesel($f,mktime(0,0,0,0,0,1900),mktime(),mktime(0,0,0,$month,$day,$year), 'dob'); + // else + // $o = datesel($f,mktime(0,0,0,0,0,1900),mktime(),false,'dob'); return $o; } @@ -359,23 +359,23 @@ function relative_date($posted_date, $format = null) { $abs = strtotime($localtime); - if (is_null($posted_date) || $posted_date <= NULL_DATE || $abs === False) { - return t('never'); + if (is_null($posted_date) || $posted_date <= NULL_DATE || $abs === false) { + return L10n::t('never'); } $etime = time() - $abs; if ($etime < 1) { - return t('less than a second ago'); + return L10n::t('less than a second ago'); } - $a = [ 12 * 30 * 24 * 60 * 60 => [ t('year'), t('years')], - 30 * 24 * 60 * 60 => [ t('month'), t('months')], - 7 * 24 * 60 * 60 => [ t('week'), t('weeks')], - 24 * 60 * 60 => [ t('day'), t('days')], - 60 * 60 => [ t('hour'), t('hours')], - 60 => [ t('minute'), t('minutes')], - 1 => [ t('second'), t('seconds')] + $a = [ 12 * 30 * 24 * 60 * 60 => [L10n::t('year'), L10n::t('years')], + 30 * 24 * 60 * 60 => [L10n::t('month'), L10n::t('months')], + 7 * 24 * 60 * 60 => [L10n::t('week'), L10n::t('weeks')], + 24 * 60 * 60 => [L10n::t('day'), L10n::t('days')], + 60 * 60 => [L10n::t('hour'), L10n::t('hours')], + 60 => [L10n::t('minute'), L10n::t('minutes')], + 1 => [L10n::t('second'), L10n::t('seconds')] ]; foreach ($a as $secs => $str) { @@ -384,7 +384,7 @@ function relative_date($posted_date, $format = null) { $r = round($d); // translators - e.g. 22 hours ago, 1 minute ago if (!$format) { - $format = t('%1$d %2$s ago'); + $format = L10n::t('%1$d %2$s ago'); } return sprintf($format, $r, (($r == 1) ? $str[0] : $str[1])); @@ -611,8 +611,8 @@ function update_contact_birthdays() { continue; } - $bdtext = sprintf( t('%s\'s birthday'), $rr['name']); - $bdtext2 = sprintf( t('Happy Birthday %s'), ' [url=' . $rr['url'] . ']' . $rr['name'] . '[/url]') ; + $bdtext = sprintf(L10n::t('%s\'s birthday'), $rr['name']); + $bdtext2 = sprintf(L10n::t('Happy Birthday %s'), ' [url=' . $rr['url'] . ']' . $rr['name'] . '[/url]') ; q("INSERT INTO `event` (`uid`,`cid`,`created`,`edited`,`start`,`finish`,`summary`,`desc`,`type`,`adjust`) VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%d' ) ", diff --git a/include/enotify.php b/include/enotify.php index 69921cd4d6..b0ec1c1c8c 100644 --- a/include/enotify.php +++ b/include/enotify.php @@ -29,10 +29,10 @@ function notification($params) // from here on everything is in the recipients language L10n::pushLang($params['language']); - $banner = t('Friendica Notification'); + $banner = L10n::t('Friendica Notification'); $product = FRIENDICA_PLATFORM; $siteurl = System::baseUrl(true); - $thanks = t('Thank You,'); + $thanks = L10n::t('Thank You,'); $sitename = $a->config['sitename']; if (!x($a->config['admin_name'])) { $site_admin = sprintf(t('%s Administrator'), $sitename); @@ -48,7 +48,7 @@ function notification($params) $sender_email = $a->config['sender_email']; if (empty($sender_email)) { - $sender_email = t('noreply').'@'.$hostname; + $sender_email = L10n::t('noreply').'@'.$hostname; } if ($params['type'] != SYSTEM_EMAIL) { @@ -101,7 +101,7 @@ function notification($params) $preamble = sprintf(t('%1$s sent you a new private message at %2$s.'), $params['source_name'], $sitename); $epreamble = sprintf(t('%1$s sent you %2$s.'), '[url='.$params['source_link'].']'.$params['source_name'].'[/url]', '[url=$itemlink]'.t('a private message').'[/url]'); - $sitelink = t('Please visit %s to view and/or reply to your private messages.'); + $sitelink = L10n::t('Please visit %s to view and/or reply to your private messages.'); $tsitelink = sprintf($sitelink, $siteurl.'/message/'.$params['item']['id']); $hsitelink = sprintf($sitelink, ''.$sitename.''); $itemlink = $siteurl.'/message/'.$params['item']['id']; @@ -171,7 +171,7 @@ function notification($params) $preamble = sprintf(t('%s commented on an item/conversation you have been following.'), $params['source_name']); $epreamble = $dest_str; - $sitelink = t('Please visit %s to view and/or reply to the conversation.'); + $sitelink = L10n::t('Please visit %s to view and/or reply to the conversation.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, ''.$sitename.''); $itemlink = $params['link']; @@ -185,7 +185,7 @@ function notification($params) '[url='.$params['source_link'].']'.$params['source_name'].'[/url]', $params['link']); - $sitelink = t('Please visit %s to view and/or reply to the conversation.'); + $sitelink = L10n::t('Please visit %s to view and/or reply to the conversation.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, ''.$sitename.''); $itemlink = $params['link']; @@ -199,7 +199,7 @@ function notification($params) '[url='.$params['source_link'].']'.$params['source_name'].'[/url]', $params['link']); - $sitelink = t('Please visit %s to view and/or reply to the conversation.'); + $sitelink = L10n::t('Please visit %s to view and/or reply to the conversation.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, ''.$sitename.''); $itemlink = $params['link']; @@ -213,7 +213,7 @@ function notification($params) '[url='.$params['source_link'].']'.$params['source_name'].'[/url]', $params['link']); - $sitelink = t('Please visit %s to view and/or reply to the conversation.'); + $sitelink = L10n::t('Please visit %s to view and/or reply to the conversation.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, ''.$sitename.''); $itemlink = $params['link']; @@ -227,11 +227,11 @@ function notification($params) '[url='.$params['source_link'].']'.$params['source_name'].'[/url]', $params['link']); - $subject = str_replace('poked', t($params['activity']), $subject); - $preamble = str_replace('poked', t($params['activity']), $preamble); - $epreamble = str_replace('poked', t($params['activity']), $epreamble); + $subject = str_replace('poked', L10n::t($params['activity']), $subject); + $preamble = str_replace('poked', L10n::t($params['activity']), $preamble); + $epreamble = str_replace('poked', L10n::t($params['activity']), $epreamble); - $sitelink = t('Please visit %s to view and/or reply to the conversation.'); + $sitelink = L10n::t('Please visit %s to view and/or reply to the conversation.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, ''.$sitename.''); $itemlink = $params['link']; @@ -245,7 +245,7 @@ function notification($params) '[url='.$params['source_link'].']'.$params['source_name'].'[/url]', $itemlink); - $sitelink = t('Please visit %s to view and/or reply to the conversation.'); + $sitelink = L10n::t('Please visit %s to view and/or reply to the conversation.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, ''.$sitename.''); $itemlink = $params['link']; @@ -261,7 +261,7 @@ function notification($params) $body = sprintf(t('You may visit their profile at %s'), $params['source_link']); - $sitelink = t('Please visit %s to approve or reject the introduction.'); + $sitelink = L10n::t('Please visit %s to approve or reject the introduction.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, ''.$sitename.''); $itemlink = $params['link']; @@ -300,11 +300,11 @@ function notification($params) '[url='.$params['item']['url'].']'.$params['item']['name'].'[/url]', '[url='.$params['source_link'].']'.$params['source_name'].'[/url]'); - $body = t('Name:').' '.$params['item']['name']."\n"; - $body .= t('Photo:').' '.$params['item']['photo']."\n"; + $body = L10n::t('Name:').' '.$params['item']['name']."\n"; + $body .= L10n::t('Photo:').' '.$params['item']['photo']."\n"; $body .= sprintf(t('You may visit their profile at %s'), $params['item']['url']); - $sitelink = t('Please visit %s to approve or reject the suggestion.'); + $sitelink = L10n::t('Please visit %s to approve or reject the suggestion.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, ''.$sitename.''); $itemlink = $params['link']; @@ -319,9 +319,9 @@ function notification($params) $itemlink, '[url='.$params['source_link'].']'.$params['source_name'].'[/url]'); - $body = t('You are now mutual friends and may exchange status updates, photos, and email without restriction.'); + $body = L10n::t('You are now mutual friends and may exchange status updates, photos, and email without restriction.'); - $sitelink = t('Please visit %s if you wish to make any changes to this relationship.'); + $sitelink = L10n::t('Please visit %s if you wish to make any changes to this relationship.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, ''.$sitename.''); $itemlink = $params['link']; @@ -337,7 +337,7 @@ function notification($params) $body .= "\n\n"; $body .= sprintf(t('\'%1$s\' may choose to extend this into a two-way or more permissive relationship in the future.'), $params['source_name']); - $sitelink = t('Please visit %s if you wish to make any changes to this relationship.'); + $sitelink = L10n::t('Please visit %s if you wish to make any changes to this relationship.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, ''.$sitename.''); $itemlink = $params['link']; @@ -357,7 +357,7 @@ function notification($params) $body = sprintf(t('Full Name: %1$s\nSite Location: %2$s\nLogin Name: %3$s (%4$s)'), $params['source_name'], $siteurl, $params['source_mail'], $params['source_nick']); - $sitelink = t('Please visit %s to approve or reject the request.'); + $sitelink = L10n::t('Please visit %s to approve or reject the request.'); $tsitelink = sprintf($sitelink, $params['link']); $hsitelink = sprintf($sitelink, ''.$sitename.'

'); $itemlink = $params['link']; diff --git a/include/event.php b/include/event.php index 64ccf3f53c..f5c4613d45 100644 --- a/include/event.php +++ b/include/event.php @@ -7,6 +7,7 @@ use Friendica\App; use Friendica\Content\Feature; use Friendica\Core\Addon; +use Friendica\Core\L10n; use Friendica\Core\PConfig; use Friendica\Core\System; use Friendica\Database\DBM; @@ -22,7 +23,7 @@ function format_event_html($ev, $simple = false) { return ''; } - $bd_format = t('l F d, Y \@ g:i A') ; // Friday January 18, 2011 @ 8 AM. + $bd_format = L10n::t('l F d, Y \@ g:i A') ; // Friday January 18, 2011 @ 8 AM. $event_start = (($ev['adjust']) ? day_translate(datetime_convert('UTC', date_default_timezone_get(), $ev['start'] , $bd_format )) @@ -39,14 +40,14 @@ function format_event_html($ev, $simple = false) { $o .= "
" . bbcode($ev['desc']) . "
"; - $o .= "

" . t('Starts:') . "

" . $event_start . "

"; + $o .= "

" . L10n::t('Starts:') . "

" . $event_start . "

"; if (! $ev['nofinish']) { - $o .= "

" . t('Finishes:') . "

" . $event_end ."

"; + $o .= "

" . L10n::t('Finishes:') . "

" . $event_end ."

"; } if (strlen($ev['location'])) { - $o .= "

" . t('Location:') . "

" . $ev['location'] . "

"; + $o .= "

" . L10n::t('Location:') . "

" . $ev['location'] . "

"; } return $o; @@ -56,13 +57,13 @@ function format_event_html($ev, $simple = false) { $o .= '
' . bbcode($ev['summary']) . '
' . "\r\n"; - $o .= '
' . t('Starts:') . ' ' . L10n::t('Starts:') . ' '.$event_start . '
' . "\r\n"; if (! $ev['nofinish']) { - $o .= '
' . t('Finishes:') . ' ' . L10n::t('Finishes:') . ' '.$event_end . '
' . "\r\n"; @@ -71,7 +72,7 @@ function format_event_html($ev, $simple = false) { $o .= '
' . bbcode($ev['desc']) . '
' . "\r\n"; if (strlen($ev['location'])) { - $o .= '
' . t('Location:') . ' ' + $o .= '
' . L10n::t('Location:') . ' ' . bbcode($ev['location']) . '
' . "\r\n"; @@ -425,60 +426,60 @@ function get_event_strings() { $i18n = [ "firstDay" => $firstDay, - "allday" => t("all-day"), + "allday" => L10n::t("all-day"), - "Sun" => t("Sun"), - "Mon" => t("Mon"), - "Tue" => t("Tue"), - "Wed" => t("Wed"), - "Thu" => t("Thu"), - "Fri" => t("Fri"), - "Sat" => t("Sat"), + "Sun" => L10n::t("Sun"), + "Mon" => L10n::t("Mon"), + "Tue" => L10n::t("Tue"), + "Wed" => L10n::t("Wed"), + "Thu" => L10n::t("Thu"), + "Fri" => L10n::t("Fri"), + "Sat" => L10n::t("Sat"), - "Sunday" => t("Sunday"), - "Monday" => t("Monday"), - "Tuesday" => t("Tuesday"), - "Wednesday" => t("Wednesday"), - "Thursday" => t("Thursday"), - "Friday" => t("Friday"), - "Saturday" => t("Saturday"), + "Sunday" => L10n::t("Sunday"), + "Monday" => L10n::t("Monday"), + "Tuesday" => L10n::t("Tuesday"), + "Wednesday" => L10n::t("Wednesday"), + "Thursday" => L10n::t("Thursday"), + "Friday" => L10n::t("Friday"), + "Saturday" => L10n::t("Saturday"), - "Jan" => t("Jan"), - "Feb" => t("Feb"), - "Mar" => t("Mar"), - "Apr" => t("Apr"), - "May" => t("May"), - "Jun" => t("Jun"), - "Jul" => t("Jul"), - "Aug" => t("Aug"), - "Sep" => t("Sept"), - "Oct" => t("Oct"), - "Nov" => t("Nov"), - "Dec" => t("Dec"), + "Jan" => L10n::t("Jan"), + "Feb" => L10n::t("Feb"), + "Mar" => L10n::t("Mar"), + "Apr" => L10n::t("Apr"), + "May" => L10n::t("May"), + "Jun" => L10n::t("Jun"), + "Jul" => L10n::t("Jul"), + "Aug" => L10n::t("Aug"), + "Sep" => L10n::t("Sept"), + "Oct" => L10n::t("Oct"), + "Nov" => L10n::t("Nov"), + "Dec" => L10n::t("Dec"), - "January" => t("January"), - "February" => t("February"), - "March" => t("March"), - "April" => t("April"), - "May" => t("May"), - "June" => t("June"), - "July" => t("July"), - "August" => t("August"), - "September" => t("September"), - "October" => t("October"), - "November" => t("November"), - "December" => t("December"), + "January" => L10n::t("January"), + "February" => L10n::t("February"), + "March" => L10n::t("March"), + "April" => L10n::t("April"), + "May" => L10n::t("May"), + "June" => L10n::t("June"), + "July" => L10n::t("July"), + "August" => L10n::t("August"), + "September" => L10n::t("September"), + "October" => L10n::t("October"), + "November" => L10n::t("November"), + "December" => L10n::t("December"), - "today" => t("today"), - "month" => t("month"), - "week" => t("week"), - "day" => t("day"), + "today" => L10n::t("today"), + "month" => L10n::t("month"), + "week" => L10n::t("week"), + "day" => L10n::t("day"), - "noevent" => t("No events to display"), + "noevent" => L10n::t("No events to display"), - "dtstart_label" => t("Starts:"), - "dtend_label" => t("Finishes:"), - "location_label" => t("Location:") + "dtstart_label" => L10n::t("Starts:"), + "dtend_label" => L10n::t("Finishes:"), + "location_label" => L10n::t("Location:") ]; return $i18n; @@ -588,7 +589,7 @@ function process_events($arr) { $events=[]; $last_date = ''; - $fmt = t('l, F j'); + $fmt = L10n::t('l, F j'); if (count($arr)) { foreach ($arr as $rr) { $j = (($rr['adjust']) ? datetime_convert('UTC', date_default_timezone_get(), $rr['start'], 'j') : datetime_convert('UTC', 'UTC', $rr['start'], 'j')); @@ -612,9 +613,9 @@ function process_events($arr) { $copy = null; $drop = null; if (local_user() && local_user() == $rr['uid'] && $rr['type'] == 'event') { - $edit = ((! $rr['cid']) ? [System::baseUrl() . '/events/event/' . $rr['id'], t('Edit event'), '', ''] : null); - $copy = ((! $rr['cid']) ? [System::baseUrl() . '/events/copy/' . $rr['id'], t('Duplicate event'), '', ''] : null); - $drop = [System::baseUrl() . '/events/drop/' . $rr['id'], t('Delete event'), '', '']; + $edit = ((! $rr['cid']) ? [System::baseUrl() . '/events/event/' . $rr['id'], L10n::t('Edit event'), '', ''] : null); + $copy = ((! $rr['cid']) ? [System::baseUrl() . '/events/copy/' . $rr['id'], L10n::t('Duplicate event'), '', ''] : null); + $drop = [System::baseUrl() . '/events/drop/' . $rr['id'], L10n::t('Delete event'), '', '']; } $title = strip_tags(html_entity_decode(bbcode($rr['summary']), ENT_QUOTES, 'UTF-8')); @@ -641,7 +642,7 @@ function process_events($arr) { 'is_first' => $is_first, 'item' => $rr, 'html' => $html, - 'plink' => [$rr['plink'], t('link to source'), '', ''], + 'plink' => [$rr['plink'], L10n::t('link to source'), '', ''], ]; } } @@ -901,9 +902,9 @@ function widget_events() { } return replace_macros(get_markup_template("events_aside.tpl"), [ - '$etitle' => t("Export"), - '$export_ical' => t("Export calendar as ical"), - '$export_csv' => t("Export calendar as csv"), + '$etitle' => L10n::t("Export"), + '$export_ical' => L10n::t("Export calendar as ical"), + '$export_csv' => L10n::t("Export calendar as csv"), '$user' => $user ]); } @@ -919,9 +920,9 @@ function format_event_item($item) { $finish = false; // Set the different time formats. - $dformat = t('l F d, Y \@ g:i A'); // Friday January 18, 2011 @ 8:01 AM. - $dformat_short = t('D g:i A'); // Fri 8:01 AM. - $tformat = t('g:i A'); // 8:01 AM. + $dformat = L10n::t('l F d, Y \@ g:i A'); // Friday January 18, 2011 @ 8:01 AM. + $dformat_short = L10n::t('D g:i A'); // Fri 8:01 AM. + $tformat = L10n::t('g:i A'); // 8:01 AM. // Convert the time to different formats. $dtstart_dt = (($item['event-adjust']) ? day_translate(datetime_convert('UTC', date_default_timezone_get(), $item['event-start'], $dformat)) : day_translate(datetime_convert('UTC', 'UTC', $item['event-start'], $dformat))); @@ -971,11 +972,11 @@ function format_event_item($item) { $event = replace_macros(get_markup_template('event_stream_item.tpl'), [ '$id' => $item['event-id'], '$title' => prepare_text($item['event-summary']), - '$dtstart_label' => t('Starts:'), + '$dtstart_label' => L10n::t('Starts:'), '$dtstart_title' => $dtstart_title, '$dtstart_dt' => $dtstart_dt, '$finish' => $finish, - '$dtend_label' => t('Finishes:'), + '$dtend_label' => L10n::t('Finishes:'), '$dtend_title' => $dtend_title, '$dtend_dt' => $dtend_dt, '$month_short' => $month_short, @@ -989,10 +990,10 @@ function format_event_item($item) { '$author_link' => $profile_link, '$author_avatar' => $item['author-avatar'], '$description' => prepare_text($item['event-desc']), - '$location_label' => t('Location:'), - '$show_map_label' => t('Show map'), - '$hide_map_label' => t('Hide map'), - '$map_btn_label' => t('Show map'), + '$location_label' => L10n::t('Location:'), + '$show_map_label' => L10n::t('Show map'), + '$hide_map_label' => L10n::t('Hide map'), + '$map_btn_label' => L10n::t('Show map'), '$location' => $location ]); diff --git a/include/items.php b/include/items.php index 3c20bc41cf..85da1d1ccf 100644 --- a/include/items.php +++ b/include/items.php @@ -6,6 +6,7 @@ use Friendica\App; use Friendica\Content\Feature; use Friendica\Core\Addon; use Friendica\Core\Config; +use Friendica\Core\L10n; use Friendica\Core\PConfig; use Friendica\Core\Worker; use Friendica\Core\System; @@ -1495,7 +1496,7 @@ function new_follower($importer, $contact, $datarray, $item, $sharing = false) { 'to_email' => $r[0]['email'], 'uid' => $r[0]['uid'], 'link' => System::baseUrl() . '/notifications/intro', - 'source_name' => ((strlen(stripslashes($contact_record['name']))) ? stripslashes($contact_record['name']) : t('[Name Withheld]')), + 'source_name' => ((strlen(stripslashes($contact_record['name']))) ? stripslashes($contact_record['name']) : L10n::t('[Name Withheld]')), 'source_link' => $contact_record['url'], 'source_photo' => $contact_record['photo'], 'verb' => ($sharing ? ACTIVITY_FRIEND : ACTIVITY_FOLLOW), @@ -1867,7 +1868,7 @@ function drop_item($id) { ); if (!DBM::is_result($r)) { - notice(t('Item not found.') . EOL); + notice(L10n::t('Item not found.') . EOL); goaway(System::baseUrl() . '/' . $_SESSION['return_url']); } @@ -1907,12 +1908,12 @@ function drop_item($id) { return replace_macros(get_markup_template('confirm.tpl'), [ '$method' => 'get', - '$message' => t('Do you really want to delete this item?'), + '$message' => L10n::t('Do you really want to delete this item?'), '$extra_inputs' => $inputs, - '$confirm' => t('Yes'), + '$confirm' => L10n::t('Yes'), '$confirm_url' => $query['base'], '$confirm_name' => 'confirmed', - '$cancel' => t('Cancel'), + '$cancel' => L10n::t('Cancel'), ]); } // Now check how the user responded to the confirmation query @@ -1926,7 +1927,7 @@ function drop_item($id) { goaway(System::baseUrl() . '/' . $_SESSION['return_url']); //NOTREACHED } else { - notice(t('Permission denied.') . EOL); + notice(L10n::t('Permission denied.') . EOL); goaway(System::baseUrl() . '/' . $_SESSION['return_url']); //NOTREACHED } @@ -2015,13 +2016,13 @@ function posted_date_widget($url, $uid, $wall) { $cutoff = ((array_key_exists($cutoff_year, $ret))? true : false); $o = replace_macros(get_markup_template('posted_date_widget.tpl'),[ - '$title' => t('Archives'), + '$title' => L10n::t('Archives'), '$size' => $visible_years, '$cutoff_year' => $cutoff_year, '$cutoff' => $cutoff, '$url' => $url, '$dates' => $ret, - '$showmore' => t('show more') + '$showmore' => L10n::t('show more') ]); return $o; diff --git a/include/like.php b/include/like.php index 1dbdcc936d..ae344d4269 100644 --- a/include/like.php +++ b/include/like.php @@ -1,7 +1,10 @@ ' . "\n") ; diff --git a/include/network.php b/include/network.php index a9110837d0..73fa80f981 100644 --- a/include/network.php +++ b/include/network.php @@ -4,6 +4,7 @@ */ use Friendica\App; use Friendica\Core\Addon; +use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Core\Config; use Friendica\Network\Probe; @@ -737,7 +738,7 @@ function scale_external_images($srctext, $include_link = true, $scale_replace = $mtch[0], '[img=' . $new_width . 'x' . $new_height. ']' . $scaled . '[/img]' . "\n" . (($include_link) - ? '[url=' . $mtch[1] . ']' . t('view full size') . '[/url]' . "\n" + ? '[url=' . $mtch[1] . ']' . L10n::t('view full size') . '[/url]' . "\n" : ''), $s ); diff --git a/include/security.php b/include/security.php index d1387ca226..a84df51133 100644 --- a/include/security.php +++ b/include/security.php @@ -1,8 +1,11 @@ 3 hours) before submitting it.') . EOL; + return L10n::t('The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it.') . EOL; } function check_form_security_token_redirectOnErr($err_redirect, $typename = '', $formname = 'form_security_token') diff --git a/include/tags.php b/include/tags.php index 4b45510b20..772255ed49 100644 --- a/include/tags.php +++ b/include/tags.php @@ -1,10 +1,10 @@ t('Tags'), + '$title' => L10n::t('Tags'), '$tags' => $tags ]); } diff --git a/include/text.php b/include/text.php index 6856d28aa3..8de31043ef 100644 --- a/include/text.php +++ b/include/text.php @@ -8,6 +8,7 @@ use Friendica\Content\Feature; use Friendica\Content\Smilies; use Friendica\Core\Addon; use Friendica\Core\Config; +use Friendica\Core\L10n; use Friendica\Core\PConfig; use Friendica\Core\System; use Friendica\Database\DBM; @@ -294,14 +295,14 @@ function paginate_data(App $a, $count = null) { if (!is_null($count)) { // minimal pager (newer / older) $data['class'] = 'pager'; - _l($data, 'prev', $url . '&page=' . ($a->pager['page'] - 1), t('newer'), 'previous' . ($a->pager['page'] == 1 ? ' disabled' : '')); - _l($data, 'next', $url . '&page=' . ($a->pager['page'] + 1), t('older'), 'next' . ($count <= 0 ? ' disabled' : '')); + _l($data, 'prev', $url . '&page=' . ($a->pager['page'] - 1), L10n::t('newer'), 'previous' . ($a->pager['page'] == 1 ? ' disabled' : '')); + _l($data, 'next', $url . '&page=' . ($a->pager['page'] + 1), L10n::t('older'), 'next' . ($count <= 0 ? ' disabled' : '')); } else { // full pager (first / prev / 1 / 2 / ... / 14 / 15 / next / last) $data['class'] = 'pagination'; if ($a->pager['total'] > $a->pager['itemspage']) { - _l($data, 'first', $url . '&page=1', t('first'), $a->pager['page'] == 1 ? 'disabled' : ''); - _l($data, 'prev', $url . '&page=' . ($a->pager['page'] - 1), t('prev'), $a->pager['page'] == 1 ? 'disabled' : ''); + _l($data, 'first', $url . '&page=1', L10n::t('first'), $a->pager['page'] == 1 ? 'disabled' : ''); + _l($data, 'prev', $url . '&page=' . ($a->pager['page'] - 1), L10n::t('prev'), $a->pager['page'] == 1 ? 'disabled' : ''); $numpages = $a->pager['total'] / $a->pager['itemspage']; @@ -335,8 +336,8 @@ function paginate_data(App $a, $count = null) { $data['pages'] = $pages; $lastpage = (($numpages > intval($numpages)) ? intval($numpages)+1 : $numpages); - _l($data, 'next', $url . '&page=' . ($a->pager['page'] + 1), t('next'), $a->pager['page'] == $lastpage ? 'disabled' : ''); - _l($data, 'last', $url . '&page=' . $lastpage, t('last'), $a->pager['page'] == $lastpage ? 'disabled' : ''); + _l($data, 'next', $url . '&page=' . ($a->pager['page'] + 1), L10n::t('next'), $a->pager['page'] == $lastpage ? 'disabled' : ''); + _l($data, 'last', $url . '&page=' . $lastpage, L10n::t('last'), $a->pager['page'] == $lastpage ? 'disabled' : ''); } } @@ -390,8 +391,8 @@ function alt_pager(App $a, $i) { function scroll_loader() { $tpl = get_markup_template("scroll_loader.tpl"); return replace_macros($tpl, [ - 'wait' => t('Loading more entries...'), - 'end' => t('The end') + 'wait' => L10n::t('Loading more entries...'), + 'end' => L10n::t('The end') ]); } @@ -927,7 +928,7 @@ function contact_block() { $total = intval($r[0]['total']); } if (!$total) { - $contacts = t('No contacts'); + $contacts = L10n::t('No contacts'); $micropro = null; } else { // Splitting the query in two parts makes it much faster @@ -964,7 +965,7 @@ function contact_block() { $o = replace_macros($tpl, [ '$contacts' => $contacts, '$nickname' => $a->profile['nickname'], - '$viewcontacts' => t('View Contacts'), + '$viewcontacts' => L10n::t('View Contacts'), '$micropro' => $micropro, ]); @@ -1053,16 +1054,16 @@ function search($s, $id = 'search-box', $url = 'search', $save = false, $aside = if (strpos($s, '#') === 0) { $mode = 'tag'; } - $save_label = $mode === 'text' ? t('Save') : t('Follow'); + $save_label = $mode === 'text' ? L10n::t('Save') : L10n::t('Follow'); $values = [ '$s' => htmlspecialchars($s), '$id' => $id, '$action_url' => $url, - '$search_label' => t('Search'), + '$search_label' => L10n::t('Search'), '$save_label' => $save_label, '$savedsearch' => Feature::isEnabled(local_user(),'savedsearch'), - '$search_hint' => t('@name, !forum, #tags, content'), + '$search_hint' => L10n::t('@name, !forum, #tags, content'), '$mode' => $mode ]; @@ -1073,7 +1074,7 @@ function search($s, $id = 'search-box', $url = 'search', $save = false, $aside = t("Contacts")]; if (Config::get('system','poco_local_search')) { - $values['$searchoption'][] = t("Forums"); + $values['$searchoption'][] = L10n::t("Forums"); } } @@ -1117,12 +1118,12 @@ function get_poke_verbs() { // value is array containing past tense verb, translation of present, translation of past $arr = [ - 'poke' => ['poked', t('poke'), t('poked')], - 'ping' => ['pinged', t('ping'), t('pinged')], - 'prod' => ['prodded', t('prod'), t('prodded')], - 'slap' => ['slapped', t('slap'), t('slapped')], - 'finger' => ['fingered', t('finger'), t('fingered')], - 'rebuff' => ['rebuffed', t('rebuff'), t('rebuffed')], + 'poke' => ['poked', L10n::t('poke'), L10n::t('poked')], + 'ping' => ['pinged', L10n::t('ping'), L10n::t('pinged')], + 'prod' => ['prodded', L10n::t('prod'), L10n::t('prodded')], + 'slap' => ['slapped', L10n::t('slap'), L10n::t('slapped')], + 'finger' => ['fingered', L10n::t('finger'), L10n::t('fingered')], + 'rebuff' => ['rebuffed', L10n::t('rebuff'), L10n::t('rebuffed')], ]; Addon::callHooks('poke_verbs', $arr); return $arr; @@ -1136,11 +1137,11 @@ function get_poke_verbs() { */ function day_translate($s) { $ret = str_replace(['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'], - [t('Monday'), t('Tuesday'), t('Wednesday'), t('Thursday'), t('Friday'), t('Saturday'), t('Sunday')], + [L10n::t('Monday'), L10n::t('Tuesday'), L10n::t('Wednesday'), L10n::t('Thursday'), L10n::t('Friday'), L10n::t('Saturday'), L10n::t('Sunday')], $s); $ret = str_replace(['January','February','March','April','May','June','July','August','September','October','November','December'], - [t('January'), t('February'), t('March'), t('April'), t('May'), t('June'), t('July'), t('August'), t('September'), t('October'), t('November'), t('December')], + [L10n::t('January'), L10n::t('February'), L10n::t('March'), L10n::t('April'), L10n::t('May'), L10n::t('June'), L10n::t('July'), L10n::t('August'), L10n::t('September'), L10n::t('October'), L10n::t('November'), L10n::t('December')], $ret); return $ret; @@ -1154,10 +1155,10 @@ function day_translate($s) { */ function day_short_translate($s) { $ret = str_replace(['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], - [t('Mon'), t('Tue'), t('Wed'), t('Thu'), t('Fri'), t('Sat'), t('Sun')], + [L10n::t('Mon'), L10n::t('Tue'), L10n::t('Wed'), L10n::t('Thu'), L10n::t('Fri'), L10n::t('Sat'), L10n::t('Sun')], $s); $ret = str_replace(['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov','Dec'], - [t('Jan'), t('Feb'), t('Mar'), t('Apr'), t('May'), ('Jun'), t('Jul'), t('Aug'), t('Sep'), t('Oct'), t('Nov'), t('Dec')], + [L10n::t('Jan'), L10n::t('Feb'), L10n::t('Mar'), L10n::t('Apr'), L10n::t('May'), ('Jun'), L10n::t('Jul'), L10n::t('Aug'), L10n::t('Sep'), L10n::t('Oct'), L10n::t('Nov'), L10n::t('Dec')], $ret); return $ret; } @@ -1358,7 +1359,7 @@ function prepare_body(&$item, $attach = false, $preview = false) { $as .= replace_macros(get_markup_template('video_top.tpl'), [ '$video' => [ 'id' => $id, - 'title' => t('View Video'), + 'title' => L10n::t('View Video'), 'src' => $the_url, 'mime' => $mime, ], @@ -1375,7 +1376,7 @@ function prepare_body(&$item, $attach = false, $preview = false) { } $title = ((strlen(trim($mtch[4]))) ? escape_tags(trim($mtch[4])) : escape_tags($mtch[1])); - $title .= ' ' . $mtch[2] . ' ' . t('bytes'); + $title .= ' ' . $mtch[2] . ' ' . L10n::t('bytes'); $icon = '
'; $as .= '' . $icon . ''; @@ -1410,7 +1411,7 @@ function prepare_body(&$item, $attach = false, $preview = false) { while ((strpos($s, $spoilersearch) !== false)) { $pos = strpos($s, $spoilersearch); $rnd = random_string(8); - $spoilerreplace = '
' . sprintf(t('Click to open/close')) . ''. + $spoilerreplace = '
' . sprintf(L10n::t('Click to open/close')) . ''. '