From 08cf7e7b945dd624a713d5d89ce50b7561f2db4c Mon Sep 17 00:00:00 2001 From: SergeiKutanov Date: Wed, 15 Jan 2014 13:29:03 +0400 Subject: [PATCH 1/4] po filles generation. All the quotation marks must be screened by adding a backslash before them. Otherwise we cannot generate .mo file. --- .../console/controllers/MessageController.php | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/framework/console/controllers/MessageController.php b/framework/console/controllers/MessageController.php index 34a1564a30..ad970ecef7 100644 --- a/framework/console/controllers/MessageController.php +++ b/framework/console/controllers/MessageController.php @@ -189,6 +189,7 @@ class MessageController extends Controller $merged = []; $untranslated = []; foreach ($messages as $message) { + $message = preg_replace('/\\"/', '\"', $message); if (array_key_exists($message, $translated) && strlen($translated[$message]) > 0) { $merged[$message] = $translated[$message]; } else { @@ -202,15 +203,17 @@ class MessageController extends Controller $todo[$message] = ''; } ksort($translated); - foreach ($translated as $message => $translation) { - if (!isset($merged[$message]) && !isset($todo[$message]) && !$removeUnused) { - if (substr($translation, 0, 2) === '@@' && substr($translation, -2) === '@@') { - $todo[$message] = $translation; - } else { - $todo[$message] = '@@' . $translation . '@@'; - } - } - } + if($format === 'php'){ + foreach ($translated as $message => $translation) { + if (!isset($merged[$message]) && !isset($todo[$message]) && !$removeUnused) { + if (substr($translation, 0, 2) === '@@' && substr($translation, -2) === '@@') { + $todo[$message] = $translation; + } else { + $todo[$message] = '@@' . $translation . '@@'; + } + } + } + } $merged = array_merge($todo, $merged); if ($sort) { ksort($merged); @@ -221,6 +224,8 @@ class MessageController extends Controller if($format === 'po'){ $out_str = ''; foreach($merged as $k=>$v){ + $k = preg_replace('/(\")|(\\\")/', "\\\"", $k); + $v = preg_replace('/(\")|(\\\")/', "\\\"", $v); $out_str .= "msgid \"$k\"\n"; $out_str .= "msgstr \"$v\"\n"; $out_str .= "\n"; @@ -233,6 +238,7 @@ class MessageController extends Controller $merged = ''; sort($messages); foreach($messages as $message) { + $message = preg_replace('/(\")|(\\\")/', '\\\"', $message); $merged .= "msgid \"$message\"\n"; $merged .= "msgstr \"\"\n"; $merged .= "\n"; From 2ce5e652d7e00dc03adf3b6da83a0e4a846d12c4 Mon Sep 17 00:00:00 2001 From: SergeiKutanov Date: Wed, 15 Jan 2014 14:44:57 +0400 Subject: [PATCH 2/4] code style fixed --- .../console/controllers/MessageController.php | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/framework/console/controllers/MessageController.php b/framework/console/controllers/MessageController.php index ad970ecef7..412634eb3c 100644 --- a/framework/console/controllers/MessageController.php +++ b/framework/console/controllers/MessageController.php @@ -175,7 +175,6 @@ class MessageController extends Controller $translated = file_get_contents($fileName); preg_match_all('/(?<=msgid ").*(?="\nmsgstr)/', $translated, $keys); preg_match_all('/(?<=msgstr ").*(?="\n\n)/', $translated, $values); - $translated = array_combine($keys[0], $values[0]); } else { $translated = require($fileName); @@ -189,7 +188,7 @@ class MessageController extends Controller $merged = []; $untranslated = []; foreach ($messages as $message) { - $message = preg_replace('/\\"/', '\"', $message); + $message = preg_replace('/\\"/', '\"', $message); if (array_key_exists($message, $translated) && strlen($translated[$message]) > 0) { $merged[$message] = $translated[$message]; } else { @@ -203,17 +202,17 @@ class MessageController extends Controller $todo[$message] = ''; } ksort($translated); - if($format === 'php'){ - foreach ($translated as $message => $translation) { - if (!isset($merged[$message]) && !isset($todo[$message]) && !$removeUnused) { - if (substr($translation, 0, 2) === '@@' && substr($translation, -2) === '@@') { - $todo[$message] = $translation; - } else { - $todo[$message] = '@@' . $translation . '@@'; - } - } - } - } + if($format === 'php'){ + foreach ($translated as $message => $translation) { + if (!isset($merged[$message]) && !isset($todo[$message]) && !$removeUnused) { + if (substr($translation, 0, 2) === '@@' && substr($translation, -2) === '@@') { + $todo[$message] = $translation; + } else { + $todo[$message] = '@@' . $translation . '@@'; + } + } + } + } $merged = array_merge($todo, $merged); if ($sort) { ksort($merged); @@ -224,8 +223,8 @@ class MessageController extends Controller if($format === 'po'){ $out_str = ''; foreach($merged as $k=>$v){ - $k = preg_replace('/(\")|(\\\")/', "\\\"", $k); - $v = preg_replace('/(\")|(\\\")/', "\\\"", $v); + $k = preg_replace('/(\")|(\\\")/', "\\\"", $k); + $v = preg_replace('/(\")|(\\\")/', "\\\"", $v); $out_str .= "msgid \"$k\"\n"; $out_str .= "msgstr \"$v\"\n"; $out_str .= "\n"; @@ -238,7 +237,7 @@ class MessageController extends Controller $merged = ''; sort($messages); foreach($messages as $message) { - $message = preg_replace('/(\")|(\\\")/', '\\\"', $message); + $message = preg_replace('/(\")|(\\\")/', '\\\"', $message); $merged .= "msgid \"$message\"\n"; $merged .= "msgstr \"\"\n"; $merged .= "\n"; From 92cfdb33c7cd69f626e264d6301f47503ca423a5 Mon Sep 17 00:00:00 2001 From: SergeiKutanov Date: Wed, 15 Jan 2014 16:08:13 +0400 Subject: [PATCH 3/4] po now supports obsolete messages --- .../console/controllers/MessageController.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/framework/console/controllers/MessageController.php b/framework/console/controllers/MessageController.php index 412634eb3c..6de3dde42d 100644 --- a/framework/console/controllers/MessageController.php +++ b/framework/console/controllers/MessageController.php @@ -173,7 +173,7 @@ class MessageController extends Controller if (is_file($fileName)) { if($format === 'po'){ $translated = file_get_contents($fileName); - preg_match_all('/(?<=msgid ").*(?="\nmsgstr)/', $translated, $keys); + preg_match_all('/(?<=msgid ").*(?="\n(#*)msgstr)/', $translated, $keys); preg_match_all('/(?<=msgstr ").*(?="\n\n)/', $translated, $values); $translated = array_combine($keys[0], $values[0]); } else { @@ -188,7 +188,7 @@ class MessageController extends Controller $merged = []; $untranslated = []; foreach ($messages as $message) { - $message = preg_replace('/\\"/', '\"', $message); + $message = preg_replace('/\"/', '\"', $message); if (array_key_exists($message, $translated) && strlen($translated[$message]) > 0) { $merged[$message] = $translated[$message]; } else { @@ -202,7 +202,6 @@ class MessageController extends Controller $todo[$message] = ''; } ksort($translated); - if($format === 'php'){ foreach ($translated as $message => $translation) { if (!isset($merged[$message]) && !isset($todo[$message]) && !$removeUnused) { if (substr($translation, 0, 2) === '@@' && substr($translation, -2) === '@@') { @@ -212,7 +211,6 @@ class MessageController extends Controller } } } - } $merged = array_merge($todo, $merged); if ($sort) { ksort($merged); @@ -225,8 +223,13 @@ class MessageController extends Controller foreach($merged as $k=>$v){ $k = preg_replace('/(\")|(\\\")/', "\\\"", $k); $v = preg_replace('/(\")|(\\\")/', "\\\"", $v); - $out_str .= "msgid \"$k\"\n"; - $out_str .= "msgstr \"$v\"\n"; + if(substr($v, 0, 2) === '@@' && substr($v, -2) === '@@'){ + $out_str .= "#msgid \"$k\"\n"; + $out_str .= "#msgstr \"$v\"\n"; + }else{ + $out_str .= "msgid \"$k\"\n"; + $out_str .= "msgstr \"$v\"\n"; + } $out_str .= "\n"; } $merged = $out_str; From a937e970c6147f76124f9b74be220342e99bba86 Mon Sep 17 00:00:00 2001 From: SergeiKutanov Date: Wed, 15 Jan 2014 16:40:26 +0400 Subject: [PATCH 4/4] fixes for previous solution --- framework/console/controllers/MessageController.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/framework/console/controllers/MessageController.php b/framework/console/controllers/MessageController.php index 6de3dde42d..ae55f241f4 100644 --- a/framework/console/controllers/MessageController.php +++ b/framework/console/controllers/MessageController.php @@ -188,7 +188,9 @@ class MessageController extends Controller $merged = []; $untranslated = []; foreach ($messages as $message) { - $message = preg_replace('/\"/', '\"', $message); + if($format === 'po'){ + $message = preg_replace('/\"/', '\"', $message); + } if (array_key_exists($message, $translated) && strlen($translated[$message]) > 0) { $merged[$message] = $translated[$message]; } else {