xxx:0004
2022/10/07
Yuri Larin
-------
1) это обработка текстового файла. точнее, обработка N файлов.
Да, поиск файлов по маске "*.properties" в поддиректории "de" и
обработка их на основе данных из одноимённых файлов из поддиректории
"ru".
* что делает с каждым файлом?
Ищет строки вида "ключ = значение" и заменяет "значение" строкой из
файла с русскими ресурсами, если там "ключ" будет найден. Если в
русском файле не найдёт такой "ключ", то оставляет "значение" как
есть, из немецкого файла.
------
Вот простой скрипт, из последних, использовал для создания xpi-файла
русификации SeaMonkey 2.42.9 на основе немецкого варианта с хоббесов и
русификации предыдущей версии SeaMonkey:
/* Ищем и переносим строки из русской локали в немецкую */
if RxFuncQuery('SysLoadFuncs') then do
call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
call SysLoadFuncs
end
curdir = directory()
call SysFileTree curdir||'\de\*.properties', 'Files', 'FOS'
do i = 1 to Files.0
say i
call TransFile Files.i
end
say 'Done 'Files.0' files.'
exit
TransFile: procedure expose curdir
parse arg FileDE
FileRU = overlay('\ru\chrome\ru\locale\ru\', FileDE, length(curdir)+1)
OutFile = FileDE||"_ru"
if stream(FileRU,"C","Query Exists") <> "" then do
i = 1
do while lines(FileRU) > 0
RuName.0 = i
InStr = linein(FileRU)
parse value InStr with RuName.i '=' RuStr.i
RuName.i = translate(space(RuName.i))
RuStr.i = space(RuStr.i)
if RuStr.i \= '' then i = i + 1
end
say stream(FileRU,"C","CLOSE") 'RU=' RuName.0
do while lines(FileDE) > 0
InStr = linein(FileDE)
parse value InStr with DeName '=' DeStr
if DeStr \= '' then do
OutStr = ''
do i = 1 to RuName.0
if translate(space(DeName)) = RuName.i then do
if left(DeStr,1) = ' ' then RuStr.i = ' '||RuStr.i
OutStr = DeName||'='||RuStr.i
end
if translate(space(DeName)) = RuName.i then leave
end
if OutStr = '' then OutStr = InStr
end
else OutStr = InStr
call LineOut OutFile, OutStr
end
call LineOut OutFile
say stream(FileDE,"C","CLOSE") OutFile
end
return 0
|