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
클래스를 독립적으로 사용할 수도 있습니다.