2012-02-14 1 views
3

내가 숫자를 포함하는 문자열을 번역에 사용 된 QObject::tr() 기능의 두 가지 형태가 있습니다QObject :: tr()의 pluralisation 오버로드가 % n을 로컬 번호로 변환합니까?

tr("There are %n foo(s)", 0, foo.size()); 
tr("%1: %2").arg(QLocale().toString(bar.size())).arg(bar.name()); 

당신이 현지화 을하고 싶은 경우를 제외하고 문자열에 숫자를 원하는 대부분의 경우에이 계정과 동일한 문자열에서 복수화. 물론 번역을 깨뜨릴 수는 있지만 문자열이 모든 언어의 같은 장소에서 중단되는지에 대한 추측을해야합니다 (대부분의 시간을 할 자격이없는 결정). ...

QString :: ARG()이 형식 문자열의 위치 지시자가 'L', 예를 포함 할 때 숫자를 포맷 디폴트 로케일을 사용

QLocale documentation 미국 "% L1"

... 두 번째 양식은 다음과 같이 다시 쓸 수 있도록 ...

tr("%L1: %2").arg(bar.size()).arg(bar.name()); 

... 그리고 이것은 당신이로 첫 번째 양식을 다시 쓸 수있는 제안 ...

tr("There are %Ln foo(s)", 0, foo.size()); 

이것은 컴파일되며 Linguist에서 복수형으로 표시되지만, 숫자를 지역화할지 여부를 아는 사람도 있습니까? 모든 문서에서 어느 쪽이라도 말한 것을 찾을 수 없습니다.

답변

7

예, 그것은 작동합니다

#include <QtCore> 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 

// QLocale::setDefault(QLocale(QLocale::German)); 
    QLocale::setDefault(QLocale(QLocale::English)); 

    QTranslator qtTranslator; 
// qtTranslator.load("foo_de", qApp->applicationDirPath()); 
    qtTranslator.load("foo_en", qApp->applicationDirPath()); 
    a.installTranslator(&qtTranslator); 

    int foo_count = 123456; 

    QString str1 = QObject::tr("There are %n foo(s)", "foo", foo_count); 
    QString str2 = QObject::tr("There are %Ln foo(s)", "foo", foo_count); 

    qDebug() << str1; 
    qDebug() << str2; 

    return a.exec(); 
} 

출력을 영어를 실행하는 경우 :

"There are 123456 foos" 
"There are 123,456 foos" 

출력 (거기 실제 독일어 스피커에 사과와 함께) 독일어를 실행하는 경우 :

"Es gibt 123456 fooen" 
"Es gibt 123.456 fooen" 

유일한 이상한 점은 다음과 같습니다.

  • 번역자는 %n뿐만 아니라 %Ln을 단수 및 복수 번역으로 유지해야합니다.
  • 언어학자는 "번역에 필요한 % n 개 위치 표시자가 없습니다."라는 복수형에 대해 불만을 제기합니다. 이것은 버그입니다.
1

(Qt 4.x) documentation here은 "복수형 처리"절의 제목 아래에 제시되어 있기 때문에 복수화되고 지역화됩니다.

나중에 Qt 5.x documentation here은 축 어적으로 보이는 것으로 보이는데, 이는 특히 QObject::tr(...)을 잘 설명하지 않은 것처럼 수치스러운 것처럼 보입니다.

+0

감사하지만, 나는 증거를 찾고 있습니다. –

+0

증거로 인정되는 유일한 것은 소스 코드이며 사용 가능합니다 : –

+0

또는 설명서가 없거나 테스트 케이스. –