diff --git a/src/Extension/MokoWaaS.php b/src/Extension/MokoWaaS.php index 41cd86e8..6227f452 100644 --- a/src/Extension/MokoWaaS.php +++ b/src/Extension/MokoWaaS.php @@ -76,10 +76,28 @@ class MokoWaaS extends CMSPlugin } /** - * Load language override files from the plugin directory. + * Build the placeholder → value map from plugin params. * - * This method loads the override files that replace core Joomla language strings - * with MokoWaaS branding. + * @return array Associative array of placeholder => replacement value + * + * @since 02.00.00 + */ + protected function getPlaceholders() + { + return [ + '{{BRAND_NAME}}' => $this->params->get('brand_name', 'MokoWaaS'), + '{{COMPANY_NAME}}' => $this->params->get('company_name', 'Moko Consulting'), + '{{SUPPORT_URL}}' => $this->params->get('support_url', 'https://mokoconsulting.tech'), + ]; + } + + /** + * Load language override templates and inject resolved strings into Joomla. + * + * Reads the override template shipped with the plugin, replaces + * {{BRAND_NAME}}, {{COMPANY_NAME}} and {{SUPPORT_URL}} with the + * values from plugin params, then injects the resolved strings into + * the active Language object. * * @return void * @@ -87,83 +105,69 @@ class MokoWaaS extends CMSPlugin */ protected function loadLanguageOverrides() { - $language = $this->app->getLanguage(); - $tag = $language->getTag(); - - // Get the plugin path - $pluginPath = JPATH_PLUGINS . '/system/mokowaas'; - - // Determine if we're in administrator or site - $isAdmin = $this->app->isClient('administrator'); - - // Load the appropriate override file - if ($isAdmin) + $language = $this->app->getLanguage(); + $tag = $language->getTag(); + $pluginPath = JPATH_PLUGINS . '/system/mokowaas'; + $isAdmin = $this->app->isClient('administrator'); + + $overridePath = $isAdmin + ? $pluginPath . '/administrator/language/overrides/' . $tag . '.override.ini' + : $pluginPath . '/language/overrides/' . $tag . '.override.ini'; + + if (!file_exists($overridePath)) { - $overridePath = $pluginPath . '/administrator/language/overrides/' . $tag . '.override.ini'; + return; } - else + + $strings = $this->parseLanguageFile($overridePath); + $placeholders = $this->getPlaceholders(); + + foreach ($strings as $key => $value) { - $overridePath = $pluginPath . '/language/overrides/' . $tag . '.override.ini'; - } - - // Load the override file if it exists - if (file_exists($overridePath)) - { - $language->load('', $pluginPath, $tag, true, false); - - // Parse and load the override file manually - $strings = $this->parseLanguageFile($overridePath); - - if (!empty($strings)) - { - foreach ($strings as $key => $value) - { - $language->_strings[$key] = $value; - } - } + $language->_strings[$key] = str_replace( + array_keys($placeholders), + array_values($placeholders), + $value + ); } } /** - * Parse a language INI file and return the strings. + * Parse a language INI file and return the raw strings (with placeholders). * * @param string $filePath The path to the language file * - * @return array Array of language strings + * @return array Array of language strings (key => raw value) * * @since 02.00.00 */ protected function parseLanguageFile($filePath) { $strings = []; - + if (!file_exists($filePath)) { return $strings; } - + $content = file_get_contents($filePath); - $lines = explode("\n", $content); - + $lines = explode("\n", $content); + foreach ($lines as $line) { $line = trim($line); - - // Skip empty lines and comments - if (empty($line) || $line[0] === ';') + + if ($line === '' || $line[0] === ';') { continue; } - - // Parse KEY="VALUE" format + if (preg_match('/^([A-Z0-9_]+)="(.+)"$/i', $line, $matches)) { - $key = strtoupper($matches[1]); - $value = $matches[2]; - $strings[$key] = $value; + $strings[strtoupper($matches[1])] = $matches[2]; } } - + return $strings; } diff --git a/src/administrator/language/overrides/en-GB.override.ini b/src/administrator/language/overrides/en-GB.override.ini index 3381ab29..ef3362eb 100644 --- a/src/administrator/language/overrides/en-GB.override.ini +++ b/src/administrator/language/overrides/en-GB.override.ini @@ -7,55 +7,91 @@ ; FILE INFORMATION ; Defgroup: Joomla Language Overrides ; Ingroup: MokoWaaS -; Version: 01.04.00 +; Version: 02.00.00 ; File: en-GB.override.ini ; Path: administrator/language/overrides/en-GB.override.ini -; Brief: Admin English overrides replacing all visible occurrences of "Joomla!" with "MokoWaaS". -; Notes: Extend by adding more keys discovered via the Language Overrides tool. -; Variables: (none) +; Brief: Admin override TEMPLATE — placeholders resolved at runtime/install. +; Notes: Use {{BRAND_NAME}}, {{COMPANY_NAME}}, {{SUPPORT_URL}} placeholders. +; Variables: {{BRAND_NAME}}, {{COMPANY_NAME}}, {{SUPPORT_URL}} ; ----------------------------------------------------------------------------- ; ===== Footer & template branding ===== -TPL_ATUM_POWERED_BY="Powered by MokoWaaS" -MOD_FOOTER_LINE2="Powered by MokoWaaS" +TPL_ATUM_POWERED_BY="Powered by {{BRAND_NAME}}" +MOD_FOOTER_LINE2="Powered by {{BRAND_NAME}}" ; ===== Control panel greetings ===== -COM_CPANEL_WELCOME_TITLE="Welcome to MokoWaaS!" -COM_CPANEL_MSG_WELCOME="Welcome to MokoWaaS!" +COM_CPANEL_WELCOME_TITLE="Welcome to {{BRAND_NAME}}!" +COM_CPANEL_MSG_WELCOME="Welcome to {{BRAND_NAME}}!" ; ===== Help/Docs phrasing ===== -COM_ADMIN_HELP_SITE="MokoWaaS Help" -COM_ADMIN_HELPSITE_FIELD_LABEL="MokoWaaS Help" +COM_ADMIN_HELP_SITE="{{BRAND_NAME}} Help" +COM_ADMIN_HELPSITE_FIELD_LABEL="{{BRAND_NAME}} Help" ; ===== Generic replacements ===== -JGLOBAL_FIELDSET_JOOMLA_DEFAULTS="MokoWaaS Defaults" -COM_INSTALLER_TYPE_JOOMLA="MokoWaaS Package" -LIB_JOOMLA="MokoWaaS Library" +JGLOBAL_FIELDSET_JOOMLA_DEFAULTS="{{BRAND_NAME}} Defaults" +COM_INSTALLER_TYPE_JOOMLA="{{BRAND_NAME}} Package" +LIB_JOOMLA="{{BRAND_NAME}} Library" ; ===== System messages ===== -JERROR_JOOMLA="MokoWaaS Error" -JFIELD_JOOMLA_LABEL="MokoWaaS Field" +JERROR_JOOMLA="{{BRAND_NAME}} Error" +JFIELD_JOOMLA_LABEL="{{BRAND_NAME}} Field" ; ===== AdminLogin Support ===== -MOD_LOGINSUPPORT_FORUM="Moko Consulting Support" -MOD_LOGINSUPPORT_DOCUMENTATION="MokoWaaS Documentation" -MOD_LOGINSUPPORT_NEWS="Moko Consulting News" -TPL_ATUM_BACKEND_LOGIN="MokoWaaS Administrator Login" +MOD_LOGINSUPPORT_FORUM="{{COMPANY_NAME}} Support" +MOD_LOGINSUPPORT_DOCUMENTATION="{{BRAND_NAME}} Documentation" +MOD_LOGINSUPPORT_NEWS="{{COMPANY_NAME}} News" +TPL_ATUM_BACKEND_LOGIN="{{BRAND_NAME}} Administrator Login" ; ===== Error messages ===== JERROR_LAYOUT_ERROR_HAS_OCCURRED="ERROR OCCURRED" ; ===== Admin-specific branding ===== -COM_ADMIN_VIEW_HOME_TITLE="MokoWaaS Control Panel" -JLIB_APPLICATION_ERROR_SAVE_FAILED="MokoWaaS Error: Save failed" -COM_MODULES_HEADING_MODULE="MokoWaaS Module" -COM_PLUGINS_HEADING_NAME="MokoWaaS Plugin" +COM_ADMIN_VIEW_HOME_TITLE="{{BRAND_NAME}} Control Panel" +JLIB_APPLICATION_ERROR_SAVE_FAILED="{{BRAND_NAME}} Error: Save failed" +COM_MODULES_HEADING_MODULE="{{BRAND_NAME}} Module" +COM_PLUGINS_HEADING_NAME="{{BRAND_NAME}} Plugin" ; ===== Extensions ===== -COM_INSTALLER_TYPE_TYPE_JOOMLA="MokoWaaS" +COM_INSTALLER_TYPE_TYPE_JOOMLA="{{BRAND_NAME}}" COM_INSTALLER_MSG_UPDATE_SUCCESS="Update installed successfully" +; ===== Dashboard ===== +COM_CPANEL_WELCOME_BEGINNERS_TITLE="Welcome to {{BRAND_NAME}}!" +COM_CPANEL_WELCOME_BEGINNERS_MESSAGE="

Community resources are available for new users.

" +COM_CPANEL_MSG_STATS_COLLECTION_TITLE="Stats Collection in {{BRAND_NAME}}" + +; ===== Quick Icons ===== +PLG_QUICKICON_JOOMLAUPDATE_CHECKING="Checking {{BRAND_NAME}}…" +PLG_QUICKICON_JOOMLAUPDATE_ERROR="Unknown {{BRAND_NAME}}…" +PLG_QUICKICON_JOOMLAUPDATE_UPTODATE="{{BRAND_NAME}} is up to date." + +; ===== System Info ===== +COM_ADMIN_JOOMLA_VERSION="{{BRAND_NAME}} Version" +COM_ADMIN_HELP="{{BRAND_NAME}} Help" +COM_ADMIN_JOOMLA_COMPAT_PLUGIN="{{BRAND_NAME}} Backward Compatibility Plugin" + +; ===== Installer ===== +COM_INSTALLER_UPLOAD_INSTALL_JOOMLA_EXTENSION="Upload & Install {{BRAND_NAME}} Extension" +COM_INSTALLER_UNABLE_TO_INSTALL_JOOMLA_PACKAGE="The {{BRAND_NAME}} package cannot be installed through the Extension Manager. Please use the {{BRAND_NAME}} Update component to update." +COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTSET="The {{BRAND_NAME}} temporary folder is not set." +COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTWRITEABLE="The {{BRAND_NAME}} temporary folder is not writable or does not exist." +COM_INSTALLER_MSG_WARNINGS_UPDATE_NOTICE="Before updating ensure that the update is compatible with your {{BRAND_NAME}} installation.
You are strongly advised to make a backup of your site's files and database before you start updating." + +; ===== Global Configuration ===== +COM_CONFIG_FIELD_METAVERSION_LABEL="{{BRAND_NAME}} Version" + +; ===== Update component ===== +COM_JOOMLAUPDATE_CONFIGURATION="{{BRAND_NAME}} Update: Options" +COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_NEXT="{{BRAND_NAME}} Next" + +; ===== Privacy ===== +COM_PRIVACY_HEADING_CORE_CAPABILITIES="{{BRAND_NAME}} Core Capabilities" + +; ===== Database & Library errors ===== +JLIB_INSTALLER_MINIMUM_JOOMLA="You don't have the minimum {{BRAND_NAME}} version requirement of J%s" +JLIB_INSTALLER_ERROR_NOTFINDJOOMLAXMLSETUPFILE="Installer: Can't find {{BRAND_NAME}} XML setup file." + ; ===== Version and About ===== -JLIB_HTML_POWERED_BY="Powered by MokoWaaS" -COM_ADMIN_HELP_DOCUMENTATION="MokoWaaS Documentation" -COM_ADMIN_HELP_SUPPORT="MokoWaaS Support" +JLIB_HTML_POWERED_BY="Powered by {{BRAND_NAME}}" +COM_ADMIN_HELP_DOCUMENTATION="{{BRAND_NAME}} Documentation" +COM_ADMIN_HELP_SUPPORT="{{BRAND_NAME}} Support" diff --git a/src/administrator/language/overrides/en-US.override.ini b/src/administrator/language/overrides/en-US.override.ini index 5c2aded6..e551d7b6 100644 --- a/src/administrator/language/overrides/en-US.override.ini +++ b/src/administrator/language/overrides/en-US.override.ini @@ -7,55 +7,91 @@ ; FILE INFORMATION ; Defgroup: Joomla Language Overrides ; Ingroup: MokoWaaS -; Version: 01.04.00 +; Version: 02.00.00 ; File: en-US.override.ini ; Path: administrator/language/overrides/en-US.override.ini -; Brief: Admin English overrides replacing all visible occurrences of "Joomla!" with "MokoWaaS". -; Notes: Extend by adding more keys discovered via the Language Overrides tool. -; Variables: (none) +; Brief: Admin override TEMPLATE — placeholders resolved at runtime/install. +; Notes: Use {{BRAND_NAME}}, {{COMPANY_NAME}}, {{SUPPORT_URL}} placeholders. +; Variables: {{BRAND_NAME}}, {{COMPANY_NAME}}, {{SUPPORT_URL}} ; ----------------------------------------------------------------------------- ; ===== Footer & template branding ===== -TPL_ATUM_POWERED_BY="Powered by MokoWaaS" -MOD_FOOTER_LINE2="Powered by MokoWaaS" +TPL_ATUM_POWERED_BY="Powered by {{BRAND_NAME}}" +MOD_FOOTER_LINE2="Powered by {{BRAND_NAME}}" ; ===== Control panel greetings ===== -COM_CPANEL_WELCOME_TITLE="Welcome to MokoWaaS!" -COM_CPANEL_MSG_WELCOME="Welcome to MokoWaaS!" +COM_CPANEL_WELCOME_TITLE="Welcome to {{BRAND_NAME}}!" +COM_CPANEL_MSG_WELCOME="Welcome to {{BRAND_NAME}}!" ; ===== Help/Docs phrasing ===== -COM_ADMIN_HELP_SITE="MokoWaaS Help" -COM_ADMIN_HELPSITE_FIELD_LABEL="MokoWaaS Help" +COM_ADMIN_HELP_SITE="{{BRAND_NAME}} Help" +COM_ADMIN_HELPSITE_FIELD_LABEL="{{BRAND_NAME}} Help" ; ===== Generic replacements ===== -JGLOBAL_FIELDSET_JOOMLA_DEFAULTS="MokoWaaS Defaults" -COM_INSTALLER_TYPE_JOOMLA="MokoWaaS Package" -LIB_JOOMLA="MokoWaaS Library" +JGLOBAL_FIELDSET_JOOMLA_DEFAULTS="{{BRAND_NAME}} Defaults" +COM_INSTALLER_TYPE_JOOMLA="{{BRAND_NAME}} Package" +LIB_JOOMLA="{{BRAND_NAME}} Library" ; ===== System messages ===== -JERROR_JOOMLA="MokoWaaS Error" -JFIELD_JOOMLA_LABEL="MokoWaaS Field" +JERROR_JOOMLA="{{BRAND_NAME}} Error" +JFIELD_JOOMLA_LABEL="{{BRAND_NAME}} Field" ; ===== AdminLogin Support ===== -MOD_LOGINSUPPORT_FORUM="Moko Consulting Support" -MOD_LOGINSUPPORT_DOCUMENTATION="MokoWaaS Documentation" -MOD_LOGINSUPPORT_NEWS="Moko Consulting News" -TPL_ATUM_BACKEND_LOGIN="MokoWaaS Administrator Login" +MOD_LOGINSUPPORT_FORUM="{{COMPANY_NAME}} Support" +MOD_LOGINSUPPORT_DOCUMENTATION="{{BRAND_NAME}} Documentation" +MOD_LOGINSUPPORT_NEWS="{{COMPANY_NAME}} News" +TPL_ATUM_BACKEND_LOGIN="{{BRAND_NAME}} Administrator Login" ; ===== Error messages ===== JERROR_LAYOUT_ERROR_HAS_OCCURRED="ERROR OCCURRED" ; ===== Admin-specific branding ===== -COM_ADMIN_VIEW_HOME_TITLE="MokoWaaS Control Panel" -JLIB_APPLICATION_ERROR_SAVE_FAILED="MokoWaaS Error: Save failed" -COM_MODULES_HEADING_MODULE="MokoWaaS Module" -COM_PLUGINS_HEADING_NAME="MokoWaaS Plugin" +COM_ADMIN_VIEW_HOME_TITLE="{{BRAND_NAME}} Control Panel" +JLIB_APPLICATION_ERROR_SAVE_FAILED="{{BRAND_NAME}} Error: Save failed" +COM_MODULES_HEADING_MODULE="{{BRAND_NAME}} Module" +COM_PLUGINS_HEADING_NAME="{{BRAND_NAME}} Plugin" ; ===== Extensions ===== -COM_INSTALLER_TYPE_TYPE_JOOMLA="MokoWaaS" +COM_INSTALLER_TYPE_TYPE_JOOMLA="{{BRAND_NAME}}" COM_INSTALLER_MSG_UPDATE_SUCCESS="Update installed successfully" +; ===== Dashboard ===== +COM_CPANEL_WELCOME_BEGINNERS_TITLE="Welcome to {{BRAND_NAME}}!" +COM_CPANEL_WELCOME_BEGINNERS_MESSAGE="

Community resources are available for new users.

" +COM_CPANEL_MSG_STATS_COLLECTION_TITLE="Stats Collection in {{BRAND_NAME}}" + +; ===== Quick Icons ===== +PLG_QUICKICON_JOOMLAUPDATE_CHECKING="Checking {{BRAND_NAME}}…" +PLG_QUICKICON_JOOMLAUPDATE_ERROR="Unknown {{BRAND_NAME}}…" +PLG_QUICKICON_JOOMLAUPDATE_UPTODATE="{{BRAND_NAME}} is up to date." + +; ===== System Info ===== +COM_ADMIN_JOOMLA_VERSION="{{BRAND_NAME}} Version" +COM_ADMIN_HELP="{{BRAND_NAME}} Help" +COM_ADMIN_JOOMLA_COMPAT_PLUGIN="{{BRAND_NAME}} Backward Compatibility Plugin" + +; ===== Installer ===== +COM_INSTALLER_UPLOAD_INSTALL_JOOMLA_EXTENSION="Upload & Install {{BRAND_NAME}} Extension" +COM_INSTALLER_UNABLE_TO_INSTALL_JOOMLA_PACKAGE="The {{BRAND_NAME}} package cannot be installed through the Extension Manager. Please use the {{BRAND_NAME}} Update component to update." +COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTSET="The {{BRAND_NAME}} temporary folder is not set." +COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTWRITEABLE="The {{BRAND_NAME}} temporary folder is not writable or does not exist." +COM_INSTALLER_MSG_WARNINGS_UPDATE_NOTICE="Before updating ensure that the update is compatible with your {{BRAND_NAME}} installation.
You are strongly advised to make a backup of your site's files and database before you start updating." + +; ===== Global Configuration ===== +COM_CONFIG_FIELD_METAVERSION_LABEL="{{BRAND_NAME}} Version" + +; ===== Update component ===== +COM_JOOMLAUPDATE_CONFIGURATION="{{BRAND_NAME}} Update: Options" +COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_NEXT="{{BRAND_NAME}} Next" + +; ===== Privacy ===== +COM_PRIVACY_HEADING_CORE_CAPABILITIES="{{BRAND_NAME}} Core Capabilities" + +; ===== Database & Library errors ===== +JLIB_INSTALLER_MINIMUM_JOOMLA="You don't have the minimum {{BRAND_NAME}} version requirement of J%s" +JLIB_INSTALLER_ERROR_NOTFINDJOOMLAXMLSETUPFILE="Installer: Can't find {{BRAND_NAME}} XML setup file." + ; ===== Version and About ===== -JLIB_HTML_POWERED_BY="Powered by MokoWaaS" -COM_ADMIN_HELP_DOCUMENTATION="MokoWaaS Documentation" -COM_ADMIN_HELP_SUPPORT="MokoWaaS Support" +JLIB_HTML_POWERED_BY="Powered by {{BRAND_NAME}}" +COM_ADMIN_HELP_DOCUMENTATION="{{BRAND_NAME}} Documentation" +COM_ADMIN_HELP_SUPPORT="{{BRAND_NAME}} Support" diff --git a/src/language/en-GB/plg_system_mokowaas.ini b/src/language/en-GB/plg_system_mokowaas.ini index ca847ffa..7c74da78 100644 --- a/src/language/en-GB/plg_system_mokowaas.ini +++ b/src/language/en-GB/plg_system_mokowaas.ini @@ -8,6 +8,7 @@ ; Defgroup: Joomla Language ; Ingroup: MokoWaaS ; Version: 02.00.00 +; Variables: {{BRAND_NAME}}, {{COMPANY_NAME}}, {{SUPPORT_URL}} used in override templates ; File: plg_system_mokowaas.ini ; Path: /src/language/en-GB/plg_system_mokowaas.ini ; Brief: English language strings for MokoWaaS system plugin @@ -19,4 +20,11 @@ PLG_SYSTEM_MOKOWAAS="System - MokoWaaS" PLG_SYSTEM_MOKOWAAS_XML_DESCRIPTION="This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform." PLG_SYSTEM_MOKOWAAS_ENABLE_BRANDING_LABEL="Enable Branding" -PLG_SYSTEM_MOKOWAAS_ENABLE_BRANDING_DESC="Enable or disable the MokoWaaS branding across the system." +PLG_SYSTEM_MOKOWAAS_ENABLE_BRANDING_DESC="Enable or disable the branding overrides across the system." + +PLG_SYSTEM_MOKOWAAS_BRAND_NAME_LABEL="Brand Name" +PLG_SYSTEM_MOKOWAAS_BRAND_NAME_DESC="The brand name that replaces 'Joomla' throughout the interface. Used in all language overrides." +PLG_SYSTEM_MOKOWAAS_COMPANY_NAME_LABEL="Company Name" +PLG_SYSTEM_MOKOWAAS_COMPANY_NAME_DESC="Your company name, used in support links and footer text." +PLG_SYSTEM_MOKOWAAS_SUPPORT_URL_LABEL="Support URL" +PLG_SYSTEM_MOKOWAAS_SUPPORT_URL_DESC="URL for support and documentation links." diff --git a/src/language/en-US/plg_system_mokowaas.ini b/src/language/en-US/plg_system_mokowaas.ini index df41ec1b..cf0948c3 100644 --- a/src/language/en-US/plg_system_mokowaas.ini +++ b/src/language/en-US/plg_system_mokowaas.ini @@ -19,4 +19,11 @@ PLG_SYSTEM_MOKOWAAS="System - MokoWaaS" PLG_SYSTEM_MOKOWAAS_XML_DESCRIPTION="This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform." PLG_SYSTEM_MOKOWAAS_ENABLE_BRANDING_LABEL="Enable Branding" -PLG_SYSTEM_MOKOWAAS_ENABLE_BRANDING_DESC="Enable or disable the MokoWaaS branding across the system." +PLG_SYSTEM_MOKOWAAS_ENABLE_BRANDING_DESC="Enable or disable the branding overrides across the system." + +PLG_SYSTEM_MOKOWAAS_BRAND_NAME_LABEL="Brand Name" +PLG_SYSTEM_MOKOWAAS_BRAND_NAME_DESC="The brand name that replaces 'Joomla' throughout the interface. Used in all language overrides." +PLG_SYSTEM_MOKOWAAS_COMPANY_NAME_LABEL="Company Name" +PLG_SYSTEM_MOKOWAAS_COMPANY_NAME_DESC="Your company name, used in support links and footer text." +PLG_SYSTEM_MOKOWAAS_SUPPORT_URL_LABEL="Support URL" +PLG_SYSTEM_MOKOWAAS_SUPPORT_URL_DESC="URL for support and documentation links." diff --git a/src/language/overrides/en-GB.override.ini b/src/language/overrides/en-GB.override.ini index 510adbd8..18f26e33 100644 --- a/src/language/overrides/en-GB.override.ini +++ b/src/language/overrides/en-GB.override.ini @@ -7,51 +7,41 @@ ; FILE INFORMATION ; Defgroup: Joomla Language Overrides ; Ingroup: MokoWaaS -; Version: 01.04.00 +; Version: 02.00.00 ; File: en-GB.override.ini ; Path: language/overrides/en-GB.override.ini -; Brief: English overrides replacing all visible occurrences of "Joomla!" with "MokoWaaS". -; Notes: Extend by adding more keys discovered via the Language Overrides tool. -; Variables: (none) +; Brief: Site/frontend override TEMPLATE — placeholders resolved at runtime/install. +; Notes: Use {{BRAND_NAME}}, {{COMPANY_NAME}}, {{SUPPORT_URL}} placeholders. +; Variables: {{BRAND_NAME}}, {{COMPANY_NAME}}, {{SUPPORT_URL}} ; ----------------------------------------------------------------------------- ; ===== Footer & template branding ===== -TPL_CASSIOPEIA_POWERED_BY="Powered by MokoWaaS" -MOD_FOOTER_LINE2="Powered by MokoWaaS" - -; ===== Control panel greetings ===== -COM_CPANEL_WELCOME_TITLE="Welcome to MokoWaaS!" -COM_CPANEL_MSG_WELCOME="Welcome to MokoWaaS!" - -; ===== Help/Docs phrasing ===== -COM_ADMIN_HELP_SITE="MokoWaaS Help" -COM_ADMIN_HELPSITE_FIELD_LABEL="MokoWaaS Help" +TPL_CASSIOPEIA_POWERED_BY="Powered by {{BRAND_NAME}}" +MOD_FOOTER_LINE2="Powered by {{BRAND_NAME}}" ; ===== Generic replacements ===== -JGLOBAL_FIELDSET_JOOMLA_DEFAULTS="MokoWaaS Defaults" -COM_INSTALLER_TYPE_JOOMLA="MokoWaaS Package" -LIB_JOOMLA="MokoWaaS Library" +JGLOBAL_FIELDSET_JOOMLA_DEFAULTS="{{BRAND_NAME}} Defaults" +LIB_JOOMLA="{{BRAND_NAME}} Library" ; ===== System messages ===== -JERROR_JOOMLA="MokoWaaS Error" -JFIELD_JOOMLA_LABEL="MokoWaaS Field" - -; ===== AdminLogin Support ===== -MOD_LOGINSUPPORT_FORUM="Moko Consulting Support" -MOD_LOGINSUPPORT_DOCUMENTATION="MokoWaaS Documentation" -MOD_LOGINSUPPORT_NEWS="Moko Consulting News" -TPL_ATUM_BACKEND_LOGIN="MokoWaaS Administrator Login" +JERROR_JOOMLA="{{BRAND_NAME}} Error" +JFIELD_JOOMLA_LABEL="{{BRAND_NAME}} Field" ; ===== Error messages ===== JERROR_LAYOUT_ERROR_HAS_OCCURRED="ERROR OCCURRED" -; ===== Additional branding ===== -INSTL_SITE_NAME_LABEL="MokoWaaS Site Name" -INSTL_SAMPLE_BLOG_SET="MokoWaaS Sample Data - Blog" -INSTL_SAMPLE_BROCHURE_SET="MokoWaaS Sample Data - Brochure Site" -INSTL_SAMPLE_DATA_SET="MokoWaaS Sample Data - Default" -INSTL_SAMPLE_LEARN_SET="MokoWaaS Sample Data - Learn" -INSTL_SAMPLE_TESTING_SET="MokoWaaS Sample Data - Testing" +; ===== Installer / Sample data ===== +INSTL_SITE_NAME_LABEL="{{BRAND_NAME}} Site Name" +INSTL_SAMPLE_BLOG_SET="{{BRAND_NAME}} Sample Data - Blog" +INSTL_SAMPLE_BROCHURE_SET="{{BRAND_NAME}} Sample Data - Brochure Site" +INSTL_SAMPLE_DATA_SET="{{BRAND_NAME}} Sample Data - Default" +INSTL_SAMPLE_LEARN_SET="{{BRAND_NAME}} Sample Data - Learn" +INSTL_SAMPLE_TESTING_SET="{{BRAND_NAME}} Sample Data - Testing" + +; ===== Login support ===== +MOD_LOGINSUPPORT_FORUM="{{COMPANY_NAME}} Support" +MOD_LOGINSUPPORT_DOCUMENTATION="{{BRAND_NAME}} Documentation" +MOD_LOGINSUPPORT_NEWS="{{COMPANY_NAME}} News" ; ===== Version and About ===== -JLIB_HTML_POWERED_BY="Powered by MokoWaaS" +JLIB_HTML_POWERED_BY="Powered by {{BRAND_NAME}}" diff --git a/src/language/overrides/en-US.override.ini b/src/language/overrides/en-US.override.ini index 3ffc355d..b23e1ad2 100644 --- a/src/language/overrides/en-US.override.ini +++ b/src/language/overrides/en-US.override.ini @@ -7,51 +7,41 @@ ; FILE INFORMATION ; Defgroup: Joomla Language Overrides ; Ingroup: MokoWaaS -; Version: 01.04.00 +; Version: 02.00.00 ; File: en-US.override.ini ; Path: language/overrides/en-US.override.ini -; Brief: English overrides replacing all visible occurrences of "Joomla!" with "MokoWaaS". -; Notes: Extend by adding more keys discovered via the Language Overrides tool. -; Variables: (none) +; Brief: Site/frontend override TEMPLATE — placeholders resolved at runtime/install. +; Notes: Use {{BRAND_NAME}}, {{COMPANY_NAME}}, {{SUPPORT_URL}} placeholders. +; Variables: {{BRAND_NAME}}, {{COMPANY_NAME}}, {{SUPPORT_URL}} ; ----------------------------------------------------------------------------- ; ===== Footer & template branding ===== -TPL_CASSIOPEIA_POWERED_BY="Powered by MokoWaaS" -MOD_FOOTER_LINE2="Powered by MokoWaaS" - -; ===== Control panel greetings ===== -COM_CPANEL_WELCOME_TITLE="Welcome to MokoWaaS!" -COM_CPANEL_MSG_WELCOME="Welcome to MokoWaaS!" - -; ===== Help/Docs phrasing ===== -COM_ADMIN_HELP_SITE="MokoWaaS Help" -COM_ADMIN_HELPSITE_FIELD_LABEL="MokoWaaS Help" +TPL_CASSIOPEIA_POWERED_BY="Powered by {{BRAND_NAME}}" +MOD_FOOTER_LINE2="Powered by {{BRAND_NAME}}" ; ===== Generic replacements ===== -JGLOBAL_FIELDSET_JOOMLA_DEFAULTS="MokoWaaS Defaults" -COM_INSTALLER_TYPE_JOOMLA="MokoWaaS Package" -LIB_JOOMLA="MokoWaaS Library" +JGLOBAL_FIELDSET_JOOMLA_DEFAULTS="{{BRAND_NAME}} Defaults" +LIB_JOOMLA="{{BRAND_NAME}} Library" ; ===== System messages ===== -JERROR_JOOMLA="MokoWaaS Error" -JFIELD_JOOMLA_LABEL="MokoWaaS Field" - -; ===== AdminLogin Support ===== -MOD_LOGINSUPPORT_FORUM="Moko Consulting Support" -MOD_LOGINSUPPORT_DOCUMENTATION="MokoWaaS Documentation" -MOD_LOGINSUPPORT_NEWS="Moko Consulting News" -TPL_ATUM_BACKEND_LOGIN="MokoWaaS Administrator Login" +JERROR_JOOMLA="{{BRAND_NAME}} Error" +JFIELD_JOOMLA_LABEL="{{BRAND_NAME}} Field" ; ===== Error messages ===== JERROR_LAYOUT_ERROR_HAS_OCCURRED="ERROR OCCURRED" -; ===== Additional branding ===== -INSTL_SITE_NAME_LABEL="MokoWaaS Site Name" -INSTL_SAMPLE_BLOG_SET="MokoWaaS Sample Data - Blog" -INSTL_SAMPLE_BROCHURE_SET="MokoWaaS Sample Data - Brochure Site" -INSTL_SAMPLE_DATA_SET="MokoWaaS Sample Data - Default" -INSTL_SAMPLE_LEARN_SET="MokoWaaS Sample Data - Learn" -INSTL_SAMPLE_TESTING_SET="MokoWaaS Sample Data - Testing" +; ===== Installer / Sample data ===== +INSTL_SITE_NAME_LABEL="{{BRAND_NAME}} Site Name" +INSTL_SAMPLE_BLOG_SET="{{BRAND_NAME}} Sample Data - Blog" +INSTL_SAMPLE_BROCHURE_SET="{{BRAND_NAME}} Sample Data - Brochure Site" +INSTL_SAMPLE_DATA_SET="{{BRAND_NAME}} Sample Data - Default" +INSTL_SAMPLE_LEARN_SET="{{BRAND_NAME}} Sample Data - Learn" +INSTL_SAMPLE_TESTING_SET="{{BRAND_NAME}} Sample Data - Testing" + +; ===== Login support ===== +MOD_LOGINSUPPORT_FORUM="{{COMPANY_NAME}} Support" +MOD_LOGINSUPPORT_DOCUMENTATION="{{BRAND_NAME}} Documentation" +MOD_LOGINSUPPORT_NEWS="{{COMPANY_NAME}} News" ; ===== Version and About ===== -JLIB_HTML_POWERED_BY="Powered by MokoWaaS" +JLIB_HTML_POWERED_BY="Powered by {{BRAND_NAME}}" diff --git a/src/mokowaas.xml b/src/mokowaas.xml index 7c3e6765..80e1c09f 100644 --- a/src/mokowaas.xml +++ b/src/mokowaas.xml @@ -77,6 +77,27 @@ + + + diff --git a/src/script.php b/src/script.php index 4a97ffde..96a4a0fa 100644 --- a/src/script.php +++ b/src/script.php @@ -173,10 +173,78 @@ class plgSystemMokoWaaSInstallerScript implements InstallerScriptInterface /** Sentinel comment that marks the end of MokoWaaS overrides inside a Joomla override file. */ private const BLOCK_END = '; ===== END MokoWaaS Overrides ====='; + /** + * Build the placeholder → value map from the plugin's saved params. + * + * On first install the params row may not exist yet, so every value + * falls back to a sensible default. + * + * @return array Associative array of placeholder => replacement value + * + * @since 02.00.00 + */ + private function getPlaceholders() + { + $params = $this->getPluginParams(); + + return [ + '{{BRAND_NAME}}' => $params->get('brand_name', 'MokoWaaS'), + '{{COMPANY_NAME}}' => $params->get('company_name', 'Moko Consulting'), + '{{SUPPORT_URL}}' => $params->get('support_url', 'https://mokoconsulting.tech'), + ]; + } + + /** + * Load the plugin's saved params from the database. + * + * @return \Joomla\Registry\Registry + * + * @since 02.00.00 + */ + private function getPluginParams() + { + $db = Factory::getDbo(); + $query = $db->getQuery(true) + ->select($db->quoteName('params')) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote('mokowaas')) + ->where($db->quoteName('folder') . ' = ' . $db->quote('system')) + ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')); + + $db->setQuery($query); + $json = $db->loadResult(); + + return new \Joomla\Registry\Registry($json ?: '{}'); + } + + /** + * Resolve placeholders in an array of language strings. + * + * @param array $strings Key/value pairs (values may contain {{…}} tokens) + * + * @return array The same array with placeholders replaced + * + * @since 02.00.00 + */ + private function resolvePlaceholders(array $strings) + { + $placeholders = $this->getPlaceholders(); + $search = array_keys($placeholders); + $replace = array_values($placeholders); + + foreach ($strings as $key => $value) + { + $strings[$key] = str_replace($search, $replace, $value); + } + + return $strings; + } + /** * Install language override files to Joomla's global override directories. * - * Reads each source override shipped with the plugin, then merges the keys + * Reads each source override template shipped with the plugin, resolves + * {{BRAND_NAME}} etc. from plugin params, then merges the resolved keys * into the destination file inside a clearly delimited block. Existing * overrides outside the block are never touched. * @@ -212,7 +280,7 @@ class plgSystemMokoWaaSInstallerScript implements InstallerScriptInterface Folder::create($destDir); } - $pluginOverrides = $this->parseLanguageFile($source); + $pluginOverrides = $this->resolvePlaceholders($this->parseLanguageFile($source)); if (empty($pluginOverrides)) {