/** * Defines and loads the locale. * * @param string $LocaleName The name of the locale to load. Locale definitions are kept in each * application's locale folder. For example: * /dashboard/locale/$LocaleName.php * /vanilla/locale/$LocaleName.php * @param array $ApplicationWhiteList An array of application folders that are safe to examine for locale * definitions. * @param array $PluginWhiteList An array of plugin folders that are safe to examine for locale * definitions. * @param bool $ForceRemapping For speed purposes, the application folders are crawled for locale * sources. Once sources are found, they are saved in the * cache/locale_mapppings.php file. If ForceRemapping is true, this file will * be ignored and the folders will be recrawled and the mapping file will be * re-generated. You can also simply delete the file and it will * automatically force a remapping. */ public function Set($LocaleName, $ApplicationWhiteList, $PluginWhiteList, $ForceRemapping = FALSE) { $SafeLocaleName = preg_replace('/([^\\w\\d_-])/', '', $LocaleName); // Removes everything from the string except letters, numbers, dashes, and underscores $LocaleSources = array(); if (!is_array($ApplicationWhiteList)) { $ApplicationWhiteList = array(); } if (!is_array($PluginWhiteList)) { $PluginWhiteList = array(); } Gdn_LibraryMap::PrepareCache('locale'); if ($ForceRemapping === TRUE || !Gdn_LibraryMap::CacheReady('locale')) { $LocaleSources = array(); // Get application-based locale definition files $ApplicationLocaleSources = Gdn_FileSystem::FindAll(PATH_APPLICATIONS, CombinePaths(array('locale', $LocaleName, 'definitions.php')), $ApplicationWhiteList); if ($ApplicationLocaleSources !== FALSE) { $LocaleSources = $ApplicationLocaleSources; } // Get plugin-based locale definition files $PluginLocaleSources = Gdn_FileSystem::FindAll(PATH_PLUGINS, CombinePaths(array('locale', $LocaleName, 'definitions.php')), $PluginWhiteList); if ($PluginLocaleSources !== FALSE) { $LocaleSources = array_merge($LocaleSources, $PluginLocaleSources); } // Get theme-based locale definition files. $Theme = C('Garden.Theme'); if ($Theme) { $ThemeLocalePath = PATH_THEMES . "/{$Theme}/locale/{$LocaleName}.php"; if (file_exists($ThemeLocalePath)) { $LocaleSources[] = $ThemeLocalePath; } } // Save the mappings $FileContents = array(); $Count = count($LocaleSources); for ($i = 0; $i < $Count; ++$i) { $FileContents[$SafeLocaleName][] = Gdn_Format::ArrayValueForPhp($LocaleSources[$i]); } // Add the config locale if it exists $ConfigLocale = PATH_CONF . DS . 'locale.php'; if (file_exists($ConfigLocale)) { $FileContents[$SafeLocaleName][] = $ConfigLocale; } Gdn_LibraryMap::Import('locale', $FileContents); } // Set up defaults $Definition = array(); $this->_Definition = array(); // Now set the locale name and import all of the sources. $this->_Locale = $LocaleName; $LocaleSources = Gdn_LibraryMap::GetCache('locale', $SafeLocaleName); if (is_null($SafeLocaleName)) { $LocaleSources = array(); } $ConfLocaleOverride = PATH_CONF . DS . 'locale.php'; $Count = count($LocaleSources); for ($i = 0; $i < $Count; ++$i) { if ($ConfLocaleOverride != $LocaleSources[$i] && file_exists($LocaleSources[$i])) { // Don't double include the conf override file... and make sure it comes last include_once $LocaleSources[$i]; } } // Also load any custom defined definitions from the conf directory if (file_exists($ConfLocaleOverride)) { include_once $ConfLocaleOverride; } // All of the included files should have contained // $Definition['Code'] = 'Definition'; assignments. The overwrote each // other in the order they were included. Now assign the $Definition array // to the local private _Definition property. $this->_Definition = $Definition; }
public function GetLocaleSources($LocaleName, $ApplicationWhiteList, $PluginWhiteList, $ForceRemapping = FALSE) { $SafeLocaleName = preg_replace('/([^\\w\\d_-])/', '', $LocaleName); // Removes everything from the string except letters, numbers, dashes, and underscores $LocaleSources = array(); if (!is_array($ApplicationWhiteList)) { $ApplicationWhiteList = array(); } if (!is_array($PluginWhiteList)) { $PluginWhiteList = array(); } Gdn_LibraryMap::PrepareCache('locale', NULL, 'tree'); $LocaleSources = Gdn_LibraryMap::GetCache('locale', $SafeLocaleName); if ($ForceRemapping === TRUE || !Gdn_LibraryMap::CacheReady('locale') || $LocaleSources === NULL) { $LocaleSources = array(); // Get application-based locale definition files $ApplicationLocaleSources = Gdn_FileSystem::FindAll(PATH_APPLICATIONS, CombinePaths(array('locale', $LocaleName . '.php')), $ApplicationWhiteList); if ($ApplicationLocaleSources !== FALSE) { $LocaleSources = array_merge($LocaleSources, $ApplicationLocaleSources); } $ApplicationLocaleSources = Gdn_FileSystem::FindAll(PATH_APPLICATIONS, CombinePaths(array('locale', $LocaleName, 'definitions.php')), $ApplicationWhiteList); if ($ApplicationLocaleSources !== FALSE) { $LocaleSources = array_merge($LocaleSources, $ApplicationLocaleSources); } // Get locale-based locale definition files. $EnabledLocales = C('EnabledLocales'); if (is_array($EnabledLocales)) { foreach ($EnabledLocales as $Key => $Locale) { if ($Locale != $LocaleName) { continue; } // skip locales that aren't in effect. // Grab all of the files in the locale's folder. $Paths = SafeGlob(PATH_ROOT . "/locales/{$Key}/*.php"); if (is_array($Paths)) { foreach ($Paths as $Path) { $LocaleSources[] = $Path; } } } } // Get plugin-based locale definition files $PluginLocaleSources = Gdn_FileSystem::FindAll(PATH_PLUGINS, CombinePaths(array('locale', $LocaleName . '.php')), $PluginWhiteList); if ($PluginLocaleSources !== FALSE) { $LocaleSources = array_merge($LocaleSources, $PluginLocaleSources); } $PluginLocaleSources = Gdn_FileSystem::FindAll(PATH_PLUGINS, CombinePaths(array('locale', $LocaleName, 'definitions.php')), $PluginWhiteList); if ($PluginLocaleSources !== FALSE) { $LocaleSources = array_merge($LocaleSources, $PluginLocaleSources); } // Get theme-based locale definition files. $Theme = C('Garden.Theme'); if ($Theme) { $ThemeLocalePath = PATH_THEMES . "/{$Theme}/locale/{$LocaleName}.php"; if (file_exists($ThemeLocalePath)) { $LocaleSources[] = $ThemeLocalePath; } } // Save the mappings $FileContents = array(); $Count = count($LocaleSources); for ($i = 0; $i < $Count; ++$i) { $FileContents[$SafeLocaleName][] = Gdn_Format::ArrayValueForPhp($LocaleSources[$i]); } // Look for a global locale. $ConfigLocale = PATH_CONF . '/locale.php'; if (file_exists($ConfigLocale)) { $FileContents[$SafeLocaleName][] = $ConfigLocale; } // Look for a config locale that is locale-specific. $ConfigLocale = PATH_CONF . "/locale-{$LocaleName}.php"; if (file_exists($ConfigLocale)) { $FileContents[$SafeLocaleName][] = $ConfigLocale; } Gdn_LibraryMap::PrepareCache('locale', $FileContents); } return $LocaleSources; }
/** * Defines and loads the locale. * * @param string $LocaleName The name of the locale to load. Locale definitions are kept in each * application's locale folder. For example: * /dashboard/locale/$LocaleName.php * /vanilla/locale/$LocaleName.php * @param array $ApplicationWhiteList An array of application folders that are safe to examine for locale * definitions. * @param array $PluginWhiteList An array of plugin folders that are safe to examine for locale * definitions. * @param bool $ForceRemapping For speed purposes, the application folders are crawled for locale * sources. Once sources are found, they are saved in the * cache/locale_mapppings.php file. If ForceRemapping is true, this file will * be ignored and the folders will be recrawled and the mapping file will be * re-generated. You can also simply delete the file and it will * automatically force a remapping. */ public function Set($LocaleName, $ApplicationWhiteList, $PluginWhiteList, $ForceRemapping = FALSE) { $SafeLocaleName = preg_replace('/([^\w\d_-])/', '', $LocaleName); // Removes everything from the string except letters, numbers, dashes, and underscores $LocaleSources = array(); if(!is_array($ApplicationWhiteList)) $ApplicationWhiteList = array(); if(!is_array($PluginWhiteList)) $PluginWhiteList = array(); Gdn_LibraryMap::PrepareCache('locale', NULL, 'tree'); $LocaleSources = Gdn_LibraryMap::GetCache('locale',$SafeLocaleName); if ($ForceRemapping === TRUE || !Gdn_LibraryMap::CacheReady('locale') || $LocaleSources === NULL) { $LocaleSources = array(); // Get application-based locale definition files $ApplicationLocaleSources = Gdn_FileSystem::FindAll(PATH_APPLICATIONS, CombinePaths(array('locale', $LocaleName.'.php')), $ApplicationWhiteList); if ($ApplicationLocaleSources !== FALSE) $LocaleSources = array_merge($LocaleSources, $ApplicationLocaleSources); $ApplicationLocaleSources = Gdn_FileSystem::FindAll(PATH_APPLICATIONS, CombinePaths(array('locale', $LocaleName, 'definitions.php')), $ApplicationWhiteList); if ($ApplicationLocaleSources !== FALSE) $LocaleSources = array_merge($LocaleSources, $ApplicationLocaleSources); // Get plugin-based locale definition files $PluginLocaleSources = Gdn_FileSystem::FindAll(PATH_PLUGINS, CombinePaths(array('locale', $LocaleName.'.php')), $PluginWhiteList); if ($PluginLocaleSources !== FALSE) $LocaleSources = array_merge($LocaleSources, $PluginLocaleSources); $PluginLocaleSources = Gdn_FileSystem::FindAll(PATH_PLUGINS, CombinePaths(array('locale', $LocaleName, 'definitions.php')), $PluginWhiteList); if ($PluginLocaleSources !== FALSE) $LocaleSources = array_merge($LocaleSources, $PluginLocaleSources); // Get theme-based locale definition files. $Theme = C('Garden.Theme'); if($Theme) { $ThemeLocalePath = PATH_THEMES."/$Theme/locale/$LocaleName.php"; if(file_exists($ThemeLocalePath)) $LocaleSources[] = $ThemeLocalePath; } // Get locale-based locale definition files. $EnabledLocales = C('EnabledLocales'); if (is_array($EnabledLocales)) { foreach ($EnabledLocales as $Key => $Locale) { if ($Locale != $LocaleName) continue; // skip locales that aren't in effect. // Grab all of the files in the locale's folder. $Paths = SafeGlob(PATH_ROOT."/locales/$Key/*.php"); if (is_array($Paths)) { foreach($Paths as $Path) { $LocaleSources[] = $Path; } } } } // Save the mappings $FileContents = array(); $Count = count($LocaleSources); for($i = 0; $i < $Count; ++$i) { $FileContents[$SafeLocaleName][] = Gdn_Format::ArrayValueForPhp($LocaleSources[$i]); } // Look for a global locale. $ConfigLocale = PATH_LOCAL_CONF.'/locale.php'; if (file_exists($ConfigLocale)) $FileContents[$SafeLocaleName][] = $ConfigLocale; // Look for a config locale that is locale-specific. $ConfigLocale = PATH_LOCAL_CONF."/locale-$LocaleName.php"; if (file_exists($ConfigLocale)) $FileContents[$SafeLocaleName][] = $ConfigLocale; Gdn_LibraryMap::PrepareCache('locale', $FileContents); } // Set up defaults $Definition = array(); $this->_Definition = array(); // Now set the locale name and import all of the sources. $this->_Locale = $LocaleName; $LocaleSources = Gdn_LibraryMap::GetCache('locale', $SafeLocaleName); if (is_null($SafeLocaleName)) $LocaleSources = array(); $ConfLocaleOverride = PATH_LOCAL_CONF . DS . 'locale.php'; $Count = count($LocaleSources); for($i = 0; $i < $Count; ++$i) { if ($ConfLocaleOverride != $LocaleSources[$i] && file_exists($LocaleSources[$i])) // Don't double include the conf override file... and make sure it comes last include($LocaleSources[$i]); } // Also load any custom defined definitions from the conf directory if (file_exists($ConfLocaleOverride)) include($ConfLocaleOverride); // All of the included files should have contained // $Definition['Code'] = 'Definition'; assignments. The overwrote each // other in the order they were included. Now assign the $Definition array // to the local private _Definition property. $this->_Definition = $Definition; }