Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F120836448
importgettext.sh
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
5 KB
Referenced Files
None
Subscribers
None
importgettext.sh
View Options
#!/usr/bin/env php
<?php
/*
+-----------------------------------------------------------------------+
|
bin/importgettext.sh
|
|
|
|
This file is part of the Roundcube Webmail client
|
|
Copyright
(
C
)
2011
, The Roundcube Dev Team
|
|
Licensed under the GNU General Public License
|
|
|
|
PURPOSE:
|
|
Import localizations from gettext PO format
|
+-----------------------------------------------------------------------+
|
Author: Thomas Bruederli <roundcube@gmail.com>
|
+-----------------------------------------------------------------------+
*/
define
(
'INSTALL_PATH'
, realpath
(
dirname
(
__FILE__
)
.
'/..'
)
.
'/'
)
;
require INSTALL_PATH.
'program/include/clisetup.php'
;
if
(
$argc
<
2
)
{
die
(
"Usage: "
. basename
(
$argv
[
0
])
.
" SRCDIR\n"
)
;
}
$srcdir
=
unslashify
(
realpath
(
$argv
[
1
]))
;
if
(
is_dir
(
$srcdir
))
{
$out
=
import_dir
(
$srcdir
)
;
}
else
if
(
is_file
(
$srcdir
))
{
$out
=
import_file
(
$srcdir
)
;
}
// write output files
foreach
(
$out
as
$outfn
=
>
$texts
)
{
$lang
=
preg_match
(
'!/([a-z]{2}(_[A-Z]{2})?)[./]!'
,
$outfn
,
$m
)
?
$m
[
1
]
:
''
;
$varname
=
strpos
(
$outfn
,
'messages.inc'
)
!
==
false
?
'messages'
:
'labels'
;
$header
=
<<<
EOF
<?php
/*
+-----------------------------------------------------------------------+
|
localization/%s/%-51s
|
|
|
|
Language file of the Roundcube Webmail client
|
|
Copyright
(
C
)
%s, The Roundcube Dev Team
|
|
Licensed under the GNU General Public License
|
|
|
+-----------------------------------------------------------------------+
|
Author: %-62s
|
+-----------------------------------------------------------------------+
*/
$%s
=
array
()
;
EOF
;
$author
=
preg_replace
(
'/\s*<Unknown>/i'
,
''
,
$texts
[
'_translator'
])
;
$output
=
sprintf
(
$header
,
$lang
,
$varname
.
'.inc'
, date
(
'Y'
)
,
$author
,
$varname
)
;
foreach
(
$texts
as
$label
=
>
$value
)
{
if
(
is_array
(
$value
))
{
var_dump
(
$outfn
,
$label
,
$value
)
;
exit
;
}
if
(
$label
[
0
]
!
=
'_'
&&
strlen
(
$value
))
$output
.
=
sprintf
(
"\$%s['%s'] = '%s';\n"
,
$varname
,
$label
, strtr
(
addcslashes
(
$value
,
"'"
)
, array
(
"\r"
=
>
''
,
"\n"
=
>
'\n'
)))
;
}
$output
.
=
"\n"
;
$dir
=
dirname
(
$outfn
)
;
@mkdir
(
$dir
,
0755
,
true
)
;
if
(
file_put_contents
(
$outfn
,
$output
))
echo
"->
$outfn
\n"
;
}
/**
* Convert all .po files
in
the given src directory
*/
function
import_dir
(
$indir
)
{
$out
=
array
()
;
foreach
(
glob
(
$indir
.
'/*.po'
)
as
$fn
)
{
$out
=
array_merge_recursive
(
$out
, import_file
(
$fn
))
;
}
return
$out
;
}
/**
* Convert the given .po file into a Roundcube localization array
*/
function
import_file
(
$fn
)
{
$out
=
array
()
;
$lines
=
file
(
$fn
)
;
$language
=
''
;
$translator
=
''
;
// get language code from file name
if
(
preg_match
(
'/-([a-z_]+).po$/i'
,
$fn
,
$m
))
$language
=
expand_langcode
(
$m
[
1
])
;
$is_header
=
true
;
$msgid
=
null
;
$msgstr
=
''
;
$dests
=
array
()
;
foreach
(
$lines
as
$i
=
>
$line
)
{
$line
=
trim
(
$line
)
;
// parse header
if
(
$is_header
&&
$line
[
0
]
==
'"'
)
{
list
(
$key
,
$val
)
=
explode
(
": "
, preg_replace
(
'/\\\n$/'
,
''
, trim
(
$line
,
'"'
))
,
2
)
;
switch
(
strtolower
(
$key
))
{
case
'language'
:
$language
=
expand_langcode
(
$val
)
;
break
;
case
'last-translator'
:
$translator
=
$val
;
break
;
}
}
// empty line
if
(
$line
==
''
)
{
if
(
$msgid
&&
$dests
)
{
foreach
(
$dests
as
$dest
)
{
list
(
$file
,
$label
)
=
explode
(
':'
,
$dest
)
;
$out
[
$file
][
$label
]
=
$msgstr
;
$out
[
$file
][
'_translator'
]
=
$translator
;
}
}
$msgid
=
null
;
$msgstr
=
''
;
$dests
=
array
()
;
}
// meta line
if
(
$line
[
0
]
==
'#'
)
{
$value
=
trim
(
substr
(
$line
,
2
))
;
if
(
$line
[
1
]
==
':'
)
$dests
[]
=
str_replace
(
'en_US'
,
$language
,
$value
)
;
}
else
if
(
strpos
(
$line
,
'msgid'
)
===
0
)
{
$msgid
=
gettext_decode
(
substr
(
$line
,
6
))
;
if
(
!empty
(
$msgid
))
$is_header
=
false
;
}
else
if
(
strpos
(
$line
,
'msgstr'
)
===
0
)
{
$msgstr
=
gettext_decode
(
substr
(
$line
,
7
))
;
}
else
if
(
$msgid
&&
$line
[
0
]
==
'"'
)
{
$msgstr
.
=
gettext_decode
(
$line
)
;
}
else
if
(
$msgid
!
==
null
&&
$line
[
0
]
==
'"'
)
{
$msgid
.
=
gettext_decode
(
$line
)
;
}
}
if
(
$msgid
&&
$dests
)
{
foreach
(
$dests
as
$dest
)
{
list
(
$file
,
$label
)
=
explode
(
':'
,
$dest
)
;
$out
[
$file
][
$label
]
=
$msgstr
;
$out
[
$file
][
'_translator'
]
=
$translator
;
}
}
return
$language
?
$out
: array
()
;
}
function
gettext_decode
(
$str
)
{
return
stripslashes
(
trim
(
$str
,
'"'
))
;
}
/**
* Translate two-chars language codes to our internally used language identifiers
*/
function
expand_langcode
(
$lang
)
{
static
$rcube_language_aliases
,
$rcube_languages
;
if
(
!
$rcube_language_aliases
)
include
(
INSTALL_PATH .
'program/localization/index.inc'
)
;
if
(
$rcube_language_aliases
[
$lang
])
return
$rcube_language_aliases
[
$lang
]
;
else
if
(
strlen
(
$lang
)
==
2
&&
!isset
(
$rcube_languages
[
$lang
]))
return
strtolower
(
$lang
)
.
'_'
. strtoupper
(
$lang
)
;
else
return
$lang
;
}
?>
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Apr 24, 1:30 PM (13 h, 6 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18216933
Default Alt Text
importgettext.sh (5 KB)
Attached To
Mode
R113 roundcubemail
Attached
Detach File
Event Timeline