I18N: Add a `$locale` parameter for `remove_accents()`.

This highlights the fact that `remove_accents()` is locale-aware and makes it easier to utilize the function with different locales without having to use `switch_to_locale()` or the `locale` filter.

Additionally, this commit relaxes the check for character replacements in German locales to include formal and informal variants of any `de_*` locale, even if WordPress does not have a native translation for some of them yet.

Props malthert, johnbillion, knutsp, ocean90, SergeyBiryukov.
Fixes #54415.
Built from https://develop.svn.wordpress.org/trunk@52809


git-svn-id: http://core.svn.wordpress.org/trunk@52398 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
Sergey Biryukov 2022-02-28 15:42:05 +00:00
parent 7e2b01d127
commit d0fb86dafb
2 changed files with 16 additions and 5 deletions

View File

@ -1583,11 +1583,15 @@ function utf8_uri_encode( $utf8_string, $length = 0, $encode_ascii_characters =
* @since 4.7.0 Added locale support for `sr_RS`.
* @since 4.8.0 Added locale support for `bs_BA`.
* @since 5.7.0 Added locale support for `de_AT`.
* @since 6.0.0 Added the `$locale` parameter.
*
* @param string $string Text that might have accent characters
* @param string $string Text that might have accent characters.
* @param string $locale Optional. The locale to use for accent removal. Some character
* replacements depend on the locale being used (e.g. 'de_DE').
* Defaults to the current locale.
* @return string Filtered string with replaced "nice" characters.
*/
function remove_accents( $string ) {
function remove_accents( $string, $locale = '' ) {
if ( ! preg_match( '/[\x80-\xff]/', $string ) ) {
return $string;
}
@ -1923,9 +1927,16 @@ function remove_accents( $string ) {
);
// Used for locale-specific rules.
$locale = get_locale();
if ( empty( $locale ) ) {
$locale = get_locale();
}
if ( in_array( $locale, array( 'de_DE', 'de_DE_formal', 'de_CH', 'de_CH_informal', 'de_AT' ), true ) ) {
/*
* German has various locales (de_DE, de_CH, de_AT, ...) with formal and informal variants.
* There is no 3-letter locale like 'def', so checking for 'de' instead of 'de_' is safe,
* since 'de' itself would be a valid locale too).
*/
if ( str_starts_with( $locale, 'de' ) ) {
$chars['Ä'] = 'Ae';
$chars['ä'] = 'ae';
$chars['Ö'] = 'Oe';

View File

@ -16,7 +16,7 @@
*
* @global string $wp_version
*/
$wp_version = '6.0-alpha-52808';
$wp_version = '6.0-alpha-52809';
/**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.