2021-02-26 08:07:03 +00:00
< ? php
2021-02-23 16:00:59 +00:00
/**
* Loads text domain of current or default language for localization .
*
* @ filesource
2021-02-26 08:07:03 +00:00
* @ author Stefan Herndler
* @ since 1.5 . 0 14.09 . 14 17 : 47
*
*
* @ lastmodified 2021 - 02 - 18 T2028 + 0100
2021-02-23 16:00:59 +00:00
*
* @ since 2.0 . 0 Bugfix : Localization : correct function call apply_filters () with all required arguments after PHP 7.1 promoted warning to error , thanks to @ matkus2 bug report and code contribution .
* @ since 2.1 . 6 Bugfix : Localization : conform to WordPress plugin language file name scheme , thanks to @ nikelaos bug report .
*/
/**
* Loads text domain of current or default language for localization .
*
2021-02-26 08:07:03 +00:00
* @ author Stefan Herndler
2021-02-23 16:00:59 +00:00
* @ since 1.5 . 0
*/
class MCI_Footnotes_Language {
/**
* Register WordPress Hook .
*
2021-02-26 08:07:03 +00:00
* @ author Stefan Herndler
2021-02-23 16:00:59 +00:00
* @ since 1.5 . 0
*/
2021-02-26 08:07:03 +00:00
public static function registerHooks () {
add_action ( 'plugins_loaded' , array ( " MCI_Footnotes_Language " , " loadTextDomain " ));
2021-02-23 16:00:59 +00:00
}
/**
* Loads the text domain for current WordPress language if exists .
* Otherwise fallback " en_GB " will be loaded .
*
2021-02-26 08:07:03 +00:00
* @ author Stefan Herndler
2021-02-23 16:00:59 +00:00
* @ since 1.5 . 0
*
*
* - Bugfix : Correct function call apply_filters () with all required arguments after PHP 7.1 promoted warning to error , thanks to @ matkus2 bug report and code contribution .
*
* @ since 2.0 . 0
* @ date 2020 - 10 - 26 T1609 + 0100
*
* @ contributor @ matkus2
* @ link https :// wordpress . org / support / topic / error - missing - parameter - if - using - php - 7 - 1 - or - later /
*
2021-02-26 08:07:03 +00:00
* Add 3 rd ( empty ) argument in apply_filters () to prevent PHP from throwing an error :
2021-02-23 16:00:59 +00:00
* “Fatal error : Uncaught ArgumentCountError : Too few arguments to function apply_filters () ”
*
* Yet get_locale () is defined w / o parameters in wp - includes / l10n . php : 30 , and
* apply_filters () is defined as apply_filters ( $tag , $value ) in wp - includes / plugin . php : 181.
* @ link https :// developer . wordpress . org / reference / functions / apply_filters /
*
* But apply_filters () is defined with a 3 rd parameter ( and w / o the first one ) in
* wp - includes / class - wp - hook . php : 264 , as public function apply_filters ( $value , $args ) .
*
2021-02-26 08:07:03 +00:00
* Taking it all together , probably the full function definition would be :
2021-02-23 16:00:59 +00:00
* public function apply_filters ( $tag , $value , $args ) .
* In the case of get_locale (), $args is empty .
*
* The bug was lurking in WP . PHP 7.1 promoted the warning to an error .
* @ link https :// www . php . net / manual / en / migration71 . incompatible . php
* @ link https :// www . php . net / manual / en / migration71 . incompatible . php #migration71.incompatible.too-few-arguments-exception
*/
2021-02-26 08:07:03 +00:00
public static function loadTextDomain () {
2021-02-23 16:00:59 +00:00
2021-02-26 08:07:03 +00:00
// if language file with localization exists:
2021-02-23 16:00:59 +00:00
if ( self :: load ( apply_filters ( 'plugin_locale' , get_locale (), '' ) ) ) {
return ;
}
2021-02-26 08:07:03 +00:00
// else fall back to British English:
self :: load ( " en_GB " );
2021-02-23 16:00:59 +00:00
}
/**
* Loads a specific text domain .
*
2021-02-26 08:07:03 +00:00
* @ author Stefan Herndler
2021-02-23 16:00:59 +00:00
* @ since 1.5 . 1
2021-02-26 08:07:03 +00:00
* @ param string $p_str_LanguageCode Language Code to load a specific text domain .
2021-02-23 16:00:59 +00:00
* @ return bool
*
*
* - Bugfix : Localization : conform to WordPress plugin language file name scheme , thanks to @ nikelaos bug report .
*
* @ since 2.1 . 6
* @ date 2020 - 12 - 08 T1931 + 0100
*
* @ reporter @ nikelaos
* @ link https :// wordpress . org / support / topic / more - feature - ideas /
*
2021-02-26 08:07:03 +00:00
* That is done by using load_plugin_textdomain () :
2021-02-23 16:00:59 +00:00
* “The . mo file should be named based on the text domain with a dash , and then the locale exactly . ”
* @ see wp - includes / l10n . php : 857
*/
2021-02-26 08:07:03 +00:00
private static function load ( $p_str_LanguageCode ) {
2021-02-23 16:00:59 +00:00
return load_plugin_textdomain (
MCI_Footnotes_Config :: C_STR_PLUGIN_NAME ,
2021-02-26 08:07:03 +00:00
// This argument only fills the gap left by a deprecated argument (since WP2.7):
2021-02-23 16:00:59 +00:00
false ,
2021-02-26 08:07:03 +00:00
// The plugin basedir is provided; trailing slash would be clipped:
2021-02-23 16:00:59 +00:00
MCI_Footnotes_Config :: C_STR_PLUGIN_NAME . '/languages'
);
}
}