<?php
declare(strict_types=1);
/**
* @defgroup i18n I18N
* Implements localization concerns such as locale files, time zones, and country lists.
*/
/**
* @file classes/i18n/interfaces/LocaleInterface.php
*
* Copyright (c) 2014-2021 Simon Fraser University
* Copyright (c) 2000-2021 John Willinsky
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
*
* @class LocaleInterface
*
* @ingroup i18n
*
* @brief Provides methods for loading gettext locale files and translating texts
*/
namespace PKP\i18n\interfaces;
use PKP\i18n\LocaleMetadata;
use PKP\i18n\translation\LocaleBundle;
use Sokil\IsoCodes\Database\Countries;
use Sokil\IsoCodes\Database\Currencies;
use Sokil\IsoCodes\Database\LanguagesInterface;
use Sokil\IsoCodes\Database\Scripts;
interface LocaleInterface extends \Illuminate\Contracts\Translation\Translator
{
/** Keeps the default locale of the application */
public const DEFAULT_LOCALE = 'en';
/** Regular expression to validate and extract pieces of a locale code */
public const LOCALE_EXPRESSION = '/^(?P<language>[a-z]{2})(?:_(?P<country>[A-Za-z]{2,4}))?(?:@(?P<script>[A-Za-z\d]{5,8}|\d[A-Za-z\d]{3}))?$/';
/**
* Attempts to retrieve the primary locale for the current context, if not available, then for the site.
*
* @deprecated 3.4.0 Use Context::getPrimaryLocale()
*/
public function getPrimaryLocale(): string;
/**
* Register a locale folder
*
* @param string $path The given folder is expected to have sub-folders, each one representing a locale (e.g. "./en").
* The application will then look for .po files and attempt to lazy load them when requested.
* @param int $priority The priority controls which locale should be loaded first, higher priorities overwrite smaller ones (in case of locale key conflicts), the default is 0
*/
public function registerPath(string $path, int $priority = 0): void;
/**
* Register a locale file loader
*
* @param callable $fileLoader Receives two arguments.
* string $locale The locale string
* array $localeFiles An array (key = file path, value = the loading priority) with the locale files to be loaded.
* The second argument might be received as a reference (&) in order to update the locales.
* The $fileLoader will be invoked once when loading a locale.
* @param int $priority Defines the calling priority, higher values will be called later, the default is 0
*/
public function registerLoader(callable $fileLoader, int $priority = 0): void;
/**
* Check if the supplied locale is valid.
*/
public function isLocaleValid(?string $locale): bool;
/**
* Retrieves the metadata of a locale
*/
public function getMetadata(string $locale): ?LocaleMetadata;
/**
* Retrieves a list of available locales with their metadata
*
* @return LocaleMetadata[]
*/
public function getLocales(): array;
/**
* Install support for a new locale.
*/
public function installLocale(string $locale): void;
/**
* Uninstall support for an existing locale.
*/
public function uninstallLocale(string $locale): void;
/**
* Retrieves whether the given locale is in the list of supported locales
*/
public function isSupported(string $locale): bool;
/**
* Get all supported form locales for the current context (if not available, then from the site).
*
* @deprecated 3.4.0 Use Context::getSupportedFormLocales()
*
* @return string[]
*/
public function getSupportedFormLocales(): array;
/**
* Get all supported locales for the current context (if not available, then from the site).
*
* @deprecated 3.4.0 Use Context::getSupportedLocales()
*
* @return string[]
*/
public function getSupportedLocales(): array;
/**
* Sets the handler to format missing locale keys
*/
public function setMissingKeyHandler(?callable $handler): void;
/**
* Retrieves the handler to format missing locale keys
*/
public function getMissingKeyHandler(): ?callable;
/**
* Retrieves a locale bundle to translate texts.
*
*/
public function getBundle(?string $locale = null, bool $useCache = true): LocaleBundle;
/**
* Retrieves the default locale
*/
public function getDefaultLocale(): string;
/**
* Retrieve the countries
*/
public function getCountries(?string $locale = null): Countries;
/**
* Retrieve the currencies
*/
public function getCurrencies(?string $locale = null): Currencies;
/**
* Retrieve the languages
*/
public function getLanguages(?string $locale = null, bool $fromCache = true): LanguagesInterface;
/**
* Retrieve the scripts
*/
public function getScripts(?string $locale = null): Scripts;
/**
* Get the formatted locale display names with country if same language code present multiple times
*
* @param array $filterByLocales Optional list of locales code to filter by the returned formatted names list
* @param array $locales Optional list of available all locales
* @param int $langLocaleStatus The const value of one of LocaleMetadata:LANGUAGE_LOCALE_*
* @param bool $omitLocaleCodeInDisplay Should leave out the locale code from display. By default leave out.
*
* @return array The list of locales with formatted display name
*/
public function getFormattedDisplayNames(array $filterByLocales = null, array $locales = null, int $langLocaleStatus = LocaleMetadata::LANGUAGE_LOCALE_WITH, bool $omitLocaleCodeInDisplay = true): array;
}
|