Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions actions/change.php → actions/language_selector/change.php
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
<?php

$new_lang_id = get_input("lang_id");
$new_lang_id = get_input('lang_id');
$installed = get_installed_translations();

if (!empty($new_lang_id) && array_key_exists($new_lang_id, $installed)) {
if ($user = elgg_get_logged_in_user_entity()) {

$user->language = $new_lang_id;
$user->save();

// let other plugins know we updated the language
elgg_trigger_event("update", "language", $user);
}
elgg_trigger_event('update', 'language', $user);
} else {
$cookie = new \ElggCookie('language');
$cookie->value = $new_lang_id;
elgg_set_cookie($cookie);
}
}

forward(REFERER);

return elgg_ok_response('');
100 changes: 100 additions & 0 deletions classes/ColdTrick/LanguageSelector/Bootstrap.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
<?php

namespace ColdTrick\LanguageSelector;

use Elgg\Includer;
use Elgg\DefaultPluginBootstrap;

class Bootstrap extends DefaultPluginBootstrap {

/**
* {@inheritdoc}
*/
protected function getRoot() {
return $this->plugin->getPath();
}

/**
* {@inheritdoc}
*/
public function load() {
Includer::requireFileOnce($this->getRoot() . '/lib/functions.php');
}

/**
* {@inheritdoc}
*/
public function boot() {
$this->setLoggedOutUserLanguages();
}

/**
* {@inheritdoc}
*/
public function init() {
$this->registerViews();
$this->registerEvents();
$this->registerHooks();
}

/**
* {@inheritdoc}
*/
public function upgrade() {
elgg_unset_plugin_setting('allowed_languages', 'language_selector');
}

/**
* {@inheritdoc}
*/
protected function registerViews() {
elgg_extend_view('elgg.css', 'language_selector/site.css');

if ((bool)elgg_get_plugin_setting('show_in_header', 'language_selector')) {
elgg_extend_view('page/elements/topbar', 'language_selector/dropdown');
}
}

/**
* {@inheritdoc}
*/
protected function registerEvents() {
$event = $this->elgg()->events;

$event->registerHandler('language:merge', 'translation_editor', [Settings::class, 'invalidateSetting']);
$event->registerHandler('all', 'plugin', [Settings::class, 'invalidateSetting']);
}

protected function registerHooks() {
$hooks = $this->elgg()->hooks;

$hooks->registerHandler('all', 'plugin', [Settings::class, 'invalidateSetting']);
}

/**
* {@inheritdoc}
*/
protected function setLoggedOutUserLanguages() {
if (elgg_is_logged_in()) {
return;
}

$new_lang = elgg()->translator->detectLanguage();

$current_language = elgg()->translator->getCurrentLanguage();
if (!empty($new_lang) && ($new_lang !== $current_language)) {
$allowed = language_selector_get_allowed_translations();
if (in_array($new_lang, $allowed)) {
// set new language
elgg()->translator->setCurrentLanguage($new_lang);

// language has been change; reload language keys
if (elgg_is_active_plugin('translation_editor')) {
translation_editor_load_translations();
} else {
elgg()->translator->reloadAllTranslations();
}
}
}
}
}
16 changes: 16 additions & 0 deletions classes/ColdTrick/LanguageSelector/Settings.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?php

namespace ColdTrick\LanguageSelector;

class Settings {

/**
* Unset the plugin setting so it will be reset when used the next time
*
* @return void
*/
public static function invalidateSetting() {
elgg_unset_plugin_setting('allowed_languages', 'language_selector');
}

}
19 changes: 19 additions & 0 deletions elgg-plugin.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

use ColdTrick\LanguageSelector\Bootstrap;

return [
'bootstrap' => Bootstrap::class,

'actions' => [
'language_selector/change' => [
'access' => 'public',
],
],

'settings' => [
'show_in_header' => true,
'show_images' => true,
'min_completeness' => 30,
],
];
10 changes: 3 additions & 7 deletions languages/en.php
Original file line number Diff line number Diff line change
@@ -1,12 +1,8 @@
<?php

$english = array(

return [
'language_selector:admin:settings:min_completeness' => 'Minimum language completeness (e.g. 30)',
'language_selector:admin:settings:show_in_header' => 'Show language selector in header?',
'language_selector:admin:settings:autodetect' => 'Enable autodetect of language (for non-logged in users)',
'language_selector:admin:settings:show_in_header' => 'Show language selector on the topbar?',
'language_selector:admin:settings:show_images' => 'Show images of language/country (if available)',
'language_selector:change' => 'Change language',
);

add_translation("en",$english);
];
9 changes: 2 additions & 7 deletions languages/fr.php
Original file line number Diff line number Diff line change
@@ -1,12 +1,7 @@
<?php

$french = array(

return [
'language_selector:admin:settings:min_completeness' => "Quel est le pourcentage minimum d'exhaustivité d'une langue pour qu'elle puisse apparaître dans le sélecteur de langue (ex 30)",
'language_selector:admin:settings:show_in_header' => "Afficher les langues disponibles dans l'entête",
'language_selector:admin:settings:autodetect' => "Activer la détection automatique de la langue (pour les utilisateurs non connectés)",
'language_selector:admin:settings:show_images' => "Afficher le drapeau du pays (si disponible)",

);

add_translation("fr",$french);
];
9 changes: 2 additions & 7 deletions languages/nl.php
Original file line number Diff line number Diff line change
@@ -1,12 +1,7 @@
<?php

$dutch = array(

return [
'language_selector:admin:settings:min_completeness' => 'Minimum taalcompleetheidspercentage (bijv. 30)',
'language_selector:admin:settings:show_in_header' => 'Toon de language selector in de header?',
'language_selector:admin:settings:autodetect' => 'Activeer automatische detectie van browser taal (voor niet aangemelde gebruikers)',
'language_selector:admin:settings:show_images' => 'Toon afbeelding van vlag van land (indien beschikbaar)',

);

add_translation("nl",$dutch);
];
73 changes: 8 additions & 65 deletions lib/functions.php
Original file line number Diff line number Diff line change
@@ -1,100 +1,43 @@
<?php

/**
* Functions for the language selector
*/

/**
* Returns the translations that are allowed to be used
*
* @return array
*/
function language_selector_get_allowed_translations() {

$configured_allowed = elgg_get_plugin_setting("allowed_languages", "language_selector");
$configured_allowed = elgg_get_plugin_setting('allowed_languages', 'language_selector');

if (empty($configured_allowed)) {
$allowed = array("en");
$allowed = ['en'];

$installed_languages = get_installed_translations();

$min_completeness = (int) elgg_get_plugin_setting("min_completeness", "language_selector");
$min_completeness = (int) elgg_get_plugin_setting('min_completeness', 'language_selector');

if ($min_completeness > 0) {
if (elgg_is_active_plugin("translation_editor")) {
$completeness_function = "translation_editor_get_language_completeness";
if (elgg_is_active_plugin('translation_editor')) {
$completeness_function = 'translation_editor_get_language_completeness';
} else {
$completeness_function = "get_language_completeness";
$completeness_function = 'get_language_completeness';
}

foreach ($installed_languages as $lang_id => $lang_description) {

if ($lang_id != "en") {
if ($lang_id != 'en') {
if (($completeness = $completeness_function($lang_id)) >= $min_completeness) {
$allowed[] = $lang_id;
}
}
}
}

elgg_set_plugin_setting("allowed_languages", implode(",", $allowed), "language_selector");
elgg_set_plugin_setting('allowed_languages', implode(',', $allowed), 'language_selector');

} else {
$allowed = string_to_tag_array($configured_allowed);
}

return $allowed;
}

/**
* Sets the language for the logged out user
*
* @return void
*/
function language_selector_set_logged_out_user_language() {
global $CONFIG;

if (elgg_is_logged_in()) {
return;
}

if (!empty($_COOKIE['client_language'])) {
// switched with language selector
$new_lang = $_COOKIE['client_language'];
} else {

$browserlang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

if (!empty($browserlang)) {
// autodetect language

if (elgg_get_plugin_setting("autodetect", "language_selector") == "yes") {
$new_lang = $browserlang;
}
}
}

if (!empty($new_lang) && ($new_lang !== $CONFIG->language)) {
$allowed = language_selector_get_allowed_translations();
if (in_array($new_lang, $allowed)) {
// set new language
$CONFIG->language = $new_lang;

// language has been change; reload language keys
if (elgg_is_active_plugin("translation_editor")) {
translation_editor_load_translations();
} else {
reload_all_translations();
}
}
}
}

/**
* Unset the plugin setting so it will be reset when used the next time
*
* @return void
*/
function language_selector_invalidate_setting() {
elgg_unset_plugin_setting("allowed_languages", "language_selector");
}
4 changes: 2 additions & 2 deletions manifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@
<name>Language Selector</name>
<author>ColdTrick IT Solutions</author>
<version>3.0</version>
<description>Provides a selector for users to easily change the language</description>
<description>Provides a selector for users to easily change the language.</description>
<website>http://www.coldtrick.com/</website>
<copyright>(C) ColdTrick IT Solutions 2009 - 2012</copyright>
<license>GNU Public License version 2</license>

<requires>
<type>elgg_release</type>
<version>2.0</version>
<version>3.3</version>
</requires>

<suggests>
Expand Down
39 changes: 0 additions & 39 deletions start.php

This file was deleted.

Loading