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))
{