2017-03-06 2 views
-1

을 .txt 파일 ICU4C로 파일와 .po :변환 내가 이런 <code>sed</code> 스크립트 파일와 .po에서 gettext에서 <a href="http://userguide.icu-project.org/locale/localizing#TOC-ICU4C" rel="nofollow noreferrer">ICU4C file</a>을 만들려고했습니다

/^#/ d       /* delete comments */ 
:a;/"$/{N;s/"\n"//;ba}   /* merge quoted lines in loop */ 
/^msgid /s/msgid (.*)/\1/   /* convert msgids */ 
s/msgstr "(.*)"/\{ "\1" }/  /* convert msgstrs */ 

이를 이미 꽤 잘 작동 (복수 형태를 무시)하지만 난 두 번 따옴표를 병합하지 않는 한이 지난 MSGID/msgstr 커플을 변환하지 않습니다 어떤 이유. 그러나 다른 것들에 대한 문법은 잘못되었습니다. 어떤 아이디어? sed를 사용하지 않습니다.

그 ICU 파일

genrb에서 허용하는 유일한 사람이다, 나는 PHP에서의 ResourceBundle를 사용하고 싶습니다.

+0

가 나는'N', 당신은 가능성이있어'패턴 공간에서 nmsgid' quoteline "\, 이후 '^'만 msgid' 패턴 공간의 시작 부분에'경우에 맞게 가고 있다고 생각합니다. '\ nmsgid'가 아닌'\ 0msgid'와 일치합니다. – stevesliva

답변

0

나는 쉘 스크립트를 통해 내 목표를 달성했습니다. 대략적인 아이디어는 다음과 같습니다.

#!/usr/bin/env bash 

# remove comments 
sed -r -e '/^#/ d' <de.po>de.icu.txt 
# merge strings 
sed -i de.icu.txt -r -e ':L;/"$/{N;s/"\n"//;b L}' 
# delete gettext header 
sed -i -e '1,2 d' de.icu.txt 
# convert into ICU format 
sed -i de.icu.txt -r -e ' 
# delete untranslated 
/msgid ".+"/{ 
    N 
    /msgstr ""/{ 
     N;s/msgid ".+"\nmsgstr ""\n// 
    } 
} 
# generate ICU txt 
/msgid /s/msgid (.*)/\1/ 
s/msgstr "(.*)"/\{ "\1" }/' 
sed -i -e '1i de {' -e '$ a\\n}' de.icu.txt 

아마도 더 좋은 방법 일 겁니다.

관련 문제