From 9d1d85487ac78f781b752ae6462ddd64c6918395 Mon Sep 17 00:00:00 2001 From: Tim Whitlock Date: Tue, 8 Mar 2022 12:27:57 +0000 Subject: [PATCH] Plural-Forms retained when copying PO to same language --- languages/loco-translate.pot | 10 +++++----- readme.txt | 1 + src/gettext/Data.php | 14 +++++++++++++- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/languages/loco-translate.pot b/languages/loco-translate.pot index b4b08c8f..7b6f1ea4 100644 --- a/languages/loco-translate.pot +++ b/languages/loco-translate.pot @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Loco Translate 2.6.0\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/loco-translate/\n" -"POT-Creation-Date: 2022-03-07 12:16+0000\n" +"POT-Creation-Date: 2022-03-08 12:27+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: \n" @@ -107,7 +107,7 @@ msgstr[0] "" msgstr[1] "" #. Where %s is either PO or POT -#: src/gettext/Compiler.php:243 src/admin/file/HeadController.php:80 +#: src/gettext/Compiler.php:239 src/admin/file/HeadController.php:80 #, php-format msgid "%s file saved" msgstr "" @@ -1053,7 +1053,7 @@ msgstr "" msgid "It needs configuring before you can do any translations" msgstr "" -#: src/gettext/Compiler.php:136 src/gettext/Compiler.php:198 +#: src/gettext/Compiler.php:136 src/gettext/Compiler.php:194 #, php-format msgid "JSON compilation failed for %s" msgstr "" @@ -1456,11 +1456,11 @@ msgstr "" msgid "PO file missing" msgstr "" -#: src/gettext/Compiler.php:239 +#: src/gettext/Compiler.php:235 msgid "PO file saved and MO file compiled" msgstr "" -#: src/gettext/Compiler.php:236 +#: src/gettext/Compiler.php:232 msgid "PO file saved and MO/JSON files compiled" msgstr "" diff --git a/readme.txt b/readme.txt index 8307bca2..8191ca1a 100644 --- a/readme.txt +++ b/readme.txt @@ -106,6 +106,7 @@ We don't collect your data or snoop on you. See the [plugin privacy notice](http * Bumped WordPress version to 5.9.1 * Removed Yandex API integration * Added loco_compile_script_reference filter +* Plural-Forms retained when copying PO to same language = 2.5.8 = * Compatible with PHP 8.1 diff --git a/src/gettext/Data.php b/src/gettext/Data.php index 9159523e..acd7ebb9 100644 --- a/src/gettext/Data.php +++ b/src/gettext/Data.php @@ -221,7 +221,7 @@ public function getSourceDigest(){ * @return Loco_gettext_Data */ public function localize( Loco_Locale $locale, array $custom = [] ){ - $date = gmdate('Y-m-d H:i').'+0000'; // <- forcing UCT + $date = gmdate('Y-m-d H:i').'+0000'; // headers that must always be set if absent $defaults = [ 'Project-Id-Version' => '', @@ -241,6 +241,18 @@ public function localize( Loco_Locale $locale, array $custom = [] ){ 'X-Generator' => 'Loco https://localise.biz/', 'X-Loco-Version' => sprintf('%s; wp-%s', loco_plugin_version(), $GLOBALS['wp_version'] ), ]; + // Allow some existing headers to remain if PO was previously localized to the same language + $headers = $this->getHeaders(); + $previous = Loco_Locale::parse( $headers->trimmed('Language') ); + if( $previous->lang === $locale->lang ){ + $header = $headers->trimmed('Plural-Forms'); + if( preg_match('/^\\s*nplurals\\s*=\\s*\\d+\\s*;\\s*plural\\s*=/', $header) ) { + $required['Plural-Forms'] = $header; + } + if( $previous->region === $locale->region && $previous->variant === $locale->variant ){ + unset( $required['Language-Team'] ); + } + } // set user's preferred Last-Translator credit if configured if( function_exists('get_current_user_id') && get_current_user_id() ){ $prefs = Loco_data_Preferences::get();