## Configuration changes in the config.inc.php
### i18n.client_charset
- `…i18n.client_charset`: The setting has been removed, it used to support two options, `ISO-8859-1` (LATIN1) and `UTF-8`, but we only support UTF-8.
- `general.time_zone`: We're using the time zones available in PHP, therefore the file `lib/pkp/registry/timeZones.xml` has been removed, and possible values for this setting must come from the following link [https://www.php.net/timezones](https://www.php.net/timezones). Old values from the `timeZones.xml` should still work.
## Changes in the installation interface
- The client character set (`installer.clientCharset`) has been removed, we've been supporting only UTF-8.
- The connection character set (`installer.connectionCharset`) has been removed, we're using only UTF-8.
- The time zone setting (`installer.timezoneInstructions`) has been added, to setup the global application time zone.
- The list of database drivers has been limited to PostgreSQL and MySQL, which are the versions we're currently supporting.
## Localization updates
More details about the new localization features can be found in the section [Utilities > Translation](/dev/documentation/en/utilities-translation).
- It's not needed to load specific locale files anymore through the method `AppLocale::requireComponents(LOCALE_COMPONENT_...)`, the translations for the current locale are preloaded.
- The classes `PKPLocale` and `AppLocale` have been deprecated in favour of the `PKP\facades\Locale`, only their main methods have been preserved for backwards compatibility purposes. Given the new class is a Laravel's facade, its underlying implementation can be replaced through `PKP\facades\Locale::swap(new CustomLocaleClass())`.
- The usage of the `Sokil\IsoCodes\IsoCodesFactory` class, which we've been using to retrieve lists of languages, currencies, countries and scripts, has been centralized into the facade `PKP\facades\Locale`, respectively by the methods `getLanguages()`, `getLanguages()`, `getCurrencies()`, `getCountries()`, and `getScripts()`.
- The file `lib/pkp/registry/locales.xml` has been removed, now the list of locales is built upon the locale folders available for the application (e.g. `pkp-lib/locale/`) and the metadata information, such as display name, right-to-left script, etc., is retrieved programatically.
- The `AppLocale` methods related to conversions between locale formats (ISO 639-1, ISO 639-2b, ...) have been moved into the class `PKP\i18n\LocaleConversion`.
- The `AppLocale` methods used to retrieve locale metadata have been moved to the class `PKP\i18n\LocaleMetadata` (e.g. `getLocaleDirection()`, `isLocaleComplete()`).
- The method `AppLocale::getAllLocales()` has been replaced by `PKP\facades\Locale::getLocales()`, but instead of returning the locale display name, it returns a `LocaleMetadata` instance, which holds extra information.
- The following methods have been removed from the `AppLocale` class: `getLocaleStyleSheet()`, `getLocalePrecedence()`, `getLocaleFiles()`, `loadLocaleList()`, `addOctothorpes()`, `initialize()`, `makeComponentMap()`, `getFilenameComponentMap()`, `registerLocaleFile()`, `getLocaleStyleSheet()`, `isLocaleWithFamilyFirst()`, `reloadLocale()`, `getParameterNames()`, and `getTimeZone()`.
- The translation hook has been renamed from `PKPLocale::translate` to `Locale::translate`, and its arguments have been modified as well.
## General updates
- The global function `__p(string $key, int $number, array $replace = [], ?string $locale = null)` has been introduced to translate pluralized locale keys.
- Laravel's caching system has been setup with an OP Cache implementation.
- Introduced the static method `APP\core\Application::isUpgrading()` to replace the constant `RUNNING_UPGRADE`.
- Introduced the static method `APP\core\Application::isInstalled()` as a shortcut to `Config::getVar('general', 'installed')`.
- Introduced the static method `APP\core\Application::isUnderMaintenance()` to check if the application is installed and not being upgraded.
- Introduced the static method `PKP\session\SessionManager::isDisabled()` to replace the constant `SESSION_DISABLE_INIT`.
## Smarty templates
- The `translate` tag has been extended to support pluralized locale keys, the new syntax is as follows: `{translate key="localization.key.name" count="10" paramName="paramValue"}`, it's also possible to feed a `locale` param.
- The `translate` modifier has also been extended to support pluralized locale keys, this is the new syntax: `{$foo|translate:count:123:locale:pt_BR:paramName:paramValue}`.