From 99fabe2eb83ec90acedc49e87b21b46424e7d2d0 Mon Sep 17 00:00:00 2001 From: Christian Schnegelberger Date: Thu, 21 Sep 2023 10:53:39 +0200 Subject: [PATCH 01/16] [ticket/17191] new config values lang/en/composer.json fr common/recaptcha PHPBB3-17191 --- phpBB/language/en/captcha_recaptcha.php | 4 ---- phpBB/language/en/common.php | 7 ------- phpBB/language/en/composer.json | 6 +++++- 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/phpBB/language/en/captcha_recaptcha.php b/phpBB/language/en/captcha_recaptcha.php index b76ae56ac0..513e47d3b4 100644 --- a/phpBB/language/en/captcha_recaptcha.php +++ b/phpBB/language/en/captcha_recaptcha.php @@ -37,10 +37,6 @@ if (empty($lang) || !is_array($lang)) // in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine $lang = array_merge($lang, [ - // Find the language/country code on https://developers.google.com/recaptcha/docs/language - // If no code exists for your language you can use "en" or leave the string empty - 'RECAPTCHA_LANG' => 'en-GB', - 'CAPTCHA_RECAPTCHA' => 'reCaptcha v2', 'CAPTCHA_RECAPTCHA_V3' => 'reCaptcha v3', diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index 3470527318..d974a7e7f5 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -42,15 +42,8 @@ if (empty($lang) || !is_array($lang)) $lang = array_merge($lang, array( 'TRANSLATION_INFO' => '', - 'DIRECTION' => 'ltr', 'DATE_FORMAT' => '|d M Y|', // 01 Jan 2007 (with Relative days enabled) 'DATETIME_FORMAT' => '|d M Y, H:i|', // 01 Jan 2007, 13:37 (with Relative days enabled) - 'USER_LANG' => 'en-gb', - - // You can define different rules for the determination of plural forms here. - // See https://area51.phpbb.com/docs/dev/3.3.x/language/plurals.html for more information - // or ask the translation manager for help. - 'PLURAL_RULE' => 1, '1_DAY' => '1 day', '1_MONTH' => '1 month', diff --git a/phpBB/language/en/composer.json b/phpBB/language/en/composer.json index bbb2da4ae1..aef3c41be7 100644 --- a/phpBB/language/en/composer.json +++ b/phpBB/language/en/composer.json @@ -22,6 +22,10 @@ "language-iso": "en", "english-name": "British English", "local-name": "British English", - "phpbb-version": "4.0.0-a1-dev" + "phpbb-version": "4.0.0-a1-dev", + "direction": "ltr", + "user_lang": "en-gb", + "plural_rule": "1", + "recaptcha_lang": "en-GB" } } From 36ea0c1f2e865892eda7a25b85cbd5671a2e94f8 Mon Sep 17 00:00:00 2001 From: Christian Schnegelberger Date: Thu, 21 Sep 2023 11:07:18 +0200 Subject: [PATCH 02/16] [ticket/17191] Update language file helper for new composer values PHPBB3-17191 --- phpBB/language/en/composer.json | 6 +++--- phpBB/phpbb/language/language_file_helper.php | 6 +++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/phpBB/language/en/composer.json b/phpBB/language/en/composer.json index aef3c41be7..95cb24718c 100644 --- a/phpBB/language/en/composer.json +++ b/phpBB/language/en/composer.json @@ -24,8 +24,8 @@ "local-name": "British English", "phpbb-version": "4.0.0-a1-dev", "direction": "ltr", - "user_lang": "en-gb", - "plural_rule": "1", - "recaptcha_lang": "en-GB" + "user-lang": "en-gb", + "plural-rule": "1", + "recaptcha-lang": "en-GB" } } diff --git a/phpBB/phpbb/language/language_file_helper.php b/phpBB/phpbb/language/language_file_helper.php index e6966a3710..a6041eacb6 100644 --- a/phpBB/phpbb/language/language_file_helper.php +++ b/phpBB/phpbb/language/language_file_helper.php @@ -91,7 +91,7 @@ class language_file_helper */ protected function get_language_data_from_json(array $data) : array { - if (!isset($data['extra']['language-iso']) || !isset($data['extra']['english-name']) || !isset($data['extra']['local-name'])) + if (!isset($data['extra']['language-iso']) || !isset($data['extra']['english-name']) || !isset($data['extra']['local-name']) || !isset($data['extra']['direction']) || !isset($data['extra']['user-lang']) || !isset($data['extra']['plural-rule']) || !isset($data['extra']['recaptcha-lang'])) { throw new DomainException('INVALID_LANGUAGE_PACK'); } @@ -115,6 +115,10 @@ class language_file_helper 'author' => implode(', ', $authors), 'version' => $data['version'], 'phpbb_version' => $data['extra']['phpbb-version'], + 'direction' => $data['extra']['direction'], + 'user-lang' => $data['extra']['user-lang'], + 'plural-rule' => $data['extra']['plural-rule'], + 'recaptcha-lang'=> $data['extra']['recaptcha-lang'], ]; } } From 1cc6a479a13039164830ffb7187f01b0730e735c Mon Sep 17 00:00:00 2001 From: Christian Schnegelberger Date: Thu, 21 Sep 2023 15:45:52 +0200 Subject: [PATCH 03/16] [ticket/17191] Replace lang keys in fucntions with composer output PHPBB3-17191 --- phpBB/includes/functions.php | 17 ++++++++++++----- phpBB/phpbb/language/language.php | 1 + phpBB/phpbb/language/language_file_helper.php | 6 +++--- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 61a156ae65..3ffd2ae234 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -3668,7 +3668,7 @@ function phpbb_get_avatar($row, $alt, $ignore_config = false, $lazy = false) function page_header($page_title = '', $display_online_list = false, $item_id = 0, $item = 'forum', $send_headers = true) { global $db, $config, $template, $SID, $_SID, $_EXTRA_URL, $user, $auth, $phpEx, $phpbb_root_path; - global $phpbb_dispatcher, $request, $phpbb_container, $phpbb_admin_path; + global $phpbb_dispatcher, $request, $phpbb_container, $phpbb_admin_path, $language_helper; if (defined('HEADER_INC')) { @@ -3824,7 +3824,10 @@ function page_header($page_title = '', $display_online_list = false, $item_id = $web_path = $phpbb_path_helper->get_web_root_path(); // Send a proper content-language to the output - $user_lang = $user->lang['USER_LANG']; + $language_file_helper = $phpbb_container->get('language.helper.language_file'); + + $available_languages = $language_file_helper->get_available_languages(); + $user_lang = $available_languages[0]['user_lang']; if (strpos($user_lang, '-x-') !== false) { $user_lang = substr($user_lang, 0, strpos($user_lang, '-x-')); @@ -3880,6 +3883,10 @@ function page_header($page_title = '', $display_online_list = false, $item_id = $s_login_redirect = build_hidden_fields(array('redirect' => $phpbb_path_helper->remove_web_root_path(build_url()))); + // Grab the users lang direction and store it for later use + $available_languages = $language_file_helper->get_available_languages(); + $direction = $available_languages[0]['direction']; + // Add form token for login box, in case page is presenting a login form. add_form_key('login', '_LOGIN'); @@ -3970,9 +3977,9 @@ function page_header($page_title = '', $display_online_list = false, $item_id = 'S_USER_LANG' => $user_lang, 'S_USER_BROWSER' => (isset($user->data['session_browser'])) ? $user->data['session_browser'] : $user->lang['UNKNOWN_BROWSER'], 'S_USERNAME' => $user->data['username'], - 'S_CONTENT_DIRECTION' => $user->lang['DIRECTION'], - 'S_CONTENT_FLOW_BEGIN' => ($user->lang['DIRECTION'] == 'ltr') ? 'left' : 'right', - 'S_CONTENT_FLOW_END' => ($user->lang['DIRECTION'] == 'ltr') ? 'right' : 'left', + 'S_CONTENT_DIRECTION' => $direction, + 'S_CONTENT_FLOW_BEGIN' => ($direction == 'ltr') ? 'left' : 'right', + 'S_CONTENT_FLOW_END' => ($direction == 'ltr') ? 'right' : 'left', 'S_CONTENT_ENCODING' => 'UTF-8', 'S_TIMEZONE' => sprintf($user->lang['ALL_TIMES'], $timezone_offset, $timezone_name), 'S_DISPLAY_ONLINE_LIST' => ($l_online_time) ? 1 : 0, diff --git a/phpBB/phpbb/language/language.php b/phpBB/phpbb/language/language.php index 6c59e02bba..d9f0721769 100644 --- a/phpBB/phpbb/language/language.php +++ b/phpBB/phpbb/language/language.php @@ -14,6 +14,7 @@ namespace phpbb\language; use phpbb\language\exception\invalid_plural_rule_exception; +use phpbb\language\language_file_helper; /** * Wrapper class for loading translations diff --git a/phpBB/phpbb/language/language_file_helper.php b/phpBB/phpbb/language/language_file_helper.php index a6041eacb6..b64269f27a 100644 --- a/phpBB/phpbb/language/language_file_helper.php +++ b/phpBB/phpbb/language/language_file_helper.php @@ -116,9 +116,9 @@ class language_file_helper 'version' => $data['version'], 'phpbb_version' => $data['extra']['phpbb-version'], 'direction' => $data['extra']['direction'], - 'user-lang' => $data['extra']['user-lang'], - 'plural-rule' => $data['extra']['plural-rule'], - 'recaptcha-lang'=> $data['extra']['recaptcha-lang'], + 'user_lang' => $data['extra']['user-lang'], + 'plural_rule' => $data['extra']['plural-rule'], + 'recaptcha_lang'=> $data['extra']['recaptcha-lang'], ]; } } From 06f38a56468df99cfafe661ee3561cc8bf832047 Mon Sep 17 00:00:00 2001 From: Christian Schnegelberger Date: Thu, 21 Sep 2023 16:32:59 +0200 Subject: [PATCH 04/16] [ticket/17191] Add language helper function to get composer.json content PHPBB3-17191 --- phpBB/includes/functions.php | 11 +++++------ phpBB/phpbb/language/language_file_helper.php | 12 ++++++++++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 3ffd2ae234..850b3ef28d 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -3826,8 +3826,11 @@ function page_header($page_title = '', $display_online_list = false, $item_id = // Send a proper content-language to the output $language_file_helper = $phpbb_container->get('language.helper.language_file'); - $available_languages = $language_file_helper->get_available_languages(); - $user_lang = $available_languages[0]['user_lang']; + // Grab the users lang direction and store it for later use + $direction = $language_file_helper->get_lang_key_value('direction'); + + // Get the user_lang string + $user_lang = $language_file_helper->get_lang_key_value('user_lang'); if (strpos($user_lang, '-x-') !== false) { $user_lang = substr($user_lang, 0, strpos($user_lang, '-x-')); @@ -3883,10 +3886,6 @@ function page_header($page_title = '', $display_online_list = false, $item_id = $s_login_redirect = build_hidden_fields(array('redirect' => $phpbb_path_helper->remove_web_root_path(build_url()))); - // Grab the users lang direction and store it for later use - $available_languages = $language_file_helper->get_available_languages(); - $direction = $available_languages[0]['direction']; - // Add form token for login box, in case page is presenting a login form. add_form_key('login', '_LOGIN'); diff --git a/phpBB/phpbb/language/language_file_helper.php b/phpBB/phpbb/language/language_file_helper.php index b64269f27a..f862754ce4 100644 --- a/phpBB/phpbb/language/language_file_helper.php +++ b/phpBB/phpbb/language/language_file_helper.php @@ -67,6 +67,18 @@ class language_file_helper return $available_languages; } + /** + * Return by given lang key its composer.json value + * + * @return string + * + */ + public function get_lang_key_value($lang_key) : string + { + $available_languages = $this->get_available_languages(); + return $available_languages[0][$lang_key]; + } + /** * Collect some data from the composer.json file * From 6d07852410221205a867c3233585e760804d58a4 Mon Sep 17 00:00:00 2001 From: Christian Schnegelberger Date: Thu, 21 Sep 2023 17:00:37 +0200 Subject: [PATCH 05/16] [ticket/17191] Add new direction and user_langto helper and language.php PHPBB3-17191 --- phpBB/includes/functions.php | 4 +++- phpBB/includes/functions_acp.php | 18 ++++++++++++++---- phpBB/phpbb/install/controller/helper.php | 16 ++++++++++++---- phpBB/phpbb/language/language.php | 10 +++++++++- 4 files changed, 38 insertions(+), 10 deletions(-) diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 850b3ef28d..34e9dd66cb 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -3668,7 +3668,7 @@ function phpbb_get_avatar($row, $alt, $ignore_config = false, $lazy = false) function page_header($page_title = '', $display_online_list = false, $item_id = 0, $item = 'forum', $send_headers = true) { global $db, $config, $template, $SID, $_SID, $_EXTRA_URL, $user, $auth, $phpEx, $phpbb_root_path; - global $phpbb_dispatcher, $request, $phpbb_container, $phpbb_admin_path, $language_helper; + global $phpbb_dispatcher, $request, $phpbb_container, $phpbb_admin_path; if (defined('HEADER_INC')) { @@ -3824,6 +3824,8 @@ function page_header($page_title = '', $display_online_list = false, $item_id = $web_path = $phpbb_path_helper->get_web_root_path(); // Send a proper content-language to the output + // Get the language helper + /* @var $language_helper \phpbb\language\language_file_helper */ $language_file_helper = $phpbb_container->get('language.helper.language_file'); // Grab the users lang direction and store it for later use diff --git a/phpBB/includes/functions_acp.php b/phpBB/includes/functions_acp.php index 26d16aaae8..1b02c028a7 100644 --- a/phpBB/includes/functions_acp.php +++ b/phpBB/includes/functions_acp.php @@ -69,6 +69,16 @@ function adm_page_header($page_title) $phpbb_version_parts = explode('.', PHPBB_VERSION, 3); $phpbb_major = $phpbb_version_parts[0] . '.' . $phpbb_version_parts[1]; + // Get the language helper + /* @var $language_helper \phpbb\language\language_file_helper */ + $language_file_helper = $phpbb_container->get('language.helper.language_file'); + + // Grab the users lang direction and store it for later use + $direction = $language_file_helper->get_lang_key_value('direction'); + + // Get the user_lang string + $user_lang = $language_file_helper->get_lang_key_value('user_lang'); + $template->assign_vars(array( 'PAGE_TITLE' => $page_title, 'USERNAME' => $user->data['username'], @@ -109,11 +119,11 @@ function adm_page_header($page_title) 'ICON_SYNC_DISABLED' => '', 'S_USER_ID' => $user->data['user_id'], - 'S_USER_LANG' => $user->lang['USER_LANG'], - 'S_CONTENT_DIRECTION' => $user->lang['DIRECTION'], + 'S_USER_LANG' => $user_lang, + 'S_CONTENT_DIRECTION' => $direction, 'S_CONTENT_ENCODING' => 'UTF-8', - 'S_CONTENT_FLOW_BEGIN' => ($user->lang['DIRECTION'] == 'ltr') ? 'left' : 'right', - 'S_CONTENT_FLOW_END' => ($user->lang['DIRECTION'] == 'ltr') ? 'right' : 'left', + 'S_CONTENT_FLOW_BEGIN' => ($direction == 'ltr') ? 'left' : 'right', + 'S_CONTENT_FLOW_END' => ($direction == 'ltr') ? 'right' : 'left', 'CONTAINER_EXCEPTION' => $phpbb_container->hasParameter('container_exception') ? $phpbb_container->getParameter('container_exception') : false, )); diff --git a/phpBB/phpbb/install/controller/helper.php b/phpBB/phpbb/install/controller/helper.php index 1f936dda86..15e3586f17 100644 --- a/phpBB/phpbb/install/controller/helper.php +++ b/phpBB/phpbb/install/controller/helper.php @@ -253,11 +253,19 @@ class helper */ protected function page_header($page_title, $selected_language = false) { + global $phpbb_container; + // Path to templates $paths = array($this->phpbb_root_path . 'install/update/new/adm/', $this->phpbb_admin_path); $paths = array_filter($paths, 'is_dir'); $path = array_shift($paths); $path = substr($path, strlen($this->phpbb_root_path)); + // Get the language helper + /* @var $language_helper \phpbb\language\language_file_helper */ + $language_file_helper = $phpbb_container->get('language.helper.language_file'); + + // Grab the users lang direction and store it for later use + $direction = $language_file_helper->get_lang_key_value('direction'); $this->template->assign_vars(array( 'L_CHANGE' => $this->language->lang('CHANGE'), @@ -271,13 +279,13 @@ class helper 'T_TEMPLATE_PATH' => $this->path_helper->get_web_root_path() . $path . 'style', 'T_ASSETS_PATH' => $this->path_helper->get_web_root_path() . $path . '../assets', - 'S_CONTENT_DIRECTION' => $this->language->lang('DIRECTION'), - 'S_CONTENT_FLOW_BEGIN' => ($this->language->lang('DIRECTION') === 'ltr') ? 'left' : 'right', - 'S_CONTENT_FLOW_END' => ($this->language->lang('DIRECTION') === 'ltr') ? 'right' : 'left', + 'S_CONTENT_DIRECTION' => $direction, + 'S_CONTENT_FLOW_BEGIN' => ($direction === 'ltr') ? 'left' : 'right', + 'S_CONTENT_FLOW_END' => ($direction === 'ltr') ? 'right' : 'left', 'S_CONTENT_ENCODING' => 'UTF-8', 'S_LANG_SELECT' => $selected_language, - 'S_USER_LANG' => $this->language->lang('USER_LANG'), + 'S_USER_LANG' => $language_file_helper->get_lang_key_value('user_lang'), )); $this->render_navigation(); diff --git a/phpBB/phpbb/language/language.php b/phpBB/phpbb/language/language.php index d9f0721769..8f1eedb6ac 100644 --- a/phpBB/phpbb/language/language.php +++ b/phpBB/phpbb/language/language.php @@ -404,8 +404,16 @@ class language */ public function get_plural_form($number, $force_rule = false) { + global $phpbb_container; + // Get the language helper + /* @var $language_helper \phpbb\language\language_file_helper */ + $language_file_helper = $phpbb_container->get('language.helper.language_file'); + + // Grab the users lang plural rule + $plural_rule_content = $language_file_helper->get_lang_key_value('plural_rule'); + $number = (int) $number; - $plural_rule = ($force_rule !== false) ? $force_rule : ((isset($this->lang['PLURAL_RULE'])) ? $this->lang['PLURAL_RULE'] : 1); + $plural_rule = ($force_rule !== false) ? $force_rule : ((isset($plural_rule_content)) ? $plural_rule_content : 1); /** * The following plural rules are based on a list published by the Mozilla Developer Network From 706c788f281b043fac081299395ff99a2f7b36c6 Mon Sep 17 00:00:00 2001 From: Christian Schnegelberger Date: Thu, 21 Sep 2023 19:01:47 +0200 Subject: [PATCH 06/16] [ticket/17191] Add L_RECAPTCHA_LANG to page_header() PHPBB3-17191 --- phpBB/includes/functions.php | 1 + 1 file changed, 1 insertion(+) diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 34e9dd66cb..c74b52a58b 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -3938,6 +3938,7 @@ function page_header($page_title = '', $display_online_list = false, $item_id = 'L_INDEX' => ($config['board_index_text'] !== '') ? $config['board_index_text'] : $user->lang['FORUM_INDEX'], 'L_SITE_HOME' => ($config['site_home_text'] !== '') ? $config['site_home_text'] : $user->lang['HOME'], 'L_ONLINE_EXPLAIN' => $l_online_time, + 'L_RECAPTCHA_LANG' => $language_file_helper->get_lang_key_value('recaptcha_lang'), 'U_PRIVATEMSGS' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=inbox'), 'U_RETURN_INBOX' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=inbox'), From 21c38e2572d1e9cda108a0d5b542c7da30dc4246 Mon Sep 17 00:00:00 2001 From: Christian Schnegelberger Date: Fri, 22 Sep 2023 10:06:49 +0200 Subject: [PATCH 07/16] [ticket/17191] Change plural-rule to integer from string PHPBB3-17191 --- phpBB/language/en/composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpBB/language/en/composer.json b/phpBB/language/en/composer.json index 95cb24718c..7402e5efa5 100644 --- a/phpBB/language/en/composer.json +++ b/phpBB/language/en/composer.json @@ -25,7 +25,7 @@ "phpbb-version": "4.0.0-a1-dev", "direction": "ltr", "user-lang": "en-gb", - "plural-rule": "1", + "plural-rule": 1, "recaptcha-lang": "en-GB" } } From 5b79ac0fc914380f3b6b96c4db3f2bd8a91264ab Mon Sep 17 00:00:00 2001 From: Christian Schnegelberger Date: Fri, 22 Sep 2023 10:50:47 +0200 Subject: [PATCH 08/16] [ticket/17191] Remove not used use statement in language/language.php PHPBB3-17191 --- phpBB/phpbb/language/language.php | 1 - 1 file changed, 1 deletion(-) diff --git a/phpBB/phpbb/language/language.php b/phpBB/phpbb/language/language.php index 8f1eedb6ac..6d2ac70554 100644 --- a/phpBB/phpbb/language/language.php +++ b/phpBB/phpbb/language/language.php @@ -14,7 +14,6 @@ namespace phpbb\language; use phpbb\language\exception\invalid_plural_rule_exception; -use phpbb\language\language_file_helper; /** * Wrapper class for loading translations From a54f5c0ca0e6664a98f6af4c55ece455a22ffb79 Mon Sep 17 00:00:00 2001 From: Christian Schnegelberger Date: Fri, 22 Sep 2023 11:13:11 +0200 Subject: [PATCH 09/16] [ticket/17191] Add lang helper service to feed/controller PHPBB3-17191 --- phpBB/config/default/container/services_feed.yml | 1 + phpBB/phpbb/feed/controller/feed.php | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/phpBB/config/default/container/services_feed.yml b/phpBB/config/default/container/services_feed.yml index 80caf546df..54c45d0c01 100644 --- a/phpBB/config/default/container/services_feed.yml +++ b/phpBB/config/default/container/services_feed.yml @@ -14,6 +14,7 @@ services: - '@event_dispatcher' - '@language' - '%core.php_ext%' + - '@language.helper.language_file' feed.helper: class: phpbb\feed\helper diff --git a/phpBB/phpbb/feed/controller/feed.php b/phpBB/phpbb/feed/controller/feed.php index d95cda5248..4faa70bc38 100644 --- a/phpBB/phpbb/feed/controller/feed.php +++ b/phpBB/phpbb/feed/controller/feed.php @@ -23,6 +23,7 @@ use phpbb\feed\exception\feed_unavailable_exception; use phpbb\feed\exception\unauthorized_exception; use phpbb\feed\helper as feed_helper; use phpbb\controller\helper as controller_helper; +use phpbb\language\language_file_helper; use phpbb\symfony_request; use phpbb\user; use phpbb\language\language; @@ -93,6 +94,11 @@ class feed */ protected $language; + /** + * @var language_file_helper + */ + protected $lang_helper; + /** * Constructor * @@ -108,8 +114,9 @@ class feed * @param dispatcher_interface $phpbb_dispatcher * @param language $language * @param string $php_ext + * @param language_file_helper $lang_helper */ - public function __construct(Environment $twig, symfony_request $request, controller_helper $controller_helper, config $config, driver_interface $db, ContainerInterface $container, feed_helper $feed_helper, user $user, auth $auth, dispatcher_interface $phpbb_dispatcher, language $language, $php_ext) + public function __construct(Environment $twig, symfony_request $request, controller_helper $controller_helper, config $config, driver_interface $db, ContainerInterface $container, feed_helper $feed_helper, user $user, auth $auth, dispatcher_interface $phpbb_dispatcher, language $language, $php_ext, language_file_helper $lang_helper) { $this->request = $request; $this->controller_helper = $controller_helper; @@ -123,6 +130,7 @@ class feed $this->template = $twig; $this->language = $language; $this->phpbb_dispatcher = $phpbb_dispatcher; + $this->lang_helper = $lang_helper; } /** @@ -387,7 +395,7 @@ class feed 'FEED_TITLE' => $this->config['sitename'], 'FEED_SUBTITLE' => $this->config['site_desc'], 'FEED_UPDATED' => $this->feed_helper->format_date($feed_updated_time), - 'FEED_LANG' => $this->user->lang['USER_LANG'], + 'FEED_LANG' => $this->lang_helper->get_lang_key_value('user_lang'), 'FEED_AUTHOR' => $this->config['sitename'], // Feed entries From 14b7caecd19499de7ba6d82150c5c09e86d03b2e Mon Sep 17 00:00:00 2001 From: Christian Schnegelberger Date: Fri, 22 Sep 2023 17:30:23 +0200 Subject: [PATCH 10/16] [ticket/17191] Make sure user_lang from DB is considered, with fallback PHPBB3-17191 --- .../default/container/services_language.yml | 1 + phpBB/phpbb/language/language_file_helper.php | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/phpBB/config/default/container/services_language.yml b/phpBB/config/default/container/services_language.yml index 8201fbf9b6..a7c5359049 100644 --- a/phpBB/config/default/container/services_language.yml +++ b/phpBB/config/default/container/services_language.yml @@ -3,6 +3,7 @@ services: class: phpbb\language\language_file_helper arguments: - '%core.root_path%' + - '@user' language: class: phpbb\language\language diff --git a/phpBB/phpbb/language/language_file_helper.php b/phpBB/phpbb/language/language_file_helper.php index f862754ce4..9bdb082977 100644 --- a/phpBB/phpbb/language/language_file_helper.php +++ b/phpBB/phpbb/language/language_file_helper.php @@ -15,6 +15,7 @@ namespace phpbb\language; use DomainException; use phpbb\json\sanitizer as json_sanitizer; +use phpbb\user; use Symfony\Component\Finder\Finder; /** @@ -27,14 +28,19 @@ class language_file_helper */ protected $phpbb_root_path; + /** @var user */ + protected $user; + /** * Constructor * * @param string $phpbb_root_path Path to phpBB's root + * @param user $user User Object */ - public function __construct(string $phpbb_root_path) + public function __construct(string $phpbb_root_path, \phpbb\user $user) { $this->phpbb_root_path = $phpbb_root_path; + $this->user = $user; } /** @@ -76,7 +82,13 @@ class language_file_helper public function get_lang_key_value($lang_key) : string { $available_languages = $this->get_available_languages(); - return $available_languages[0][$lang_key]; + + foreach ($available_languages as $key => $value) + { + $available_languages[$value['iso']] = $value; + } + $user_lang = $this->user->data['user_lang'] ?? 'en'; + return $available_languages[$user_lang][$lang_key]; } /** From 8abf9b66e157a9032ad4d083212c717942d2cb6b Mon Sep 17 00:00:00 2001 From: Christian Schnegelberger Date: Sat, 23 Sep 2023 11:52:53 +0200 Subject: [PATCH 11/16] [ticket/17191] Use di and avoid circular ref PHPBB3-17191 --- .../default/container/services_language.yml | 4 ++- phpBB/includes/functions.php | 6 ++--- phpBB/includes/functions_acp.php | 4 +-- phpBB/phpbb/feed/controller/feed.php | 2 +- phpBB/phpbb/install/controller/helper.php | 9 +++---- phpBB/phpbb/language/language.php | 24 +++++++++++++----- phpBB/phpbb/language/language_file_helper.php | 25 +++++++++++-------- 7 files changed, 45 insertions(+), 29 deletions(-) diff --git a/phpBB/config/default/container/services_language.yml b/phpBB/config/default/container/services_language.yml index a7c5359049..e94d75c768 100644 --- a/phpBB/config/default/container/services_language.yml +++ b/phpBB/config/default/container/services_language.yml @@ -3,12 +3,14 @@ services: class: phpbb\language\language_file_helper arguments: - '%core.root_path%' - - '@user' + - '@config' language: class: phpbb\language\language arguments: - '@language.loader' + - '@language.helper.language_file' + - '@config' language.loader_abstract: abstract: true diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index c74b52a58b..d8df704bdb 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -3829,10 +3829,10 @@ function page_header($page_title = '', $display_online_list = false, $item_id = $language_file_helper = $phpbb_container->get('language.helper.language_file'); // Grab the users lang direction and store it for later use - $direction = $language_file_helper->get_lang_key_value('direction'); + $direction = $language_file_helper->get_lang_key_value('direction', $user->data['user_lang']); // Get the user_lang string - $user_lang = $language_file_helper->get_lang_key_value('user_lang'); + $user_lang = $language_file_helper->get_lang_key_value('user_lang', $user->data['user_lang']); if (strpos($user_lang, '-x-') !== false) { $user_lang = substr($user_lang, 0, strpos($user_lang, '-x-')); @@ -3938,7 +3938,7 @@ function page_header($page_title = '', $display_online_list = false, $item_id = 'L_INDEX' => ($config['board_index_text'] !== '') ? $config['board_index_text'] : $user->lang['FORUM_INDEX'], 'L_SITE_HOME' => ($config['site_home_text'] !== '') ? $config['site_home_text'] : $user->lang['HOME'], 'L_ONLINE_EXPLAIN' => $l_online_time, - 'L_RECAPTCHA_LANG' => $language_file_helper->get_lang_key_value('recaptcha_lang'), + 'L_RECAPTCHA_LANG' => $language_file_helper->get_lang_key_value('recaptcha_lang', $user->data['user_lang']), 'U_PRIVATEMSGS' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=inbox'), 'U_RETURN_INBOX' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=inbox'), diff --git a/phpBB/includes/functions_acp.php b/phpBB/includes/functions_acp.php index 1b02c028a7..09d5e0ebbe 100644 --- a/phpBB/includes/functions_acp.php +++ b/phpBB/includes/functions_acp.php @@ -74,10 +74,10 @@ function adm_page_header($page_title) $language_file_helper = $phpbb_container->get('language.helper.language_file'); // Grab the users lang direction and store it for later use - $direction = $language_file_helper->get_lang_key_value('direction'); + $direction = $language_file_helper->get_lang_key_value('direction', $user->data['user_lang']); // Get the user_lang string - $user_lang = $language_file_helper->get_lang_key_value('user_lang'); + $user_lang = $language_file_helper->get_lang_key_value('user_lang', $user->data['user_lang']); $template->assign_vars(array( 'PAGE_TITLE' => $page_title, diff --git a/phpBB/phpbb/feed/controller/feed.php b/phpBB/phpbb/feed/controller/feed.php index 4faa70bc38..b498806e1b 100644 --- a/phpBB/phpbb/feed/controller/feed.php +++ b/phpBB/phpbb/feed/controller/feed.php @@ -395,7 +395,7 @@ class feed 'FEED_TITLE' => $this->config['sitename'], 'FEED_SUBTITLE' => $this->config['site_desc'], 'FEED_UPDATED' => $this->feed_helper->format_date($feed_updated_time), - 'FEED_LANG' => $this->lang_helper->get_lang_key_value('user_lang'), + 'FEED_LANG' => $this->lang_helper->get_lang_key_value('user_lang', $user->data['user_lang']), 'FEED_AUTHOR' => $this->config['sitename'], // Feed entries diff --git a/phpBB/phpbb/install/controller/helper.php b/phpBB/phpbb/install/controller/helper.php index 15e3586f17..363d2aab89 100644 --- a/phpBB/phpbb/install/controller/helper.php +++ b/phpBB/phpbb/install/controller/helper.php @@ -253,19 +253,16 @@ class helper */ protected function page_header($page_title, $selected_language = false) { - global $phpbb_container; + global $user; // Path to templates $paths = array($this->phpbb_root_path . 'install/update/new/adm/', $this->phpbb_admin_path); $paths = array_filter($paths, 'is_dir'); $path = array_shift($paths); $path = substr($path, strlen($this->phpbb_root_path)); - // Get the language helper - /* @var $language_helper \phpbb\language\language_file_helper */ - $language_file_helper = $phpbb_container->get('language.helper.language_file'); // Grab the users lang direction and store it for later use - $direction = $language_file_helper->get_lang_key_value('direction'); + $direction = $this->lang_helper->get_lang_key_value('direction', $user->data['user_lang']); $this->template->assign_vars(array( 'L_CHANGE' => $this->language->lang('CHANGE'), @@ -285,7 +282,7 @@ class helper 'S_CONTENT_ENCODING' => 'UTF-8', 'S_LANG_SELECT' => $selected_language, - 'S_USER_LANG' => $language_file_helper->get_lang_key_value('user_lang'), + 'S_USER_LANG' => $this->lang_helper->get_lang_key_value('user_lang', $user->data['user_lang']), )); $this->render_navigation(); diff --git a/phpBB/phpbb/language/language.php b/phpBB/phpbb/language/language.php index 6d2ac70554..f7379eddff 100644 --- a/phpBB/phpbb/language/language.php +++ b/phpBB/phpbb/language/language.php @@ -13,6 +13,7 @@ namespace phpbb\language; +use phpbb\config\config; use phpbb\language\exception\invalid_plural_rule_exception; /** @@ -70,15 +71,29 @@ class language */ protected $loader; + /** + * @var language_file_helper + */ + protected $lang_helper; + + /** + * @var \phpbb\config\config + */ + protected $config; + /** * Constructor * * @param \phpbb\language\language_file_loader $loader Language file loader + * @param language_file_helper $lang_helper * @param array|null $common_modules Array of common language modules to load (optional) + * @param config $config The config */ - public function __construct(language_file_loader $loader, $common_modules = null) + public function __construct(language_file_loader $loader, language_file_helper $lang_helper, config $config, $common_modules = null) { $this->loader = $loader; + $this->lang_helper = $lang_helper; + $this->config = $config; // Set up default information $this->user_language = null; @@ -403,13 +418,10 @@ class language */ public function get_plural_form($number, $force_rule = false) { - global $phpbb_container; - // Get the language helper - /* @var $language_helper \phpbb\language\language_file_helper */ - $language_file_helper = $phpbb_container->get('language.helper.language_file'); + global $user; // Grab the users lang plural rule - $plural_rule_content = $language_file_helper->get_lang_key_value('plural_rule'); + $plural_rule_content = $this->lang_helper->get_lang_key_value('plural_rule', $user->data['user_lang']); $number = (int) $number; $plural_rule = ($force_rule !== false) ? $force_rule : ((isset($plural_rule_content)) ? $plural_rule_content : 1); diff --git a/phpBB/phpbb/language/language_file_helper.php b/phpBB/phpbb/language/language_file_helper.php index 9bdb082977..5e1a05b9e5 100644 --- a/phpBB/phpbb/language/language_file_helper.php +++ b/phpBB/phpbb/language/language_file_helper.php @@ -15,8 +15,8 @@ namespace phpbb\language; use DomainException; use phpbb\json\sanitizer as json_sanitizer; -use phpbb\user; use Symfony\Component\Finder\Finder; +use phpbb\config\config; /** * Helper class for language file related functions @@ -28,19 +28,22 @@ class language_file_helper */ protected $phpbb_root_path; - /** @var user */ - protected $user; + /** + * @var \phpbb\config\config + */ + protected $config; /** * Constructor * - * @param string $phpbb_root_path Path to phpBB's root - * @param user $user User Object + * @param string $phpbb_root_path Path to phpBB's root + * @param config $config The config + * */ - public function __construct(string $phpbb_root_path, \phpbb\user $user) + public function __construct(string $phpbb_root_path, config $config) { $this->phpbb_root_path = $phpbb_root_path; - $this->user = $user; + $this->config = $config; } /** @@ -79,16 +82,18 @@ class language_file_helper * @return string * */ - public function get_lang_key_value($lang_key) : string + public function get_lang_key_value($lang_key, $user_lang_db) : string { $available_languages = $this->get_available_languages(); foreach ($available_languages as $key => $value) { $available_languages[$value['iso']] = $value; + unset($available_languages[$key]); } - $user_lang = $this->user->data['user_lang'] ?? 'en'; - return $available_languages[$user_lang][$lang_key]; + $board_default_lang = $this->config['default_lang']; + $user_lang_db = $user_lang_db ?? $board_default_lang; + return $available_languages[$user_lang_db][$lang_key]; } /** From 154f0e719dc0ba178c0b9f6f855403e76e73c521 Mon Sep 17 00:00:00 2001 From: Christian Schnegelberger Date: Sat, 23 Sep 2023 12:22:12 +0200 Subject: [PATCH 12/16] [ticket/17191] Fix code sniffer issues PHPBB3-17191 --- phpBB/phpbb/language/language.php | 2 +- phpBB/phpbb/language/language_file_helper.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/phpBB/phpbb/language/language.php b/phpBB/phpbb/language/language.php index f7379eddff..5f1672fafb 100644 --- a/phpBB/phpbb/language/language.php +++ b/phpBB/phpbb/language/language.php @@ -77,7 +77,7 @@ class language protected $lang_helper; /** - * @var \phpbb\config\config + * @var config */ protected $config; diff --git a/phpBB/phpbb/language/language_file_helper.php b/phpBB/phpbb/language/language_file_helper.php index 5e1a05b9e5..9fdaa914a2 100644 --- a/phpBB/phpbb/language/language_file_helper.php +++ b/phpBB/phpbb/language/language_file_helper.php @@ -29,7 +29,7 @@ class language_file_helper protected $phpbb_root_path; /** - * @var \phpbb\config\config + * @var config */ protected $config; From 4baa3e778da44fd0914cfb924d6f1a76afe69db4 Mon Sep 17 00:00:00 2001 From: Christian Schnegelberger Date: Sat, 23 Sep 2023 12:38:17 +0200 Subject: [PATCH 13/16] [ticket/17191] Repair functional tests for lang change PHPBB3-17191 --- phpBB/phpbb/feed/controller/feed.php | 2 +- tests/attachment/upload_test.php | 5 ++++- tests/auth/provider_apache_test.php | 3 ++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/phpBB/phpbb/feed/controller/feed.php b/phpBB/phpbb/feed/controller/feed.php index b498806e1b..3b469b240b 100644 --- a/phpBB/phpbb/feed/controller/feed.php +++ b/phpBB/phpbb/feed/controller/feed.php @@ -395,7 +395,7 @@ class feed 'FEED_TITLE' => $this->config['sitename'], 'FEED_SUBTITLE' => $this->config['site_desc'], 'FEED_UPDATED' => $this->feed_helper->format_date($feed_updated_time), - 'FEED_LANG' => $this->lang_helper->get_lang_key_value('user_lang', $user->data['user_lang']), + 'FEED_LANG' => $this->lang_helper->get_lang_key_value('user_lang', $this->user->data['user_lang']), 'FEED_AUTHOR' => $this->config['sitename'], // Feed entries diff --git a/tests/attachment/upload_test.php b/tests/attachment/upload_test.php index 609ee99536..ddae3e84e0 100644 --- a/tests/attachment/upload_test.php +++ b/tests/attachment/upload_test.php @@ -11,6 +11,9 @@ * */ +use phpbb\config\config; +use phpbb\language\language_file_helper; + require_once(__DIR__ . '/../../phpBB/includes/functions_posting.php'); class phpbb_attachment_upload_test extends \phpbb_database_test_case @@ -95,7 +98,7 @@ class phpbb_attachment_upload_test extends \phpbb_database_test_case $this->request = $this->createMock('\phpbb\request\request'); $this->filesystem = new \phpbb\filesystem\filesystem(); - $this->language = new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx)); + $this->language = new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx), new language_file_helper($phpbb_root_path, $config), $config); $this->php_ini = new \bantu\IniGetWrapper\IniGetWrapper; $guessers = array( new \Symfony\Component\Mime\FileinfoMimeTypeGuesser(), diff --git a/tests/auth/provider_apache_test.php b/tests/auth/provider_apache_test.php index e5bfdbf858..f3fab80b80 100644 --- a/tests/auth/provider_apache_test.php +++ b/tests/auth/provider_apache_test.php @@ -31,7 +31,8 @@ class phpbb_auth_provider_apache_test extends phpbb_database_test_case $db = $this->new_dbal(); $config = new \phpbb\config\config(array()); $lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx); - $lang = new \phpbb\language\language($lang_loader); + $lang_helper = new \phpbb\language\language_file_helper($phpbb_root_path, $config); + $lang = new \phpbb\language\language($lang_loader, $lang_helper, $config); $this->request = $this->createMock('\phpbb\request\request'); $this->user = new \phpbb\user($lang, '\phpbb\datetime');; From dc9ef4066957cbe0a86a4646535e07ef5fc85255 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Wed, 4 Oct 2023 21:16:54 +0200 Subject: [PATCH 14/16] [ticket/17191] Inject variables from composer.json when loading language files PHPBB3-17191 --- .../default/container/services_feed.yml | 1 - .../default/container/services_language.yml | 3 -- phpBB/includes/functions.php | 18 +++------ phpBB/includes/functions_acp.php | 18 ++------- phpBB/phpbb/feed/controller/feed.php | 12 +----- phpBB/phpbb/install/controller/helper.php | 13 ++---- phpBB/phpbb/language/language.php | 40 +++++++++---------- phpBB/phpbb/language/language_file_helper.php | 29 +------------- phpBB/phpbb/language/language_file_loader.php | 33 +++++++++++++++ tests/attachment/upload_test.php | 2 +- 10 files changed, 69 insertions(+), 100 deletions(-) diff --git a/phpBB/config/default/container/services_feed.yml b/phpBB/config/default/container/services_feed.yml index 54c45d0c01..80caf546df 100644 --- a/phpBB/config/default/container/services_feed.yml +++ b/phpBB/config/default/container/services_feed.yml @@ -14,7 +14,6 @@ services: - '@event_dispatcher' - '@language' - '%core.php_ext%' - - '@language.helper.language_file' feed.helper: class: phpbb\feed\helper diff --git a/phpBB/config/default/container/services_language.yml b/phpBB/config/default/container/services_language.yml index e94d75c768..8201fbf9b6 100644 --- a/phpBB/config/default/container/services_language.yml +++ b/phpBB/config/default/container/services_language.yml @@ -3,14 +3,11 @@ services: class: phpbb\language\language_file_helper arguments: - '%core.root_path%' - - '@config' language: class: phpbb\language\language arguments: - '@language.loader' - - '@language.helper.language_file' - - '@config' language.loader_abstract: abstract: true diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index d8df704bdb..9a757b7b92 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -3824,15 +3824,7 @@ function page_header($page_title = '', $display_online_list = false, $item_id = $web_path = $phpbb_path_helper->get_web_root_path(); // Send a proper content-language to the output - // Get the language helper - /* @var $language_helper \phpbb\language\language_file_helper */ - $language_file_helper = $phpbb_container->get('language.helper.language_file'); - - // Grab the users lang direction and store it for later use - $direction = $language_file_helper->get_lang_key_value('direction', $user->data['user_lang']); - - // Get the user_lang string - $user_lang = $language_file_helper->get_lang_key_value('user_lang', $user->data['user_lang']); + $user_lang = $user->lang('USER_LANG'); if (strpos($user_lang, '-x-') !== false) { $user_lang = substr($user_lang, 0, strpos($user_lang, '-x-')); @@ -3938,7 +3930,7 @@ function page_header($page_title = '', $display_online_list = false, $item_id = 'L_INDEX' => ($config['board_index_text'] !== '') ? $config['board_index_text'] : $user->lang['FORUM_INDEX'], 'L_SITE_HOME' => ($config['site_home_text'] !== '') ? $config['site_home_text'] : $user->lang['HOME'], 'L_ONLINE_EXPLAIN' => $l_online_time, - 'L_RECAPTCHA_LANG' => $language_file_helper->get_lang_key_value('recaptcha_lang', $user->data['user_lang']), + 'L_RECAPTCHA_LANG' => $user->lang('RECAPTCHA_LANG'), 'U_PRIVATEMSGS' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=inbox'), 'U_RETURN_INBOX' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=inbox'), @@ -3979,9 +3971,9 @@ function page_header($page_title = '', $display_online_list = false, $item_id = 'S_USER_LANG' => $user_lang, 'S_USER_BROWSER' => (isset($user->data['session_browser'])) ? $user->data['session_browser'] : $user->lang['UNKNOWN_BROWSER'], 'S_USERNAME' => $user->data['username'], - 'S_CONTENT_DIRECTION' => $direction, - 'S_CONTENT_FLOW_BEGIN' => ($direction == 'ltr') ? 'left' : 'right', - 'S_CONTENT_FLOW_END' => ($direction == 'ltr') ? 'right' : 'left', + 'S_CONTENT_DIRECTION' => $user->lang('DIRECTION'), + 'S_CONTENT_FLOW_BEGIN' => ($user->lang('DIRECTION') == 'ltr') ? 'left' : 'right', + 'S_CONTENT_FLOW_END' => ($user->lang('DIRECTION') == 'ltr') ? 'right' : 'left', 'S_CONTENT_ENCODING' => 'UTF-8', 'S_TIMEZONE' => sprintf($user->lang['ALL_TIMES'], $timezone_offset, $timezone_name), 'S_DISPLAY_ONLINE_LIST' => ($l_online_time) ? 1 : 0, diff --git a/phpBB/includes/functions_acp.php b/phpBB/includes/functions_acp.php index 09d5e0ebbe..14eda9d9b6 100644 --- a/phpBB/includes/functions_acp.php +++ b/phpBB/includes/functions_acp.php @@ -69,16 +69,6 @@ function adm_page_header($page_title) $phpbb_version_parts = explode('.', PHPBB_VERSION, 3); $phpbb_major = $phpbb_version_parts[0] . '.' . $phpbb_version_parts[1]; - // Get the language helper - /* @var $language_helper \phpbb\language\language_file_helper */ - $language_file_helper = $phpbb_container->get('language.helper.language_file'); - - // Grab the users lang direction and store it for later use - $direction = $language_file_helper->get_lang_key_value('direction', $user->data['user_lang']); - - // Get the user_lang string - $user_lang = $language_file_helper->get_lang_key_value('user_lang', $user->data['user_lang']); - $template->assign_vars(array( 'PAGE_TITLE' => $page_title, 'USERNAME' => $user->data['username'], @@ -119,11 +109,11 @@ function adm_page_header($page_title) 'ICON_SYNC_DISABLED' => '', 'S_USER_ID' => $user->data['user_id'], - 'S_USER_LANG' => $user_lang, - 'S_CONTENT_DIRECTION' => $direction, + 'S_USER_LANG' => $user->lang('USER_LANG'), + 'S_CONTENT_DIRECTION' => $user->lang('DIRECTION'), 'S_CONTENT_ENCODING' => 'UTF-8', - 'S_CONTENT_FLOW_BEGIN' => ($direction == 'ltr') ? 'left' : 'right', - 'S_CONTENT_FLOW_END' => ($direction == 'ltr') ? 'right' : 'left', + 'S_CONTENT_FLOW_BEGIN' => ($user->lang('DIRECTION') == 'ltr') ? 'left' : 'right', + 'S_CONTENT_FLOW_END' => ($user->lang('DIRECTION') == 'ltr') ? 'right' : 'left', 'CONTAINER_EXCEPTION' => $phpbb_container->hasParameter('container_exception') ? $phpbb_container->getParameter('container_exception') : false, )); diff --git a/phpBB/phpbb/feed/controller/feed.php b/phpBB/phpbb/feed/controller/feed.php index 3b469b240b..a7eb61ba6e 100644 --- a/phpBB/phpbb/feed/controller/feed.php +++ b/phpBB/phpbb/feed/controller/feed.php @@ -23,7 +23,6 @@ use phpbb\feed\exception\feed_unavailable_exception; use phpbb\feed\exception\unauthorized_exception; use phpbb\feed\helper as feed_helper; use phpbb\controller\helper as controller_helper; -use phpbb\language\language_file_helper; use phpbb\symfony_request; use phpbb\user; use phpbb\language\language; @@ -94,11 +93,6 @@ class feed */ protected $language; - /** - * @var language_file_helper - */ - protected $lang_helper; - /** * Constructor * @@ -114,9 +108,8 @@ class feed * @param dispatcher_interface $phpbb_dispatcher * @param language $language * @param string $php_ext - * @param language_file_helper $lang_helper */ - public function __construct(Environment $twig, symfony_request $request, controller_helper $controller_helper, config $config, driver_interface $db, ContainerInterface $container, feed_helper $feed_helper, user $user, auth $auth, dispatcher_interface $phpbb_dispatcher, language $language, $php_ext, language_file_helper $lang_helper) + public function __construct(Environment $twig, symfony_request $request, controller_helper $controller_helper, config $config, driver_interface $db, ContainerInterface $container, feed_helper $feed_helper, user $user, auth $auth, dispatcher_interface $phpbb_dispatcher, language $language, $php_ext) { $this->request = $request; $this->controller_helper = $controller_helper; @@ -130,7 +123,6 @@ class feed $this->template = $twig; $this->language = $language; $this->phpbb_dispatcher = $phpbb_dispatcher; - $this->lang_helper = $lang_helper; } /** @@ -395,7 +387,7 @@ class feed 'FEED_TITLE' => $this->config['sitename'], 'FEED_SUBTITLE' => $this->config['site_desc'], 'FEED_UPDATED' => $this->feed_helper->format_date($feed_updated_time), - 'FEED_LANG' => $this->lang_helper->get_lang_key_value('user_lang', $this->user->data['user_lang']), + 'FEED_LANG' => $this->language->lang('USER_LANG'), 'FEED_AUTHOR' => $this->config['sitename'], // Feed entries diff --git a/phpBB/phpbb/install/controller/helper.php b/phpBB/phpbb/install/controller/helper.php index 363d2aab89..1f936dda86 100644 --- a/phpBB/phpbb/install/controller/helper.php +++ b/phpBB/phpbb/install/controller/helper.php @@ -253,17 +253,12 @@ class helper */ protected function page_header($page_title, $selected_language = false) { - global $user; - // Path to templates $paths = array($this->phpbb_root_path . 'install/update/new/adm/', $this->phpbb_admin_path); $paths = array_filter($paths, 'is_dir'); $path = array_shift($paths); $path = substr($path, strlen($this->phpbb_root_path)); - // Grab the users lang direction and store it for later use - $direction = $this->lang_helper->get_lang_key_value('direction', $user->data['user_lang']); - $this->template->assign_vars(array( 'L_CHANGE' => $this->language->lang('CHANGE'), 'L_COLON' => $this->language->lang('COLON'), @@ -276,13 +271,13 @@ class helper 'T_TEMPLATE_PATH' => $this->path_helper->get_web_root_path() . $path . 'style', 'T_ASSETS_PATH' => $this->path_helper->get_web_root_path() . $path . '../assets', - 'S_CONTENT_DIRECTION' => $direction, - 'S_CONTENT_FLOW_BEGIN' => ($direction === 'ltr') ? 'left' : 'right', - 'S_CONTENT_FLOW_END' => ($direction === 'ltr') ? 'right' : 'left', + 'S_CONTENT_DIRECTION' => $this->language->lang('DIRECTION'), + 'S_CONTENT_FLOW_BEGIN' => ($this->language->lang('DIRECTION') === 'ltr') ? 'left' : 'right', + 'S_CONTENT_FLOW_END' => ($this->language->lang('DIRECTION') === 'ltr') ? 'right' : 'left', 'S_CONTENT_ENCODING' => 'UTF-8', 'S_LANG_SELECT' => $selected_language, - 'S_USER_LANG' => $this->lang_helper->get_lang_key_value('user_lang', $user->data['user_lang']), + 'S_USER_LANG' => $this->language->lang('USER_LANG'), )); $this->render_navigation(); diff --git a/phpBB/phpbb/language/language.php b/phpBB/phpbb/language/language.php index 5f1672fafb..ae795d8b4a 100644 --- a/phpBB/phpbb/language/language.php +++ b/phpBB/phpbb/language/language.php @@ -71,29 +71,15 @@ class language */ protected $loader; - /** - * @var language_file_helper - */ - protected $lang_helper; - - /** - * @var config - */ - protected $config; - /** * Constructor * * @param \phpbb\language\language_file_loader $loader Language file loader - * @param language_file_helper $lang_helper * @param array|null $common_modules Array of common language modules to load (optional) - * @param config $config The config */ - public function __construct(language_file_loader $loader, language_file_helper $lang_helper, config $config, $common_modules = null) + public function __construct(language_file_loader $loader, $common_modules = null) { $this->loader = $loader; - $this->lang_helper = $lang_helper; - $this->config = $config; // Set up default information $this->user_language = null; @@ -399,10 +385,27 @@ class language $this->load_core_file($lang_file); } + $this->inject_default_variables(); + $this->common_language_files_loaded = true; } } + /** + * Inject default values based on composer.json + * + * @return void + */ + protected function inject_default_variables(): void + { + $lang_values = $this->loader->get_composer_lang_values($this->language_fallback); + + $this->lang['DIRECTION'] = $lang_values['direction'] ?? 'ltr'; + $this->lang['USER_LANG'] = $lang_values['user_lang'] ?? 'en-gb'; + $this->lang['PLURAL_RULE'] = $lang_values['plural_rule'] ?? 1; + $this->lang['RECAPTCHA_LANG'] = $lang_values['recaptcha_lang'] ?? 'en-GB'; + } + /** * Determine which plural form we should use. * @@ -418,13 +421,8 @@ class language */ public function get_plural_form($number, $force_rule = false) { - global $user; - - // Grab the users lang plural rule - $plural_rule_content = $this->lang_helper->get_lang_key_value('plural_rule', $user->data['user_lang']); - $number = (int) $number; - $plural_rule = ($force_rule !== false) ? $force_rule : ((isset($plural_rule_content)) ? $plural_rule_content : 1); + $plural_rule = ($force_rule !== false) ? $force_rule : ((isset($this->lang['PLURAL_RULE'])) ? $this->lang['PLURAL_RULE'] : 1); /** * The following plural rules are based on a list published by the Mozilla Developer Network diff --git a/phpBB/phpbb/language/language_file_helper.php b/phpBB/phpbb/language/language_file_helper.php index 9fdaa914a2..cca8f8c54a 100644 --- a/phpBB/phpbb/language/language_file_helper.php +++ b/phpBB/phpbb/language/language_file_helper.php @@ -28,22 +28,15 @@ class language_file_helper */ protected $phpbb_root_path; - /** - * @var config - */ - protected $config; - /** * Constructor * * @param string $phpbb_root_path Path to phpBB's root - * @param config $config The config * */ - public function __construct(string $phpbb_root_path, config $config) + public function __construct(string $phpbb_root_path) { $this->phpbb_root_path = $phpbb_root_path; - $this->config = $config; } /** @@ -76,26 +69,6 @@ class language_file_helper return $available_languages; } - /** - * Return by given lang key its composer.json value - * - * @return string - * - */ - public function get_lang_key_value($lang_key, $user_lang_db) : string - { - $available_languages = $this->get_available_languages(); - - foreach ($available_languages as $key => $value) - { - $available_languages[$value['iso']] = $value; - unset($available_languages[$key]); - } - $board_default_lang = $this->config['default_lang']; - $user_lang_db = $user_lang_db ?? $board_default_lang; - return $available_languages[$user_lang_db][$lang_key]; - } - /** * Collect some data from the composer.json file * diff --git a/phpBB/phpbb/language/language_file_loader.php b/phpBB/phpbb/language/language_file_loader.php index 16dc2ab528..8c8abef7a5 100644 --- a/phpBB/phpbb/language/language_file_loader.php +++ b/phpBB/phpbb/language/language_file_loader.php @@ -186,6 +186,39 @@ class language_file_loader throw new language_file_not_found('Language file ' . $language_file_path . ' couldn\'t be opened.'); } + /** + * Get language values from composer.json files + * + * @param array|string $locales + * @return array + */ + public function get_composer_lang_values(array|string $locales): array + { + if (!is_array($locales)) + { + $locales = [$locales]; + } + + $file_helper = new language_file_helper($this->phpbb_root_path); + $composer_lang_vars = $file_helper->get_available_languages(); + + foreach ($composer_lang_vars as $key => $value) + { + $composer_lang_vars[$value['iso']] = $value; + unset($composer_lang_vars[$key]); + } + + foreach ($locales as $locale) + { + if (isset($composer_lang_vars[$locale])) + { + return $composer_lang_vars[$locale]; + } + } + + return count($composer_lang_vars) ? array_shift($composer_lang_vars) : []; + } + /** * Loads language file * diff --git a/tests/attachment/upload_test.php b/tests/attachment/upload_test.php index ddae3e84e0..2c5369e37e 100644 --- a/tests/attachment/upload_test.php +++ b/tests/attachment/upload_test.php @@ -98,7 +98,7 @@ class phpbb_attachment_upload_test extends \phpbb_database_test_case $this->request = $this->createMock('\phpbb\request\request'); $this->filesystem = new \phpbb\filesystem\filesystem(); - $this->language = new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx), new language_file_helper($phpbb_root_path, $config), $config); + $this->language = new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx)); $this->php_ini = new \bantu\IniGetWrapper\IniGetWrapper; $guessers = array( new \Symfony\Component\Mime\FileinfoMimeTypeGuesser(), From 4ed18355e9100ebcee0b9b45f2c9f8a3b47e46cd Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Wed, 4 Oct 2023 21:50:30 +0200 Subject: [PATCH 15/16] [ticket/17191] Remove invalid/unused code from tests PHPBB3-17191 --- tests/attachment/upload_test.php | 3 --- tests/auth/provider_apache_test.php | 3 +-- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/tests/attachment/upload_test.php b/tests/attachment/upload_test.php index 2c5369e37e..609ee99536 100644 --- a/tests/attachment/upload_test.php +++ b/tests/attachment/upload_test.php @@ -11,9 +11,6 @@ * */ -use phpbb\config\config; -use phpbb\language\language_file_helper; - require_once(__DIR__ . '/../../phpBB/includes/functions_posting.php'); class phpbb_attachment_upload_test extends \phpbb_database_test_case diff --git a/tests/auth/provider_apache_test.php b/tests/auth/provider_apache_test.php index f3fab80b80..e5bfdbf858 100644 --- a/tests/auth/provider_apache_test.php +++ b/tests/auth/provider_apache_test.php @@ -31,8 +31,7 @@ class phpbb_auth_provider_apache_test extends phpbb_database_test_case $db = $this->new_dbal(); $config = new \phpbb\config\config(array()); $lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx); - $lang_helper = new \phpbb\language\language_file_helper($phpbb_root_path, $config); - $lang = new \phpbb\language\language($lang_loader, $lang_helper, $config); + $lang = new \phpbb\language\language($lang_loader); $this->request = $this->createMock('\phpbb\request\request'); $this->user = new \phpbb\user($lang, '\phpbb\datetime');; From 3cc2e41af8960e6dd724aa0cd1265ca07ba89059 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Wed, 4 Oct 2023 22:07:21 +0200 Subject: [PATCH 16/16] [ticket/17191] Removed unused use statements PHPBB3-17191 --- phpBB/phpbb/language/language.php | 1 - phpBB/phpbb/language/language_file_helper.php | 1 - 2 files changed, 2 deletions(-) diff --git a/phpBB/phpbb/language/language.php b/phpBB/phpbb/language/language.php index ae795d8b4a..dee8b58486 100644 --- a/phpBB/phpbb/language/language.php +++ b/phpBB/phpbb/language/language.php @@ -13,7 +13,6 @@ namespace phpbb\language; -use phpbb\config\config; use phpbb\language\exception\invalid_plural_rule_exception; /** diff --git a/phpBB/phpbb/language/language_file_helper.php b/phpBB/phpbb/language/language_file_helper.php index cca8f8c54a..995c7b4712 100644 --- a/phpBB/phpbb/language/language_file_helper.php +++ b/phpBB/phpbb/language/language_file_helper.php @@ -16,7 +16,6 @@ namespace phpbb\language; use DomainException; use phpbb\json\sanitizer as json_sanitizer; use Symfony\Component\Finder\Finder; -use phpbb\config\config; /** * Helper class for language file related functions