Improved language detection

This commit is contained in:
Michael 2023-09-03 08:44:17 +00:00
parent 508be7a742
commit 7fd1f1424a
3 changed files with 47 additions and 30 deletions

View file

@ -183,7 +183,7 @@ class User
$system['dob'] = '0000-00-00';
// Ensure that the user contains data
$user = DBA::selectFirst('user', ['prvkey', 'guid'], ['uid' => 0]);
$user = DBA::selectFirst('user', ['prvkey', 'guid', 'language'], ['uid' => 0]);
if (empty($user['prvkey']) || empty($user['guid'])) {
$fields = [
'username' => $system['name'],
@ -203,7 +203,8 @@ class User
$system['guid'] = $fields['guid'];
} else {
$system['guid'] = $user['guid'];
$system['guid'] = $user['guid'];
$system['language'] = $user['language'];
}
return $system;
@ -532,6 +533,28 @@ class User
return $default_circle;
}
/**
* Fetch the language code from the given user. If the code is invalid, return the system language
*
* @param integer $uid User-Id
* @param boolean $short If true, return the short form g.g. "en", otherwise the long form e.g. "en_UK"
* @return string
*/
public static function getLanguageCode(int $uid, bool $short): string
{
$owner = self::getOwnerDataById($uid);
$languages = DI::l10n()->getAvailableLanguages();
if (in_array($owner['language'], array_keys($languages))) {
$language = $owner['language'];
} else {
$language = DI::config()->get('system', 'language');
}
if ($short) {
return substr($language, 0, 2);
}
return $language;
}
/**
* Authenticate a user with a clear text password
*