Improved language detection
This commit is contained in:
parent
508be7a742
commit
7fd1f1424a
3 changed files with 47 additions and 30 deletions
|
@ -183,7 +183,7 @@ class User
|
||||||
$system['dob'] = '0000-00-00';
|
$system['dob'] = '0000-00-00';
|
||||||
|
|
||||||
// Ensure that the user contains data
|
// 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'])) {
|
if (empty($user['prvkey']) || empty($user['guid'])) {
|
||||||
$fields = [
|
$fields = [
|
||||||
'username' => $system['name'],
|
'username' => $system['name'],
|
||||||
|
@ -203,7 +203,8 @@ class User
|
||||||
|
|
||||||
$system['guid'] = $fields['guid'];
|
$system['guid'] = $fields['guid'];
|
||||||
} else {
|
} else {
|
||||||
$system['guid'] = $user['guid'];
|
$system['guid'] = $user['guid'];
|
||||||
|
$system['language'] = $user['language'];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $system;
|
return $system;
|
||||||
|
@ -532,6 +533,28 @@ class User
|
||||||
return $default_circle;
|
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
|
* Authenticate a user with a clear text password
|
||||||
*
|
*
|
||||||
|
|
|
@ -180,27 +180,25 @@ class Channel extends BaseModule
|
||||||
'accesskey' => 'd'
|
'accesskey' => 'd'
|
||||||
];
|
];
|
||||||
|
|
||||||
$owner = User::getOwnerDataById($this->session->getLocalUserId());
|
$language = User::getLanguageCode($this->session->getLocalUserId(), false);
|
||||||
$languages = $this->l10n->getAvailableLanguages();
|
$languages = $this->l10n->getAvailableLanguages();
|
||||||
if (!empty($owner['language']) && !empty($languages[$owner['language']])) {
|
$tabs[] = [
|
||||||
$tabs[] = [
|
'label' => $languages[$language],
|
||||||
'label' => $languages[$owner['language']],
|
'url' => 'channel/' . self::LANGUAGE,
|
||||||
'url' => 'channel/' . self::LANGUAGE,
|
'sel' => self::$content == self::LANGUAGE ? 'active' : '',
|
||||||
'sel' => self::$content == self::LANGUAGE ? 'active' : '',
|
'title' => $this->l10n->t('Posts in %s', $languages[$language]),
|
||||||
'title' => $this->l10n->t('Posts in %s', $languages[$owner['language']]),
|
'id' => 'channel-language-tab',
|
||||||
'id' => 'channel-language-tab',
|
'accesskey' => 'g'
|
||||||
'accesskey' => 'g'
|
];
|
||||||
];
|
|
||||||
|
|
||||||
$tabs[] = [
|
$tabs[] = [
|
||||||
'label' => $this->l10n->t('Whats Hot %s', $languages[$owner['language']]),
|
'label' => $this->l10n->t('Whats Hot %s', $languages[$language]),
|
||||||
'url' => 'channel/' . self::HOTLANG,
|
'url' => 'channel/' . self::HOTLANG,
|
||||||
'sel' => self::$content == self::HOTLANG ? 'active' : '',
|
'sel' => self::$content == self::HOTLANG ? 'active' : '',
|
||||||
'title' => $this->l10n->t('Posts in %s with a lot of interactions', $languages[$owner['language']]),
|
'title' => $this->l10n->t('Posts in %s with a lot of interactions', $languages[$language]),
|
||||||
'id' => 'channel-hotlang-tab',
|
'id' => 'channel-hotlang-tab',
|
||||||
'accesskey' => 'o'
|
'accesskey' => 'o'
|
||||||
];
|
];
|
||||||
}
|
|
||||||
|
|
||||||
$tab_tpl = Renderer::getMarkupTemplate('common_tabs.tpl');
|
$tab_tpl = Renderer::getMarkupTemplate('common_tabs.tpl');
|
||||||
$o .= Renderer::replaceMacros($tab_tpl, ['$tabs' => $tabs]);
|
$o .= Renderer::replaceMacros($tab_tpl, ['$tabs' => $tabs]);
|
||||||
|
@ -354,14 +352,14 @@ class Channel extends BaseModule
|
||||||
} elseif (self::$content == self::AUDIO) {
|
} elseif (self::$content == self::AUDIO) {
|
||||||
$condition = ["`media-type` & ?", 4];
|
$condition = ["`media-type` & ?", 4];
|
||||||
} elseif (self::$content == self::LANGUAGE) {
|
} elseif (self::$content == self::LANGUAGE) {
|
||||||
$owner = User::getOwnerDataById($this->session->getLocalUserId());
|
$condition = ["JSON_EXTRACT(JSON_KEYS(language), '$[0]') = ?", User::getLanguageCode($this->session->getLocalUserId(), true)];
|
||||||
$condition = ["JSON_EXTRACT(`language`, ?) > ?", '$.' . $owner['language'], $this->config->get('channel', 'language_threshold')];
|
|
||||||
} elseif (self::$content == self::HOTLANG) {
|
} elseif (self::$content == self::HOTLANG) {
|
||||||
$owner = User::getOwnerDataById($this->session->getLocalUserId());
|
|
||||||
if (!is_null(self::$accountType)) {
|
if (!is_null(self::$accountType)) {
|
||||||
$condition = ["(`comments` >= ? OR `activities` >= ?) AND `contact-type` = ? AND JSON_EXTRACT(`language`, ?) > ?", $this->getMedianComments(4), $this->getMedianActivities(4), self::$accountType, '$.' . $owner['language'], $this->config->get('channel', 'language_threshold')];
|
$condition = ["(`comments` >= ? OR `activities` >= ?) AND `contact-type` = ? AND JSON_EXTRACT(JSON_KEYS(language), '$[0]') = ?",
|
||||||
|
$this->getMedianComments(4), $this->getMedianActivities(4), self::$accountType, User::getLanguageCode($this->session->getLocalUserId(), true)];
|
||||||
} else {
|
} else {
|
||||||
$condition = ["(`comments` >= ? OR `activities` >= ?) AND `contact-type` != ? AND JSON_EXTRACT(`language`, ?) > ?", $this->getMedianComments(4), $this->getMedianActivities(4), Contact::TYPE_COMMUNITY, '$.' . $owner['language'], $this->config->get('channel', 'language_threshold')];
|
$condition = ["(`comments` >= ? OR `activities` >= ?) AND `contact-type` != ? AND JSON_EXTRACT(JSON_KEYS(language), '$[0]') = ?",
|
||||||
|
$this->getMedianComments(4), $this->getMedianActivities(4), Contact::TYPE_COMMUNITY, User::getLanguageCode($this->session->getLocalUserId(), true)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -804,9 +804,5 @@ return [
|
||||||
// interaction_score_days (Integer)
|
// interaction_score_days (Integer)
|
||||||
// Number of days that are used to calculate the interaction score.
|
// Number of days that are used to calculate the interaction score.
|
||||||
'interaction_score_days' => 30,
|
'interaction_score_days' => 30,
|
||||||
|
|
||||||
// language_threshold (Float)
|
|
||||||
// Treshold for the language detection.
|
|
||||||
'language_threshold' => 0.6,
|
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
Loading…
Reference in a new issue