복수 , 성별 , 약어 숫자 , 서수 번호 , 런타임 언어 변경 , 중첩 및 자리 검사 등.
용매는 .NET, Angular 및 Delphi 용 국제화 (I18N) API 모음을 구현했습니다. 각 API는 플랫폼의 표준 i18N API에 추가 기능을 추가합니다 (예 : 문법 번호, 문법 성별, 약어 및 서수 번호를 지원합니다. 라이브러리에는 API가 포함되어있어 응용 프로그램의 런타임 언어 스위치를 수행하거나 런타임에서 초기 언어를 선택합니다. 라이브러리에는 런타임이 잘린 컨트롤과 같은 문제에 대해 사용자 인터페이스를 확인하는 API도 포함되어 있습니다. 마지막으로 델파이 라이브러리에는 Firemonkey를위한 적절한 현지화 자원이 포함되어 있습니다.
각 API는 100% 원시 API입니다. 이는 전체 소스 코드가 포함되어 있으며 추가 파일이 필요하지 않음을 의미합니다. .NET API에는 C# 코드 만 포함되며 다른 라이브러리 또는 데이터 파일이 필요하지 않습니다. 마찬가지로 Angular API에는 TypeScript 코드 만 포함되어 있으며 Delphi API에는 Delphi 코드 만 포함되어 있습니다. 코드가 사용하는 규칙은 CLDR에서 API 소스 코드의 일부인 소스 코드 파일로 추출되었습니다. ICU 라이브러리 또는 CLDR XML 파일이 필요하지 않지만 논리 및 규칙을 포함한 모든 것은 응용 프로그램 파일에 컴파일됩니다.
대부분의 리소스 형식 (예 : .resx in .NET, .Resx, Java의 .Properties 및 Delphi의 리소스 문자열)은 일반 문자열 만 지원합니다. 문법 번호와 성별에는 단일 문자열에 대한 몇 가지 언어 의존 변형이있는 구조 데이터가 필요합니다. 예를 들어, 영어로 "나는 n 차가있다"는 두 가지 변형이 필요합니다.
| 문법 번호 | .그물 | 델파이와 자바 |
|---|---|---|
| 단수형 | 나는 {0} 자동차가 있습니다 | 나는 %d 차량이있다 |
| 복수 | {0} 자동차가 있습니다 | 나는 %d 차량이 있습니다 |
Android 및 Angular와 같은 일부 플랫폼에는 복수에 대한 지원이 내장되어 있으므로 여러 패턴을 보유 할 특수 리소스 형식도 있습니다. 그러나 .NET, Delphi 및 Java에는 그러한 리소스 형식이 없습니다. 이 라이브러리는 ICU 메시지 형식을 사용하여 모든 관련 패턴을 표준 리소스 문자열에 저장합니다. 구문은 다음과 같습니다.
{parameter, kind, form1 {pattern1}[ form2 {pattern2}]...[ formN {patternN}]
어디
kind 는 plural , gender 또는 select
form 문법 번호 양식 또는 문법 성별 형태에 대한 코드입니다.
다음 표에는 가능한 양식이 포함되어 있습니다.
| 형태 | 사용 | 설명 |
|---|---|---|
| 영 | 문법 번호 | 알라 |
| 하나 | 문법 번호 | 단수형 |
| 둘 | 문법 번호 | 이중 |
| 약간의 | 문법 번호 | Paucal, 시험 또는 이와 유사한 |
| 많은 | 문법 번호 | 더 큰 부과 또는 이와 유사합니다 |
| 다른 | 문법 번호 문법적 성별 | 복수 중립적 |
| 남성 | 문법적 성별 | 남성 |
| 여성 | 문법적 성별 | 여성 |
| 중립적 | 문법적 성별 | 중립적. 다른 것과 동일합니다. |
위 형식 외에도 문법 번호로 작업자를 사용할 수 있습니다. 운영자는 다음과 같습니다.
| 형태 | 예 | 설명 |
|---|---|---|
| = n | = 1 | 동일한 |
| ~ n | ~ 12 | 약 |
| > n | > 5 | 더 큽니다 |
| <n | <10 | 보다 적습니다 |
| > = n | > = 5 | 더 크거나 동일합니다 |
| <= n | <= 10 | 덜 또는 동일합니다 |
| n..m | 2..6 | 범위 |
.NET 용 자동차 샘플은 다음과 같습니다.
{plural, one {I have {0} car} other {I have {0} cars}}
핀란드 버전이 될 것입니다
{plural, one {Minulla on {0} auto} other {Minulla on {0} autoa}}
일본어 버전이 될 것입니다
{plural, other {{0}車持っています}}
일본어에는 보편적 인 형태가 하나 뿐이므로 문자열에는 다른 패턴 만 포함되어 있습니다.
패턴은 다중 패턴 구문 전후에 텍스트를 포함 할 수 있습니다. 다음 예제에는 "I Amber"가 포함되어 있습니다. 다중 패턴 후.
I have {plural, one {{0} car} other {{0} cars}}.
델파이에게는 샘플이 될 것입니다
I have {plural, one {%d car} other {%d cars}}.
패턴에 버팀대가 필요한 경우 ({또는}) 를 사용하여 탈출해야합니다. 문자도 탈출해야합니다. 예를 들어 "나는 스키를 좋아한다 {alpine s} 그러나 나는 {0} 스키 쌍만있다" 는 것입니다.
other {I like skiing {alpine\s} however, I only have {0} pairs of skis}
SamplesDelphiVCLPatterns , SamplesDelphiFMXPatterns , SamplesWindowsFormsPatterns and SamplesWPFPatterns Directories의 샘플을 참조하십시오.
클래스는 또한 레거시 멀티 패턴 형식을 지원합니다
one;I have {0} car;other;I have {0} cars
그러나이 레거시 형식에 대한 지원은 더 이상 사용되지 않았습니다. ICU 메시지 형식은 권장 형식입니다.
API는 여러 복수/성별 활성화 자리 표시자를 지원합니다. 이 경우 문자열을 각각 하나의 자리 표시자를 포함하는 부분으로 나눈 다음 세그먼트를 논리적 문장으로 묶습니다. next 양식을 사용하여 새 부분을 시작하십시오. 예를 들어, "나는 C 자동차와 S 스키가 있습니다"라고 말하고 싶다면 두 부분이 포함 된 다음 문자열을 만들 것입니다. 하나는 자동차와 스키 용입니다. 각 부분에는 단수와 복수형의 두 가지 패턴이 포함되어 있습니다.
I have {plural, one {{0} car} other {{0} cars}} and {plural, one {{0} ski} other {{0} skis}}.
이 문자열에는 두 가지 다중 패턴의 자동차와 스키가 포함되어 있습니다.
I have {plural, one {%d car} other {%d cars}} and {plural, one {%d ski} other {%d skis}}.
SamplesDelphiVCLPatternsMulti , SamplesDelphiFMXPatternsMulti , SamplesWindowsFormsPatternsMulti and SamplesWPFPatternsMulti Samples를 참조하십시오.
화면에 많은 숫자를 표시 해야하는 경우 사용자가 숫자의 크기를 쉽게 이해하기가 어려울 수 있습니다. 예를 들어, 숫자 144563217이 있으면 어떻게 표시 해야하는지 사용자의 로케일 규칙에 따라 포맷 할 수 있습니다. 예를 들어, 미국에서는 14,456,217입니다. 이것은 형식화되지 않은 숫자보다 이해하기 쉽지만 여전히 문제가 거의 없습니다. 첫 번째는 숫자의 크기를 이해하려면 약간의 노력이 필요하다는 것입니다. 둘째, 공간이 많이 필요합니다. 한 가지 해결책은 14,000,000처럼 반올림하는 것입니다. 이해하기가 더 쉽습니다. 이해하기 쉽게하기 위해 14m처럼 약칭 할 수도 있습니다. 약식 형태가 점점 더 인기를 얻고 있습니다. 불행히도, 각 언어는 약식하는 방법입니다. 대부분의 언어는 3 자리 숫자입니다. 예를 들어, 영어 : K, M, G, T 등. 그러나 일부 아시아 언어는 4 자리 숫자입니다. 예를 들어 일본어 : 万 (10,000), 億 (100,000,000) 등
CLDR에는 숫자를 축약하는 규칙이 포함되어 있습니다. 약어 번호 API는 해당 규칙을 사용하여 숫자 (정수 또는 플로트)를 문자열로 포맷합니다. 결과는 1400 만, 14m만큼 짧거나 14m와 같은 통화 문자열 일 수 있습니다.
CLDR에는 숫자에서 서수 숫자를 만드는 방법에 대한 정보가 포함되어 있지 않습니다. 나는 다양한 출처에서 규칙을 수집하고 있습니다. 적절한 규칙이없는 많은 언어가 있습니다. 원어민의 도움에 감사드립니다.
Angular와 같은 일부 플랫폼에는 런타임 번역로드가 없습니다. 이 API는 그것을 구현합니다. 이 API를 사용하면 이제 하나의 컴파일, 하나의 배포 및 모든 언어를 제공하는 URL 하나를 만들 수 있습니다.
런타임 언어 스위치는 응용 프로그램이 런타임에 사용자 인터페이스의 언어를 변경할 수있는 기능입니다. 이 라이브러리에는 코드가 포함되어 있습니다. 언어 변경은 양식이나 대화 상자의 재 장전이없는 방식으로 구현되며 응용 프로그램의 현재 상태는 변경되지 않았습니다.
런타임 언어 스위치 API는 Delphi VCL, Delphi Firemonkey, .NET Windows Forms 및 .NET WPF 용입니다.
우리가 문자열을 다른 언어로 번역 할 때, 번역이 원래 문자열보다 길어질 가능성이 항상 있습니다. 영어가 독일어 또는 핀란드와 같이 영어가 더 컴팩트 한 언어이기 때문에 원래 언어가 영어 인 경우 특히 그렇습니다. 번역 된 문자열이 더 길어지면 문자열의 일부가 잘라내거나 두 개 이상의 문자열이 겹치게 될 위험이 있습니다. 이와 같은 상황은 찾기가 어렵습니다. 사용자 인터페이스 검사기 API가 도움이됩니다. 코드에 임시 링크를 링크하는 것은 API이며, 응용 프로그램을 실행할 때 자르기가 잘린 스크린 샷이있는 보고서 파일을 작성하고 명확한 색상으로 표시됩니다. 잘림 또는 겹치는 곳이 어디에서 발생하는지 즉시 확인할 수 있습니다.
사용자 인터페이스 검사기 API는 Delphi VCL, Delphi Firemonkey, .NET Windows Forms 및 .NET WPF 용입니다.
LibraryNET 에는 .NET API가 포함되어 있습니다. LibraryNETStandard 에는 문법 번호, 문법 성별, 약식 숫자 및 서수 숫자에 대한 API가 포함 된 .NET 표준 라이브러리가 포함되어 있습니다. 그것을 컴파일하고 그것을 솔루션에 추가하고 마지막으로 프로젝트 참조에 라이브러리를 추가하십시오. 라이브러리의 NO UI 부분은 .NET 표준이므로 Windows Forms, WPF, ASP.NET, .NET Core 및 Xamarin과 함께 작동합니다. .NET 2.0으로 시작하는 .NET 버전을 사용하여 컴파일 할 수도 있습니다.
Nuget을 통해 API를 얻을 수 있습니다.
Install-Package Soluling
현재 Windows 양식 및 WPF 용 샘플이 있습니다. 곧 ASP.NET 및 ASP.NET Core 샘플을 추가 할 것입니다.
LibraryAngular 에는 각도 API가 포함되어 있습니다. API에는 각도 9 이상이 필요합니다. 사용하는 가장 쉬운 방법은 NPM을 통하는 것입니다.
npm install @soluling/angular이 API에 대해 자세히 알아 보려면 문서를 읽으십시오.
LibraryDelphi 에는 Delphi API가 포함되어 있습니다. 응용 프로그램에 포함시키는 가장 쉬운 방법은 프로젝트의 검색 경로로의 경로를 추가하는 것입니다. 도서관은 델파이 7 이상을 지원합니다. 그러나 모든 기능을 얻으려면 Delphi XE2 이상이 필요합니다.
Firemonkey에는 적절한 현지화 자원이 없습니다. iOS 또는 Android와 같은 대상 모바일 플랫폼 인 경우 리소스 DLL을 사용할 수 없습니다. 현지 리소스를 포함한 모든 것은 기본 응용 프로그램 파일에 있어야합니다. 이 라이브러리에는 Firemonkey 현지화 솔루션이 포함되어 있습니다. 특수 .ntres 파일 형식을 사용하여 양식 ( .fmx ), 문자열, 이미지 및 오디오 리소스를 단일 .ntres 파일로 저장합니다. 이 파일에는 지원하려는 모든 언어의 리소스가 포함되어 있습니다. 마지막으로, .ntres 파일을 응용 프로그램에 사용자 정의 리소스로 추가하고 라이브러리의 API 호출을 사용하여 리소스에 액세스하십시오. 다국어를 만들기 위해 기존 응용 프로그램을 많이 수정할 필요는 없습니다. 유일한 예외는 자원 문자열입니다. 당신은 사용할 수 없습니다. 하드 코딩 된 문자열이 있고 현지화하려면 _t 함수로 싸십시오.
procedure TForm1.UpdateStrings ;
begin
Label1.Text := _T( ' Hello world ' );
end ;기존 자원 문자열이 이미있는 경우 제거하고 _t 함수를 사용하십시오. 또한 각 양식에 대해 _t를 호출해야합니다.
procedure TForm1.FormCreate (Sender: TObject);
begin
_T(Self);
end ; SamplesDelphiFMXPatternsSimple 샘플을 먼저 참조하십시오.
VCL 애플리케이션에서도 .ntres 리소스를 사용할 수 있지만 자원 문자열 및 리소스 DLL 또는 로컬화 된 EXE 파일과 함께 표준 VCL 로컬라이즈 방법을 사용하는 것이 좋습니다.
C ++ 빌더는 공식적으로 지원되지 않습니다. 이 모든 코드는 C ++ Builder와 함께 작동하지만 테스트되지 않았습니다.
우리는 몇 가지 이유로 .NET, Angular 및 Delphi를 첫 번째 플랫폼으로 선택했습니다. 첫째, 우리는 Angular, C# 및 Delphi를 좋아한다는 것입니다. 둘째, Delphi와 .NET는 모두 복수 및 성별과 같은 여러 I18N API에 대한 지원이 부족합니다. 세 번째는 Delphi와 .NET 모두 런타임 언어 스위치의 혜택을받을 수 있다는 것입니다. 넷째, 델파이는 크기가 중요한 모바일 애플리케이션을 만드는 데 사용된다는 것입니다. 다섯 번째는 C# + .NET 코어가 밝은 미래를 가질 것이라고 생각합니다.
우리는 TypeScript에 대한 유사한 클래스를 구현하려는 것을 고려하고 있습니다 (JavaScript는 프로세스에 나옵니다). 그러나 TypeScript는 대부분 지원 복수 및 성별을 가진 각도와 함께 사용됩니다. Angular의 런타임 번역로드를 구현했습니다. 아마도 TypeScript에 대한 약식 숫자 API 만 구현할 것입니다.
Java에 대한 유사한 라이브러리를 구현할 수 있습니다. Java 용 ICU 구현이 이미 있으므로 서버 측에서 Java를 사용하는 경우 사용할 수 있습니다. 클라이언트 측에서 Java를 사용하는 경우 대부분 Android 일 가능성이 높으며 복수는 지원하지만 성별은 지원하지 않습니다. 우리는 여전히 Java 지원을 고려하고 있습니다. 유용한 지 알려주십시오.
BinCldrToCode.exe 는 cldr xml 파일에서 c# 및 delphi 파일로 규칙을 추출하는 도구입니다. 라이브러리에는 이미 모든 CLDR 언어의 규칙이 포함 된 추출 된 파일이 포함되어 있기 때문에 일반적으로 사용할 필요가 없습니다. 그러나 일부 언어 만 포함 된 규칙 파일을 만들려면 CldrToCode.exe 사용하여 자신의 규칙 파일을 만들 수 있습니다. 예를 들어, 영어, 독일어 및 프랑스어 사용 만 포함 된 규칙 파일을 만들려면 다음과 같습니다.
CldrToCode.exe -lang:en;de;fr D:CLDRcommon
이것은 NtPluralData.pas , NtNumberData.pas , PluralData.cs 및 NumberData.cs 생성합니다.
거의 노력하지 않고 Cldrtocode.exe를 만들어 Java, TypeScript 및 Python 파일도 만들 수 있습니다.
이 repo에는 국제화 및 현지화 샘플 응용 프로그램, 파일 및 데이터베이스도 포함되어 있습니다. 용매에는 여러 주요 프로그래밍 플랫폼 및 파일 형식을 포함하는 수십 개의 샘플이 있습니다. 샘플은 최신 상태이며 최근 버전의 프로그래밍 언어를 사용하고 있습니다.
용매에는 다음 플랫폼에 대한 샘플이 포함되어 있습니다.
여러 패턴 문자열을 사용하여 애플리케이션을 현지화하려는 경우 문법 번호 및 문법 성별을 지원하는 현지화 도구를 사용하는 것이 좋습니다. 용매는 여러 패턴에 대한 탁월한 지원을 제공하며 ASP.NET, .NET, Angular, React, Blazor, Delphi, Python, Java 및 100 개 이상의 기타 파일 및 데이터베이스 형식을 지원합니다.
용매는 지속적인 현지화, 기계 번역, 대화식 퍼지 매칭 지원 번역 메모리, 대화식 용어, 가져 오기/내보내기, 빌드 도구 및 클라우드 번역을 지원합니다.

여기에서 용매를 다운로드 할 수 있습니다.
메모! 현재 솔루션 및 솔루션은 Windows 응용 프로그램이며 Windows에서만 작동합니다. 그러나 우리는 향후 웹 기반 버전을 출시 할 계획이며 Linux 및 MACOS에 포트 솔루 메이크를 출시 할 계획입니다.