mirror of
https://gitlab.com/lunovox/e-urn.git
synced 2025-09-22 02:26:55 -04:00
Novo README.md
This commit is contained in:
parent
9e07ee1525
commit
1d61ad20e8
4 changed files with 261 additions and 32 deletions
105
locale/README.md
Normal file
105
locale/README.md
Normal file
|
@ -0,0 +1,105 @@
|
|||
# TRANSLATES
|
||||
|
||||
Update: 2023-03-19
|
||||
version of Readme: 1.5
|
||||
|
||||
-----
|
||||
|
||||
To generate file [template.pot], did use terminal command:
|
||||
|
||||
```bash
|
||||
cd soundchat
|
||||
xgettext -n *.lua -L Lua --force-po --keyword=modSoundChat.translate --from-code=UTF-8 -o ./locale/template.pot
|
||||
|
||||
```
|
||||
-----
|
||||
|
||||
### Generate file '.po' per [template.pot] file:
|
||||
|
||||
To translate [template.pot] to your language in '.po' file:
|
||||
|
||||
* Locales used: ca;cs;da;de;dv;eo;es;et;fr;hu;id;it;ja;jbo;kn;lt;ms;nb;nl;pl;pt;pt_BR;ro;ru;sl;sr_Cyrl;sv;sw;tr;uk
|
||||
|
||||
Sintaxe:
|
||||
|
||||
```bash
|
||||
$ msginit --no-translator --no-wrap --locale=$LANG.UTF-8 --output-file=$LANG.po --input=$POT
|
||||
```
|
||||
|
||||
* Example to brazilian portuguese language: [locale/pt_BR.po]
|
||||
|
||||
Example:
|
||||
|
||||
```bash
|
||||
msginit --no-translator --no-wrap --locale=pt_BR.UTF-8 --output-file=./locale/pt_BR.po --input=./locale/template.pot
|
||||
```
|
||||
|
||||
-----
|
||||
|
||||
### To Update ".po" file from a [template.pot] file.
|
||||
|
||||
Sintaxe:
|
||||
|
||||
```bash
|
||||
$ msgmerge --sort-output --no-wrap --update --backup=off $LANG.po $POT
|
||||
```
|
||||
|
||||
* Example to brazilian portuguese language: [locale/pt_BR.po]
|
||||
|
||||
Example:
|
||||
|
||||
```bash
|
||||
msgmerge --sort-output --no-wrap --update --backup=off ./locale/pt_BR.po ./locale/template.pot
|
||||
```
|
||||
|
||||
-----
|
||||
|
||||
To translate [template.pot] to your language use GUI App [PoEdit].:
|
||||
|
||||
### Install the PoEdit:
|
||||
|
||||
```bash
|
||||
sudo apt-get install poedit
|
||||
```
|
||||
|
||||
|
||||
-----
|
||||
|
||||
### Convert '.po' file to '.tr' file.
|
||||
|
||||
Translate Sample: [locale/soundchat.pt_BR.tr]
|
||||
```bash
|
||||
$ cd ./locale/
|
||||
$ lua5.3 po2tr.lua "soundchat" "pt_BR.po"
|
||||
$ mv "pt_BR.tr" "soundchat.pt_BR.tr"
|
||||
$ cat soundchat.pt_BR.tr | less
|
||||
```
|
||||
|
||||
-----
|
||||
|
||||
|
||||
### Exemple of enable the brazilian portuguese language in minetest:
|
||||
|
||||
Translate Sample: `locale/soundchat.pt_BR.tr`
|
||||
|
||||
To enable the translate to brazilian portuguese language, write "language = pt_BR" in file "minetest.conf". Or write the command ```/set -n language pt_BR``` in game chat, and run again the minetest game.
|
||||
|
||||
-----
|
||||
|
||||
### PLEASE SUBMIT YOUR NEW TRANSLATION TO THE DEVELOPERS OF THIS MOD THROUGH THE GIT PROJECT BELOW:
|
||||
|
||||
* `https://gitlab.com/lunovox/soundchat`
|
||||
|
||||
----
|
||||
|
||||
> See more:
|
||||
* https://forum.minetest.net/viewtopic.php?f=47&t=21974
|
||||
* https://github.com/minetest/minetest/issues/8158
|
||||
* https://gist.githubusercontent.com/mamchenkov/3690981/raw/8ebd48c2af20c893c164e8d5245d9450ad682104/update_translations.sh
|
||||
* https://gitlab.com/4w/xtend/-/blob/master/xtend_default/tools/convert_po_file_to_tr_file/convert_po_file_to_tr_file.lua
|
||||
|
||||
[locale/pt_BR.po]:https://gitlab.com/lunovox/soundchat/-/raw/master/locale/pt_BR.po
|
||||
[locale/soundchat.pt_BR.tr]:https://gitlab.com/lunovox/soundchat/-/raw/master/locale/soundchat.pt_BR.tr
|
||||
[PoEdit]:https://poedit.net
|
||||
[template.pot]:https://gitlab.com/lunovox/soundchat/-/raw/master/locale/template.pot
|
||||
|
116
locale/po2tr.lua
Normal file
116
locale/po2tr.lua
Normal file
|
@ -0,0 +1,116 @@
|
|||
#!/usr/bin/env luajit
|
||||
|
||||
-- Convert regular Gettext PO files to Minetest-specific TR files. If there is
|
||||
-- already a TR file with the same name of the PO file except the file suffix
|
||||
-- bneing .tr (or .TR) instead of .po (or .PO) then THIS FILE WILL BE
|
||||
-- OVERWRITTEN WITHOUT INFORMATION OR A WAY TO RECOVER THE PREVIOUS FILE!
|
||||
--
|
||||
--
|
||||
-- ▄██▄
|
||||
-- ▀███
|
||||
-- █
|
||||
-- ▄▄▄▄▄ █
|
||||
-- ▀▄ ▀▄ █ BACKUP
|
||||
-- ▄▀▀▀▄ █▄▄▄▄█▄▄ ▄▀▀▀▄ █
|
||||
-- █ ▄ █ █ ▄ █ █
|
||||
-- ▀▄ ▄▀ ▀▄ ▄▀ █
|
||||
-- █▀▀▀ ▀▀▀ █ █
|
||||
-- █ █ █ ALL
|
||||
-- ▄▀▄▄▀▄ █ ▄█▀█▀█▀█▀█▀█▄ █ █
|
||||
-- █▒▒▒▒█ █ █████████████▄ █ █
|
||||
-- █▒▒▒▒█ █ ██████████████▄ █ █
|
||||
-- █▒▒▒▒█ █ ██████████████▄ █ █
|
||||
-- █▒▒▒▒█ █ ██████████████ █ █
|
||||
-- █▒▒▒▒█ █ ██████████████▀ █ █ THE
|
||||
-- █▒▒▒▒█ ██ ██████████████ █ █
|
||||
-- ▀████▀ ██▀█ █████████████▀ █▄█
|
||||
-- ██ ██ ▀█ █▄█▄█▄█▄█▄█▀ ▄█▀
|
||||
-- ██ ██ ▀█ ▄▀▓█
|
||||
-- ██ ██ ▀█▀▄▄▄▄▄▄▄▄▄▀▀▓▓▓█
|
||||
-- ████ █▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█
|
||||
-- ███ █▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█ THINGS
|
||||
-- ██ █▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█
|
||||
-- ██ █▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█
|
||||
-- ██ ▐█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█
|
||||
-- ██ ▐█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█
|
||||
-- ██ ▐█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█▌ !!!
|
||||
-- ██ ▐█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█▌
|
||||
-- ██ ▐█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█▌
|
||||
-- ██ ▐█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█▌
|
||||
--
|
||||
--
|
||||
-- The syntax of TR files according to the introducing forum post is:
|
||||
--
|
||||
-- # textdomain: namespace
|
||||
-- original 1 = translation 1
|
||||
-- original 2 = translation 2
|
||||
-- original 3 = tralslation 3
|
||||
-- original N = translation N
|
||||
--
|
||||
-- Where namespace should be the name of the mod. Following strings have to be
|
||||
-- escaped using @.
|
||||
--
|
||||
-- String | Escape
|
||||
-- -------+--------
|
||||
-- `@` |`@@`
|
||||
-- `=` |`@=`
|
||||
-- `\n` |`@\n`
|
||||
--
|
||||
-- See https://forum.minetest.net/viewtopic.php?t=18349 for details.
|
||||
|
||||
|
||||
-- Preparation
|
||||
if arg[1] == nil or arg[2] == nil then
|
||||
print('Provide the namesspace as first parameter')
|
||||
print('Provide the path to the source PO file as second parameter')
|
||||
print('Example: '..arg[0]..' mymod path/to/my/source.po')
|
||||
return
|
||||
end
|
||||
local SEP = package.path:match('(%p)%?%.') or '/' -- wonky but hey ... :)
|
||||
|
||||
|
||||
-- Assign parameters to local variables
|
||||
local namespace = arg[1]
|
||||
local po_file = arg[2]
|
||||
local tr_file = arg[2]:gsub('po$', 'tr'):gsub('PO$', 'TR')
|
||||
|
||||
|
||||
-- Get the translations through crude plaintext file parsing
|
||||
local file_contents = {}
|
||||
local translations = {}
|
||||
|
||||
local po_file_handle = io.open(po_file, 'rb')
|
||||
if po_file_handle == nil then print('No base file found') return end
|
||||
|
||||
for line in po_file_handle:lines() do
|
||||
if line:match('^msgid') or line:match('^msgstr') then
|
||||
table.insert(file_contents, line)
|
||||
end
|
||||
end
|
||||
|
||||
local escape_string = function (s)
|
||||
s = s:gsub('@([^%d])', '@@%1') -- All @ not followed by a number become @@
|
||||
s = s:gsub('([^@]@)$', '%1@') -- An @ at the end of the string become @@
|
||||
s = s:gsub('=', '@=') -- All = become @=
|
||||
return s
|
||||
end
|
||||
|
||||
for number,line_content in pairs(file_contents) do
|
||||
if line_content:match('^msgid') then
|
||||
local o = line_content:gsub('^msgid "(.+)"$', '%1')
|
||||
local t = file_contents[number + 1]:gsub('^msgstr "(.+)"$', '%1')
|
||||
if o ~= 'msgid = ""' and t ~= 'msgstr ""' then
|
||||
table.insert(translations, escape_string(o)..'='..escape_string(t))
|
||||
end
|
||||
end
|
||||
end
|
||||
print(number)
|
||||
po_file_handle:close()
|
||||
|
||||
|
||||
-- Write translation to file
|
||||
local tr_file_handle = io.open(tr_file, 'w+')
|
||||
if tr_file_handle == nil then print('Could not open target file') return end
|
||||
tr_file_handle:write('# textdomain: '..namespace, "\n")
|
||||
for _,line in pairs(translations) do tr_file_handle:write(line, "\n") end
|
||||
tr_file_handle:close()
|
Loading…
Add table
Add a link
Reference in a new issue