5. 현지화

QGIS 사용자 인터페이스를 여러 언어로 사용할 수 있습니다.

설정에 있는 전체 수준 옵션을 통해 운영 체제로부터 자동 탐지된 사용자 인터페이스 언어를 대체할 수 있습니다.

국가에 따라 달라지는 숫자, 화폐 및 날짜 표현도 설정에서 대체할 수 있습니다.

설정에 있는 또다른 옵션을 통해 숫자에 천 단위 구분자를 사용해야 하는지를 정의할 수 있습니다.

이 모든 기능들은 QLocale QT 클래스를 통해 구현되었습니다. 이 클래스는 매우 완성도 높은 숫자 및 날짜 유형 표현을 지원합니다.

이 시스템이 작동하려면, QGIS 사용자 인터페이스에 숫자값을 출력하는 경우 그리고 사용자 입력값을 정수형 또는 부동소수점형 변수로 변환하는 경우 몇 가지 규칙들을 조심스럽게 따라야 합니다.

5.1. 숫자형을 문자열로 변환하기

문자열이 화면에 출력되어 사용자가 볼 수 있는 경우, QString::number() 함수를 사용하지 마십시오. 이 함수는 로케일(locale) 옵션을 고려하지 않고 언제나 C 로케일만 사용하기 때문입니다.

또한 QString 문서 에서 설명한 대로 L 접미어를 사용하지 않는 이상 문자열 보간도 하지 마십시오.

그 대신 QLocale().toString() 을 사용하십시오.

예시:

const QString localizedNumber = QLocale().toString( 1234.56 );
// localizedNumber will be:  1,234.56 using english or "C" locale
//                           1.234,56 using italian locale
//                            1234.56 using english or "C" locale without thousands separator
//                            1234,56 using italian locale without thousands separator

경고

이 규칙에 대해 기억해둘 만한 예외는 (소수점 구분자로 마침표를 사용하고 천 단위 구분자를 사용하지 않는) C 숫자 표현을 기대하는 외부 응용 프로그램 또는 스크립트로 전송될 문자열을 생성하는 경우입니다. 이런 경우엔 반드시 QString::number() 을 사용해야만 합니다.

5.2. 사용자 입력 문자열을 숫자형으로 변환하기

사용자가 입력한 문자열을 숫자형으로 변환할 때 QVariant::toDouble(), QString::toDouble() 또는 QT 클래스에서 사용할 수 있는 다른 ::toDouble() 메소드들을 사용하지 마십시오. 이 메소드들은 로케일 설정을 무시하기 때문입니다. 정수 유형으로 변환하는 ::toInt() 또는 ::toLongLong() 메소드들도 마찬가지입니다.

이런 상황에서는 QLocale().toDouble() 또는 QLocale().toInt() 및 기타 QLocale() 변환 메소드를 사용할 수 있습니다.

좀 더 나은 대안은, 사용자가 입력한 부동소수점형 숫자값에 대해 사용해야 하는 다음 몇몇 QGIS API 제공 클래스들을 사용하는 것입니다:

QgsDoubleSpinBox 는 사용자 로케일 및 설정에 따라 숫자를 출력하고 QgsDoubleValidator 를 이용해서 사용자 입력값을 검증합니다.

검증자(validator) 클래스는 유연하기 때문에, 먼저 사용자 로케일에 대해 입력값을 확인한 다음 일치하지 않을 경우 C 로케일로 폴백(fall back)합니다.

일반 권장 사항은 모든 부동소수점형 입력/출력에 대해 가능한 모든 경우에 QgsDoubleSpinBox 클래스를 사용하는 것입니다. 이 클래스가 매우 잘 테스트되어 있고 입력값을 정확하게 검증하기 때문입니다. 아니면 (단순 QLineEdit 위젯 같은) 또다른 위젯으로부터 가져온 문자열에 대해 QgsDoubleValidator 클래스를 독립적으로 사용할 수도 있습니다.