mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2025-10-16 12:05:38 +00:00
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. git-svn-id: https://develop.svn.wordpress.org/trunk@52809 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
d241c8ccea
commit
2d5f6833fb
@ -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';
|
||||
|
||||
@ -80,67 +80,33 @@ class Tests_Formatting_RemoveAccents extends WP_UnitTestCase {
|
||||
$this->assertSame( 'aaeiouuAEIOUU', remove_accents( 'aɑeiouüAEIOUÜ' ) );
|
||||
}
|
||||
|
||||
public function remove_accents_germanic_umlauts_cb() {
|
||||
return 'de_DE';
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 3782
|
||||
*/
|
||||
public function test_remove_accents_germanic_umlauts() {
|
||||
add_filter( 'locale', array( $this, 'remove_accents_germanic_umlauts_cb' ) );
|
||||
|
||||
$this->assertSame( 'AeOeUeaeoeuess', remove_accents( 'ÄÖÜäöüß' ) );
|
||||
|
||||
remove_filter( 'locale', array( $this, 'remove_accents_germanic_umlauts_cb' ) );
|
||||
}
|
||||
|
||||
public function set_locale_to_danish() {
|
||||
return 'da_DK';
|
||||
$this->assertSame( 'AeOeUeaeoeuess', remove_accents( 'ÄÖÜäöüß', 'de_DE' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 23907
|
||||
*/
|
||||
public function test_remove_danish_accents() {
|
||||
add_filter( 'locale', array( $this, 'set_locale_to_danish' ) );
|
||||
|
||||
$this->assertSame( 'AeOeAaaeoeaa', remove_accents( 'ÆØÅæøå' ) );
|
||||
|
||||
remove_filter( 'locale', array( $this, 'set_locale_to_danish' ) );
|
||||
}
|
||||
|
||||
public function set_locale_to_catalan() {
|
||||
return 'ca';
|
||||
$this->assertSame( 'AeOeAaaeoeaa', remove_accents( 'ÆØÅæøå', 'da_DK' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 37086
|
||||
*/
|
||||
public function test_remove_catalan_middot() {
|
||||
add_filter( 'locale', array( $this, 'set_locale_to_catalan' ) );
|
||||
|
||||
$this->assertSame( 'allallalla', remove_accents( 'al·lallaŀla' ) );
|
||||
|
||||
remove_filter( 'locale', array( $this, 'set_locale_to_catalan' ) );
|
||||
|
||||
$this->assertSame( 'allallalla', remove_accents( 'al·lallaŀla', 'ca' ) );
|
||||
$this->assertSame( 'al·lallalla', remove_accents( 'al·lallaŀla' ) );
|
||||
}
|
||||
|
||||
public function set_locale_to_serbian() {
|
||||
return 'sr_RS';
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 38078
|
||||
*/
|
||||
public function test_transcribe_serbian_crossed_d() {
|
||||
add_filter( 'locale', array( $this, 'set_locale_to_serbian' ) );
|
||||
|
||||
$this->assertSame( 'DJdj', remove_accents( 'Đđ' ) );
|
||||
|
||||
remove_filter( 'locale', array( $this, 'set_locale_to_serbian' ) );
|
||||
|
||||
$this->assertSame( 'DJdj', remove_accents( 'Đđ', 'sr_RS' ) );
|
||||
$this->assertSame( 'Dd', remove_accents( 'Đđ' ) );
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user