use Friendica\BaseObject;
use Friendica\Database\DBA;
+use Friendica\Util\Strings;
/**
* Provide Language, Translation, and Localization functions to the application
}
}
}
- //if $_GET['lang'] is set force $_GET['lang']
+
if (isset($_GET['lang'])) {
$_SESSION['language'] = $_GET['lang'];
}
/**
* @brief Returns the preferred language from the HTTP_ACCEPT_LANGUAGE header
* @return string The two-letter language code
+ * @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function detectLanguage()
{
}
}
}
- //if $_GET['lang'] is set force $_GET['lang']
+
if (isset($_GET['lang'])) {
$lang_list = [$_GET['lang']];
}
+
// 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"))) {
*
* If called repeatedly, it won't save the translation strings again, just load the new ones.
*
- * @see popLang()
+ * @see popLang()
* @brief Stores the current language strings and load a different language.
* @param string $lang Language code
+ * @throws \Exception
*/
public static function pushLang($lang)
{
* Uses an App object shim since all the strings files refer to $a->strings
*
* @param string $lang language code to load
+ * @throws \Exception
*/
private static function loadTranslationTable($lang)
{
+ $lang = Strings::sanitizeFilePathItem($lang);
+
if ($lang === self::$lang) {
return;
}
// load enabled addons strings
$addons = DBA::select('addon', ['name'], ['installed' => true]);
while ($p = DBA::fetch($addons)) {
- $name = $p['name'];
+ $name = Strings::sanitizeFilePathItem($p['name']);
if (file_exists("addon/$name/lang/$lang/strings.php")) {
include "addon/$name/lang/$lang/strings.php";
}
*
* @param string $singular
* @param string $plural
- * @param int $count
+ * @param int $count
* @return string
+ * @throws \Exception
*/
public static function tt($singular, $plural, $count)
{
/**
* Provide a fallback which will not collide with a function defined in any language file
+ *
+ * @param int $n
+ * @return bool
*/
private static function stringPluralSelectDefault($n)
{
* Load poke verbs
*
* @return array index is present tense verb
- * value is array containing past tense verb, translation of present, translation of past
+ * value is array containing past tense verb, translation of present, translation of past
+ * @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @hook poke_verbs pokes array
*/
public static function getPokeVerbs()