Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PSDI Army
yii2
Commits
48b8089d
Commit
48b8089d
authored
Jan 17, 2014
by
Digimon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
code format fixed
parent
c3976b0f
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
300 additions
and
320 deletions
+300
-320
MessageController.php
framework/console/controllers/MessageController.php
+300
-320
No files found.
framework/console/controllers/MessageController.php
View file @
48b8089d
...
...
@@ -31,343 +31,324 @@ use yii\helpers\FileHelper;
*/
class
MessageController
extends
Controller
{
/**
* @var string controller default action ID.
*/
public
$defaultAction
=
'extract'
;
/**
* @var string controller default action ID.
*/
public
$defaultAction
=
'extract'
;
/**
* Creates a configuration file for the "extract" command.
*
* The generated configuration file contains detailed instructions on
* how to customize it to fit for your needs. After customization,
* you may use this configuration file with the "extract" command.
*
* @param string $filePath output file name or alias.
* @throws Exception on failure.
*/
public
function
actionConfig
(
$filePath
)
{
$filePath
=
Yii
::
getAlias
(
$filePath
);
if
(
file_exists
(
$filePath
))
{
if
(
!
$this
->
confirm
(
"File '
{
$filePath
}
' already exists. Do you wish to overwrite it?"
))
{
return
;
}
}
copy
(
Yii
::
getAlias
(
'@yii/views/messageConfig.php'
),
$filePath
);
echo
"Configuration file template created at '
{
$filePath
}
'.
\n\n
"
;
}
/**
* Creates a configuration file for the "extract" command.
*
* The generated configuration file contains detailed instructions on
* how to customize it to fit for your needs. After customization,
* you may use this configuration file with the "extract" command.
*
* @param string $filePath output file name or alias.
* @throws Exception on failure.
*/
public
function
actionConfig
(
$filePath
)
{
$filePath
=
Yii
::
getAlias
(
$filePath
);
if
(
file_exists
(
$filePath
))
{
if
(
!
$this
->
confirm
(
"File '
{
$filePath
}
' already exists. Do you wish to overwrite it?"
))
{
return
;
}
}
copy
(
Yii
::
getAlias
(
'@yii/views/messageConfig.php'
),
$filePath
);
echo
"Configuration file template created at '
{
$filePath
}
'.
\n\n
"
;
}
/**
* Extracts messages to be translated from source code.
*
* This command will search through source code files and extract
* messages that need to be translated in different languages.
*
* @param string $configFile the path or alias of the configuration file.
* You may use the "yii message/config" command to generate
* this file and then customize it for your needs.
* @throws Exception on failure.
*/
public
function
actionExtract
(
$configFile
)
{
$configFile
=
Yii
::
getAlias
(
$configFile
);
if
(
!
is_file
(
$configFile
))
{
throw
new
Exception
(
"The configuration file does not exist:
$configFile
"
);
}
/**
* Extracts messages to be translated from source code.
*
* This command will search through source code files and extract
* messages that need to be translated in different languages.
*
* @param string $configFile the path or alias of the configuration file.
* You may use the "yii message/config" command to generate
* this file and then customize it for your needs.
* @throws Exception on failure.
*/
public
function
actionExtract
(
$configFile
)
{
$configFile
=
Yii
::
getAlias
(
$configFile
);
if
(
!
is_file
(
$configFile
))
{
throw
new
Exception
(
"The configuration file does not exist:
$configFile
"
);
}
$config
=
array_merge
(
[
'translator'
=>
'Yii::t'
,
'overwrite'
=>
false
,
'removeUnused'
=>
false
,
'sort'
=>
false
,
'format'
=>
'php'
,
],
require
(
$configFile
)
);
$config
=
array_merge
([
'translator'
=>
'Yii::t'
,
'overwrite'
=>
false
,
'removeUnused'
=>
false
,
'sort'
=>
false
,
'format'
=>
'php'
,
],
require
(
$configFile
));
if
(
!
isset
(
$config
[
'sourcePath'
],
$config
[
'messagePath'
],
$config
[
'languages'
]))
{
throw
new
Exception
(
'The configuration file must specify "sourcePath", "messagePath" and "languages".'
);
}
if
(
!
is_dir
(
$config
[
'sourcePath'
]))
{
throw
new
Exception
(
"The source path
{
$config
[
'sourcePath'
]
}
is not a valid directory."
);
}
if
(
in_array
(
$config
[
'format'
],
[
'php'
,
'po'
]))
{
if
(
!
is_dir
(
$config
[
'messagePath'
]))
{
throw
new
Exception
(
"The message path
{
$config
[
'messagePath'
]
}
is not a valid directory."
);
}
}
if
(
empty
(
$config
[
'languages'
]))
{
throw
new
Exception
(
"Languages cannot be empty."
);
}
if
(
empty
(
$config
[
'format'
])
||
!
in_array
(
$config
[
'format'
],
[
'php'
,
'po'
,
'db'
]))
{
throw
new
Exception
(
'Format should be either "php", "po" or "db".'
);
}
if
(
!
isset
(
$config
[
'sourcePath'
],
$config
[
'messagePath'
],
$config
[
'languages'
]))
{
throw
new
Exception
(
'The configuration file must specify "sourcePath", "messagePath" and "languages".'
);
}
if
(
!
is_dir
(
$config
[
'sourcePath'
]))
{
throw
new
Exception
(
"The source path
{
$config
[
'sourcePath'
]
}
is not a valid directory."
);
}
if
(
in_array
(
$config
[
'format'
],
[
'php'
,
'po'
]))
{
if
(
!
is_dir
(
$config
[
'messagePath'
]))
{
throw
new
Exception
(
"The message path
{
$config
[
'messagePath'
]
}
is not a valid directory."
);
}
}
if
(
empty
(
$config
[
'languages'
]))
{
throw
new
Exception
(
"Languages cannot be empty."
);
}
if
(
empty
(
$config
[
'format'
])
||
!
in_array
(
$config
[
'format'
],
[
'php'
,
'po'
,
'db'
]))
{
throw
new
Exception
(
'Format should be either "php", "po" or "db".'
);
}
$files
=
FileHelper
::
findFiles
(
realpath
(
$config
[
'sourcePath'
]),
$config
);
$files
=
FileHelper
::
findFiles
(
realpath
(
$config
[
'sourcePath'
]),
$config
);
$messages
=
[];
foreach
(
$files
as
$file
)
{
$messages
=
array_merge_recursive
(
$messages
,
$this
->
extractMessages
(
$file
,
$config
[
'translator'
]));
}
if
(
in_array
(
$config
[
'format'
],
[
'php'
,
'po'
]))
{
foreach
(
$config
[
'languages'
]
as
$language
)
{
$dir
=
$config
[
'messagePath'
]
.
DIRECTORY_SEPARATOR
.
$language
;
if
(
!
is_dir
(
$dir
))
{
@
mkdir
(
$dir
);
}
foreach
(
$messages
as
$category
=>
$msgs
)
{
$file
=
str_replace
(
"
\\
"
,
'/'
,
"
$dir
/
$category
."
.
$config
[
'format'
]);
$path
=
dirname
(
$file
);
if
(
!
is_dir
(
$path
))
{
mkdir
(
$path
,
0755
,
true
);
}
$msgs
=
array_values
(
array_unique
(
$msgs
));
$this
->
generateMessageFile
(
$msgs
,
$file
,
$config
[
'overwrite'
],
$config
[
'removeUnused'
],
$config
[
'sort'
],
$config
[
'format'
]
);
}
}
}
if
(
$config
[
'format'
]
===
'db'
)
{
$dbConnection
=
\Yii
::
$app
->
getComponent
(
isset
(
$config
[
'connectionID'
])
?
$config
[
'connectionID'
]
:
'db'
);
if
(
!
$dbConnection
instanceof
\yii\db\Connection
)
{
$this
->
usageError
(
'The "connectionID" must refer to a valid database application component.'
);
}
$sourceMessageTable
=
!
isset
(
$config
[
'sourceMessageTable'
])
?
'SourceMessage'
:
$config
[
'sourceMessageTable'
];
foreach
(
$config
[
'languages'
]
as
$language
)
{
foreach
(
$messages
as
$category
=>
$msgs
)
{
$messages
[
$category
]
=
array_values
(
array_unique
(
$msgs
));
$this
->
saveMessagesToDb
(
$messages
,
$dbConnection
,
$sourceMessageTable
,
$config
[
'removeUnused'
]);
}
}
}
}
$messages
=
[];
foreach
(
$files
as
$file
)
{
$messages
=
array_merge_recursive
(
$messages
,
$this
->
extractMessages
(
$file
,
$config
[
'translator'
]));
}
if
(
in_array
(
$config
[
'format'
],
[
'php'
,
'po'
]))
{
foreach
(
$config
[
'languages'
]
as
$language
)
{
$dir
=
$config
[
'messagePath'
]
.
DIRECTORY_SEPARATOR
.
$language
;
if
(
!
is_dir
(
$dir
))
{
@
mkdir
(
$dir
);
}
foreach
(
$messages
as
$category
=>
$msgs
)
{
$file
=
str_replace
(
"
\\
"
,
'/'
,
"
$dir
/
$category
."
.
$config
[
'format'
]);
$path
=
dirname
(
$file
);
if
(
!
is_dir
(
$path
))
{
mkdir
(
$path
,
0755
,
true
);
}
$msgs
=
array_values
(
array_unique
(
$msgs
));
$this
->
generateMessageFile
(
$msgs
,
$file
,
$config
[
'overwrite'
],
$config
[
'removeUnused'
],
$config
[
'sort'
],
$config
[
'format'
]);
}
}
}
if
(
$config
[
'format'
]
===
'db'
)
{
foreach
(
$config
[
'languages'
]
as
$language
)
{
foreach
(
$messages
as
$category
=>
$msgs
)
{
$messages
[
$category
]
=
array_values
(
array_unique
(
$msgs
));
$this
->
saveMessagesToDb
(
$messages
,
$dbConnection
,
$sourceMessageTable
,
$config
[
'removeUnused'
]);
}
}
}
}
/**
* @param $messages
* @param \yii\db\Connection $dbConnection
* @param $sourceMessageTable
* @param $removeUnused
*/
protected
function
saveMessagesToDb
(
$messages
,
$dbConnection
,
$sourceMessageTable
,
$removeUnused
)
{
$q
=
new
\yii\db\Query
;
$current
=
[];
/**
* @param $messages
* @param \yii\db\Connection $dbConnection
* @param $sourceMessageTable
* @param $removeUnused
*/
protected
function
saveMessagesToDb
(
$messages
,
$dbConnection
,
$sourceMessageTable
,
$removeUnused
)
{
$q
=
new
\yii\db\Query
;
$current
=
[];
foreach
(
$q
->
select
([
'id'
,
'category'
,
'message'
])
->
from
(
$sourceMessageTable
)
->
all
()
as
$row
)
{
$current
[
$row
[
'category'
]][
$row
[
'id'
]]
=
$row
[
'message'
];
}
foreach
(
$q
->
select
([
'id'
,
'category'
,
'message'
])
->
from
(
$sourceMessageTable
)
->
all
()
as
$row
)
{
$current
[
$row
[
'category'
]][
$row
[
'id'
]]
=
$row
[
'message'
];
}
$new
=
[];
$obsoleted
=
[];
$new
=
[];
$obsoleted
=
[];
foreach
(
$messages
as
$category
=>
$msgs
)
{
$msgs
=
array_unique
(
$msgs
);
foreach
(
$messages
as
$category
=>
$msgs
)
{
$msgs
=
array_unique
(
$msgs
);
if
(
isset
(
$current
[
$category
]))
{
$new
[
$category
]
=
array_diff
(
$msgs
,
$current
[
$category
]);
$obsoleted
=
array_diff
(
$current
[
$category
],
$msgs
);
}
else
{
$new
[
$category
]
=
$msgs
;
}
}
if
(
isset
(
$current
[
$category
]))
{
$new
[
$category
]
=
array_diff
(
$msgs
,
$current
[
$category
]);
$obsoleted
=
array_diff
(
$current
[
$category
],
$msgs
);
}
else
{
$new
[
$category
]
=
$msgs
;
}
}
foreach
(
array_diff
(
array_keys
(
$current
),
array_keys
(
$messages
))
as
$category
)
{
$obsoleted
+=
$current
[
$category
];
}
foreach
(
array_diff
(
array_keys
(
$current
),
array_keys
(
$messages
))
as
$category
)
{
$obsoleted
+=
$current
[
$category
];
}
if
(
!
$removeUnused
)
{
foreach
(
$obsoleted
as
$pk
=>
$m
)
{
if
(
substr
(
$m
,
0
,
2
)
===
'@@'
&&
substr
(
$m
,
-
2
)
===
'@@'
)
{
unset
(
$obsoleted
[
$pk
]);
}
}
}
if
(
!
$removeUnused
)
{
foreach
(
$obsoleted
as
$pk
=>
$m
)
{
if
(
substr
(
$m
,
0
,
2
)
===
'@@'
&&
substr
(
$m
,
-
2
)
===
'@@'
)
{
unset
(
$obsoleted
[
$pk
]);
}
}
}
$obsoleted
=
array_keys
(
$obsoleted
);
echo
"Inserting new messages..."
;
$savedFlag
=
false
;
$obsoleted
=
array_keys
(
$obsoleted
);
echo
"Inserting new messages..."
;
$savedFlag
=
false
;
foreach
(
$new
as
$category
=>
$msgs
)
{
foreach
(
$msgs
as
$m
)
{
$savedFlag
=
true
;
foreach
(
$new
as
$category
=>
$msgs
)
{
foreach
(
$msgs
as
$m
)
{
$savedFlag
=
true
;
$dbConnection
->
createCommand
()
->
insert
(
$sourceMessageTable
,
[
'category'
=>
$category
,
'message'
=>
$m
])
->
execute
();
}
}
$dbConnection
->
createCommand
()
->
insert
(
$sourceMessageTable
,
[
'category'
=>
$category
,
'message'
=>
$m
])
->
execute
();
}
}
echo
$savedFlag
?
"saved.
\n
"
:
"nothing new...skipped.
\n
"
;
echo
$removeUnused
?
"Deleting obsoleted messages..."
:
"Updating obsoleted messages..."
;
echo
$savedFlag
?
"saved.
\n
"
:
"nothing new...skipped.
\n
"
;
echo
$removeUnused
?
"Deleting obsoleted messages..."
:
"Updating obsoleted messages..."
;
if
(
empty
(
$obsoleted
))
{
echo
"nothing obsoleted...skipped.
\n
"
;
}
else
{
if
(
$removeUnused
)
{
$dbConnection
->
createCommand
()
->
delete
(
$sourceMessageTable
,
[
'in'
,
'id'
,
$obsoleted
])
->
execute
();
echo
"deleted.
\n
"
;
}
else
{
$dbConnection
->
createCommand
()
->
update
(
$sourceMessageTable
,
[
'message'
=>
new
\yii\db\Expression
(
"CONCAT('@@',message,'@@')"
)],
[
'in'
,
'id'
,
$obsoleted
]
)
->
execute
();
echo
"updated.
\n
"
;
}
}
}
if
(
empty
(
$obsoleted
))
{
echo
"nothing obsoleted...skipped.
\n
"
;
}
else
{
if
(
$removeUnused
)
{
$dbConnection
->
createCommand
()
->
delete
(
$sourceMessageTable
,
[
'in'
,
'id'
,
$obsoleted
])
->
execute
();
echo
"deleted.
\n
"
;
}
else
{
$dbConnection
->
createCommand
()
->
update
(
$sourceMessageTable
,
[
'message'
=>
new
\yii\db\Expression
(
"CONCAT('@@',message,'@@')"
)],
[
'in'
,
'id'
,
$obsoleted
]
)
->
execute
();
echo
"updated.
\n
"
;
}
}
}
/**
* Extracts messages from a file
*
* @param string $fileName name of the file to extract messages from
* @param string $translator name of the function used to translate messages
* @return array
*/
protected
function
extractMessages
(
$fileName
,
$translator
)
{
echo
"Extracting messages from
$fileName
...
\n
"
;
$subject
=
file_get_contents
(
$fileName
);
$messages
=
[];
if
(
!
is_array
(
$translator
))
{
$translator
=
[
$translator
];
}
foreach
(
$translator
as
$currentTranslator
)
{
$n
=
preg_match_all
(
'/\b'
.
$currentTranslator
.
'\s*\(\s*(\'.*?(?<!\\\\)\'|".*?(?<!\\\\)")\s*,\s*(\'.*?(?<!\\\\)\'|".*?(?<!\\\\)")\s*[,\)]/s'
,
$subject
,
$matches
,
PREG_SET_ORDER
);
for
(
$i
=
0
;
$i
<
$n
;
++
$i
)
{
if
((
$pos
=
strpos
(
$matches
[
$i
][
1
],
'.'
))
!==
false
)
{
$category
=
substr
(
$matches
[
$i
][
1
],
$pos
+
1
,
-
1
);
}
else
{
$category
=
substr
(
$matches
[
$i
][
1
],
1
,
-
1
);
}
$message
=
$matches
[
$i
][
2
];
$messages
[
$category
][]
=
eval
(
"return
$message
;"
);
// use eval to eliminate quote escape
}
}
return
$messages
;
}
/**
* Writes messages into file
*
* @param array $messages
* @param string $fileName name of the file to write to
* @param boolean $overwrite if existing file should be overwritten without backup
* @param boolean $removeUnused if obsolete translations should be removed
* @param boolean $sort if translations should be sorted
* @param string $format output format
*/
protected
function
generateMessageFile
(
$messages
,
$fileName
,
$overwrite
,
$removeUnused
,
$sort
,
$format
)
{
echo
"Saving messages to
$fileName
..."
;
if
(
is_file
(
$fileName
))
{
if
(
$format
===
'po'
)
{
$translated
=
file_get_contents
(
$fileName
);
preg_match_all
(
'/(?<=msgid ").*(?="\n(#*)msgstr)/'
,
$translated
,
$keys
);
preg_match_all
(
'/(?<=msgstr ").*(?="\n\n)/'
,
$translated
,
$values
);
$translated
=
array_combine
(
$keys
[
0
],
$values
[
0
]);
}
else
{
$translated
=
require
(
$fileName
);
}
sort
(
$messages
);
ksort
(
$translated
);
if
(
array_keys
(
$translated
)
==
$messages
)
{
echo
"nothing new...skipped.
\n
"
;
return
;
}
$merged
=
[];
$untranslated
=
[];
foreach
(
$messages
as
$message
)
{
if
(
$format
===
'po'
)
{
$message
=
preg_replace
(
'/\"/'
,
'\"'
,
$message
);
}
if
(
array_key_exists
(
$message
,
$translated
)
&&
strlen
(
$translated
[
$message
])
>
0
)
{
$merged
[
$message
]
=
$translated
[
$message
];
}
else
{
$untranslated
[]
=
$message
;
}
}
ksort
(
$merged
);
sort
(
$untranslated
);
$todo
=
[];
foreach
(
$untranslated
as
$message
)
{
$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
.
'@@'
;
}
}
}
$merged
=
array_merge
(
$todo
,
$merged
);
if
(
$sort
)
{
ksort
(
$merged
);
}
if
(
false
===
$overwrite
)
{
$fileName
.=
'.merged'
;
}
if
(
$format
===
'po'
)
{
$out_str
=
''
;
foreach
(
$merged
as
$k
=>
$v
)
{
$k
=
preg_replace
(
'/(\")|(\\\")/'
,
"
\\\"
"
,
$k
);
$v
=
preg_replace
(
'/(\")|(\\\")/'
,
"
\\\"
"
,
$v
);
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
;
}
echo
"translation merged.
\n
"
;
}
else
{
if
(
$format
===
'po'
)
{
$merged
=
''
;
sort
(
$messages
);
foreach
(
$messages
as
$message
)
{
$message
=
preg_replace
(
'/(\")|(\\\")/'
,
'\\\"'
,
$message
);
$merged
.=
"msgid
\"
$message
\"\n
"
;
$merged
.=
"msgstr
\"\"\n
"
;
$merged
.=
"
\n
"
;
}
}
else
{
$merged
=
[];
foreach
(
$messages
as
$message
)
{
$merged
[
$message
]
=
''
;
}
ksort
(
$merged
);
}
echo
"saved.
\n
"
;
}
if
(
$format
===
'po'
)
{
$content
=
$merged
;
}
else
{
$array
=
str_replace
(
"
\r
"
,
''
,
var_export
(
$merged
,
true
));
$content
=
<<<EOD
/**
* Extracts messages from a file
*
* @param string $fileName name of the file to extract messages from
* @param string $translator name of the function used to translate messages
* @return array
*/
protected
function
extractMessages
(
$fileName
,
$translator
)
{
echo
"Extracting messages from
$fileName
...
\n
"
;
$subject
=
file_get_contents
(
$fileName
);
$messages
=
[];
if
(
!
is_array
(
$translator
))
{
$translator
=
[
$translator
];
}
foreach
(
$translator
as
$currentTranslator
)
{
$n
=
preg_match_all
(
'/\b'
.
$currentTranslator
.
'\s*\(\s*(\'.*?(?<!\\\\)\'|".*?(?<!\\\\)")\s*,\s*(\'.*?(?<!\\\\)\'|".*?(?<!\\\\)")\s*[,\)]/s'
,
$subject
,
$matches
,
PREG_SET_ORDER
);
for
(
$i
=
0
;
$i
<
$n
;
++
$i
)
{
if
((
$pos
=
strpos
(
$matches
[
$i
][
1
],
'.'
))
!==
false
)
{
$category
=
substr
(
$matches
[
$i
][
1
],
$pos
+
1
,
-
1
);
}
else
{
$category
=
substr
(
$matches
[
$i
][
1
],
1
,
-
1
);
}
$message
=
$matches
[
$i
][
2
];
$messages
[
$category
][]
=
eval
(
"return
$message
;"
);
// use eval to eliminate quote escape
}
}
return
$messages
;
}
/**
* Writes messages into file
*
* @param array $messages
* @param string $fileName name of the file to write to
* @param boolean $overwrite if existing file should be overwritten without backup
* @param boolean $removeUnused if obsolete translations should be removed
* @param boolean $sort if translations should be sorted
* @param string $format output format
*/
protected
function
generateMessageFile
(
$messages
,
$fileName
,
$overwrite
,
$removeUnused
,
$sort
,
$format
)
{
echo
"Saving messages to
$fileName
..."
;
if
(
is_file
(
$fileName
))
{
if
(
$format
===
'po'
){
$translated
=
file_get_contents
(
$fileName
);
preg_match_all
(
'/(?<=msgid ").*(?="\n(#*)msgstr)/'
,
$translated
,
$keys
);
preg_match_all
(
'/(?<=msgstr ").*(?="\n\n)/'
,
$translated
,
$values
);
$translated
=
array_combine
(
$keys
[
0
],
$values
[
0
]);
}
else
{
$translated
=
require
(
$fileName
);
}
sort
(
$messages
);
ksort
(
$translated
);
if
(
array_keys
(
$translated
)
==
$messages
)
{
echo
"nothing new...skipped.
\n
"
;
return
;
}
$merged
=
[];
$untranslated
=
[];
foreach
(
$messages
as
$message
)
{
if
(
$format
===
'po'
){
$message
=
preg_replace
(
'/\"/'
,
'\"'
,
$message
);
}
if
(
array_key_exists
(
$message
,
$translated
)
&&
strlen
(
$translated
[
$message
])
>
0
)
{
$merged
[
$message
]
=
$translated
[
$message
];
}
else
{
$untranslated
[]
=
$message
;
}
}
ksort
(
$merged
);
sort
(
$untranslated
);
$todo
=
[];
foreach
(
$untranslated
as
$message
)
{
$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
.
'@@'
;
}
}
}
$merged
=
array_merge
(
$todo
,
$merged
);
if
(
$sort
)
{
ksort
(
$merged
);
}
if
(
false
===
$overwrite
)
{
$fileName
.=
'.merged'
;
}
if
(
$format
===
'po'
){
$out_str
=
''
;
foreach
(
$merged
as
$k
=>
$v
){
$k
=
preg_replace
(
'/(\")|(\\\")/'
,
"
\\\"
"
,
$k
);
$v
=
preg_replace
(
'/(\")|(\\\")/'
,
"
\\\"
"
,
$v
);
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
;
}
echo
"translation merged.
\n
"
;
}
else
{
if
(
$format
===
'po'
)
{
$merged
=
''
;
sort
(
$messages
);
foreach
(
$messages
as
$message
)
{
$message
=
preg_replace
(
'/(\")|(\\\")/'
,
'\\\"'
,
$message
);
$merged
.=
"msgid
\"
$message
\"\n
"
;
$merged
.=
"msgstr
\"\"\n
"
;
$merged
.=
"
\n
"
;
}
}
else
{
$merged
=
[];
foreach
(
$messages
as
$message
)
{
$merged
[
$message
]
=
''
;
}
ksort
(
$merged
);
}
echo
"saved.
\n
"
;
}
if
(
$format
===
'po'
)
{
$content
=
$merged
;
}
else
{
$array
=
str_replace
(
"
\r
"
,
''
,
var_export
(
$merged
,
true
));
$content
=
<<<EOD
<?php
/**
* Message translations.
...
...
@@ -389,8 +370,7 @@ class MessageController extends Controller
return $array;
EOD;
}
file_put_contents
(
$fileName
,
$content
);
}
}
file_put_contents
(
$fileName
,
$content
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment