지역화Localization

이 가이드에서는 국제화지역화 의 개념을 소개 하 고 이러한 개념을 사용 하 여 Xamarin 모바일 응용 프로그램을 생성 하는 방법에 대 한 지침을 제공 합니다.This guide introduces the concepts behind internationalization and localization and links to instructions on how to produce Xamarin mobile applications using those concepts.

Xamarin 앱 지역화에 대 한 기술 세부 정보를 바로 건너뛰려면 다음 플랫폼별 방법 문서 중 하나를 사용 하 여 시작 합니다.If you want to skip straight to the technical details of localizing Xamarin apps, start with one of these platform-specific how-to articles:

i18n 및 L10ni18n and L10n

국제화 는 코드에서 다양 한 언어를 표시 하 고 다양 한 로캘 (예: 숫자 및 날짜 형식 지정)에 대 한 디스플레이를 조정할 수 있도록 하는 프로세스입니다.Internationalization is the process of making your code capable of displaying different languages and adapting its display for different locales (such as number and date formatting). 이를 세계화라고도 합니다.This is also referred to as globalization.

지역화 는 각 언어에 대 한 리소스 (예: 문자열 및 이미지)를 만들고 internationalize 앱을 사용 하 여 번들 하는 단계입니다.Localization is the step that follows – creating resources (such as strings and images) for each language and bundling them with the internationalize app.

국제화는 "i"와 "n" 사이의 18 자로 된 i18n-줄임으로 단축 됩니다.Internationalization it is often shortened to i18n – shorthand for 18 letters between "i" and "n". 지역화는 "L"과 "n" 사이의 10 개 문자에 대 한 L10n 비슷하게 짧아집니다.Localization is similarly shortened to L10n – for 10 letters between "L" and "n".

개요Overview

이 문서에서는 국제화 및 지역화와 관련 된 개념과 일반적으로 모바일 응용 프로그램 개발에 적용 하는 방법에 대해 소개 합니다.This document introduces the concepts associated with internationalization and localization, and how they apply to mobile application development in general. 응용 프로그램을 디자인 하 고 빌드할 때 이전에는 하드 코딩 했지만 지역화를 위해 매개 변수화 해야 할 수 있는 작업은 다음과 같습니다.When designing and building an application, things that you might previously have hardcoded but which must parameterized for localization include:

  • 화면 레이아웃 및 텍스트,Screen layouts and text,
  • 아이콘, 그래픽 및 색Icons, graphics and colors,
  • 비디오 및 사운드 파일Video and sound files,
  • 동적 텍스트 및 텍스트 서식 지정 (예: 숫자, 통화 및 날짜)Dynamic text and text-formatting (such as numbers, currency and dates),
  • RTL (오른쪽에서 왼쪽) 언어의 레이아웃 변경 내용Layout changes for right-to-left (RTL) languages, and
  • 데이터 정렬.Data sorting.

앱이 이러한 팁을 대상으로 하는 모바일 플랫폼에 관계 없이 고품질의 지역화 된 앱을 빌드하는 데 도움이 됩니다.Regardless of which mobile platforms your app targets these tips will help you build a high-quality localized app.

디자인 고려 사항Design Considerations

콘텐츠를 지역화할 수 있도록 응용 프로그램을 설계 하는 것을 국제화 라고 합니다.Architecting an application so that it is possible to localize its content is called internationalization. 국제화를 제대로 수행 하는 것은 런타임에 다른 언어 문자열을 로드 하는 것 보다 훨씬 더 간단 합니다. 잘 디자인 된 앱은 언어 및 로캘 (이미지, 소리 및 비디오 포함)을 기준으로 모든 리소스를 변경할 수 있도록 허용 하 고 조정할 수 있어야 합니다. 크기를 조정 하는 다른 문자열을 사용 하는 서식 지정 및 레이아웃Doing internationalization properly is more than just allowing for different language strings to be loaded at runtime – a well-designed app should allow for all resources to be changed based on language and locale (including images, sounds and videos) and can adapt formatting and layout to cope with different sized strings.

이 섹션에서는 국제화 된 응용 프로그램을 빌드할 때 고려해 야 할 몇 가지 디자인 고려 사항을 설명 합니다.This section discusses some design considerations to be taken into account when building an internationalized application.

레이아웃 및 문자열 길이Layouts and string length

중국어 및 일본어 문자열은 매우 짧을 수 있습니다. 경우에 따라 하나 또는 두 개의 문자를 입력 필드 레이블에 사용할 수 있습니다.Chinese and Japanese strings can be very short – sometimes one or two characters can be meaningful enough for an input field label.

독일어 문자열 (예:)은 매우 길어질 수 있습니다. 경우에 따라 영어의 비교적 짧은 단어는 다른 언어에서 매우 긴 것으로 보일 수 있습니다 .이는 클리핑 되거나 레이아웃 reflowing 예기치 않게 될 수 있습니다.German strings (for example) can be very long; sometimes a relatively short word in English becomes very long in other languages – either becoming clipped or else unexpectedly reflowing your layout.

IOS 홈 화면의 몇 개 항목에 대 한 문자열 길이를 영어, 독일어 및 일본어로 비교 합니다.Compare the string lengths for a few items on the iOS home screen in English, German, and Japanese:

영어 (8 자)의 설정은 독일어 번역에는 13 자 이지만 일본어에서는 2 자만 필요 합니다.Notice that Settings in English (8 characters) requires 13 characters for the German translation but only 2 characters in Japanese.

레이블 길이가 크게 달라질 수 있는 경우 표시 레이블 및 입력 필드가 나란히 표시 되는 레이아웃은 사용 하기 어렵습니다.Layouts where the display label and input field are side-by-side are difficult to work with when the label length can vary greatly. 레이블 및 입력 모두에서 화면의 전체 너비를 사용할 수 있기 때문에 레이블이 필드 위에 표시 되는 레이아웃을 보다 쉽게 지역화할 수 있습니다.Often a layout where the label is displayed above a field is easier to localize because the full width of the screen is available for both the label and the input.

일반적으로 고정 레이아웃을 작성 하는 경우 (특히 side-by-side 요소) 레이블 및 텍스트에 필요한 영어 문자열 보다 최소 50% 이상의 너비를 허용 합니다.As a general rule, if you are building fixed layouts (especially side-by-side elements) allow at least 50% more width than your English strings require for labels and text. 이렇게 하면 모든 문제를 해결할 수는 없지만 대부분의 경우 작동 하는 버퍼를 제공 합니다.This won’t solve every problem but will provide a buffer that will work in many cases.

입력 유효성 검사Input validation

유효성 검사 규칙을 작성할 때 가정 합니다.Beware of assumptions when writing validation rules. 단일 문자가 거의 의미가 없기 때문에 영어의 문자를 적어도 3 자 이상 입력할 수 있도록 텍스트 필드를 입력 해야 할 수 있습니다.It might seem valid to require a text field input to "require" at least three characters in English, since a single letter very rarely has any meaning. 중국어 및 일본어에서 단일 문자는 유효한 입력이 될 수 있으며 유효성 검사 메시지 "최소 3 자 이상 필요 합니다."는 이러한 언어에 적합 하지 않습니다.In Chinese and Japanese however a single character might be a valid input, and a validation message "at least 3 characters is required" does not make sense for those languages.

전자 메일 주소 또는 웹 사이트 URL의 유효성 검사와 같은 다른 작업은 ASCII 하위 집합으로 제한 되지 않는 문자를 사용 하 여 더 복잡해 집니다.Other seemingly simple tasks like validating an email address or website URL become more complicated with the characters are not limited to the ASCII subset.

국제화를 사용 하 여 유효성 검사 규칙을 작성 하는 것이 좋습니다. 가장 덜 제한적인 규칙을 선택 하거나 각 언어 마다 다르게 작동 하도록 논리를 작성 합니다.Write your validation rules with internationalization in mind – either choose the least restrictive rules, or write the logic so that it works differently for each language.

이미지 및 색Images and Color

사용자가 선택한 언어에 따라 모든 이미지를 변경 해야 하는 것은 아닙니다.Not every image needs to change based on a user’s language choice. 많은 아이콘이 나 사진은 말하는 언어에 관계 없이 모든 사용자에 게 적합 합니다.Many icons or photos will be suitable for all users, not matter what language they speak. 일부 리소스는 다음과 같이 지역화 하는 것이 좋습니다.Some resources make sense to localize though, such as:

  • 사람 또는 특정 위치를 설명 하는 이미지 – 로컬 사용자/위치를 표시 하는 경우 사용자에 게 더 많은 관련성이 있을 수 있습니다.Images depicting people or specific locations – your app may feel more relevant to users if it shows local people/locations.
  • 아이콘 – 일부 iconography은 문화권에 따라 달라 지 며, 로컬에서 이해를 반영 하도록 이미지를 지역화 하 여 앱을 더 쉽게 사용할 수 있습니다.Icons – Some iconography can be culture-specific and you can make your app easier to use by localizing the imagery to reflect local understanding.
  • 색-일부 문화권은 색을 다르게 인식 합니다. 빨간색은 한 지역에서 경고를 의미할 수 있지만 다른 지역에서는 좋은 방법입니다.Colors – Some cultures understand colors differently – red might mean warning in one region, but good luck in another. 앱을 디자인할 때 네이티브 스피커로 확인 하 여 색을 지역화 하는 메커니즘을 빌드 해야 하는지 여부를 확인 합니다.Check with native speakers when designing your app to determine whether you should be building a mechanism to localize colors.

비디오 및 사운드Videos and Sound

비디오 및 사운드는 응용 프로그램을 지역화할 때 특별 한 문제를 제공 합니다 .이는 비교적 쉽게 문자열을 변환할 수 있는 반면 여러 voiceover 트랙 또는 비디오 클립을 기록 하는 것은 비용이 많이 들고 어려울 수 있기 때문입니다.Videos and sound present special challenges when localizing an application, because while it’s relatively easy to get strings translated, recording multiple voiceover tracks or video clips can be both expensive and difficult.

비디오 및 사운드 파일의 여러 복사본은 응용 프로그램의 크기를 크게 늘릴 수 있습니다 (특히 많은 언어로 지역화 하거나 많은 미디어 파일이 있는 경우).Multiple copies of video and sound files may also significantly increase the size of your application (especially if you are localizing into a large number of languages or have lots of media files). 사용자가 앱을 설치한 후 필수 언어 자산만 다운로드 하는 것이 좋을 수 있지만 저속 네트워크에서 사용자 환경이 저하 될 수도 있습니다.You might consider downloading only the required language assets after the user has installed your app, but this could also result in a poor user experience on slow networks.

지역화 문제를 해결 하는 방법에는 여러 가지가 있습니다. 가장 중요 한 것은이를 사전에 고려 하 고 응용 프로그램이이를 처리 하도록 설계 되어 있는지 확인 하는 것입니다.There are often multiple ways to solve localization issues – the most important thing is to consider them up-front and ensure your application is designed to take care of them.

날짜, 시간, 숫자 및 통화Dates, Times, Numbers and Currency

.NET 형식 지정 함수를 사용 하는 경우 소수 구분 기호가 올바르게 구문 분석 되도록 문화권을 지정 해야 합니다 (그리고 변환 예외가 throw 되지 않음).If you’re using .NET formatting functions, remember to specify the culture so that decimal separators are parsed correctly (and avoid conversion exceptions being thrown). 예를 들어 1.99 및 1은 로캘에 따라 유효한 10 진수 표현입니다.For example both 1.99 and 1,99 are valid decimal representations depending on your locale.

데이터를 알려진 원본 (사용자의 사용자 코드 또는 사용자가 제어 하는 웹 서비스)에서 가져오는 경우 표준 영어 서식 지정에 사용할 InvariantCulture 같은 서식 지정과 일치 하는 문화권 식별자를 하드 코드 할 수 있습니다.When the data is coming from a known source (ie. from your own code or a web-service that you control) you can hardcode a culture identifier that matches the formatting such as the InvariantCulture which will work for standard English language formatting.

double.Parse("1,999.99", CultureInfo.InvariantCulture);

응용 프로그램 사용자가 데이터를 입력 하는 경우 해당 로캘을 반영 하는 CultureInfo 인스턴스를 사용 하 여 구문 분석 합니다.If the data is being input by the app user, parse it using a CultureInfo instance that reflects their locale:

double.Parse("1 999,99", CultureInfo.CreateSpecificCulture("fr-FR"));

자세한 내용은 숫자 문자열 구문 분석날짜 및 시간 문자열 구문 분석 MSDN 문서를 참조 하세요.See the Parsing Numeric Strings and Parsing Date and Time Strings MSDN articles for additional information.

오른쪽에서 왼쪽 (RTL) 언어Right-to-left (RTL) Languages

아랍어, 히브리어 및 우르두어와 같은 일부 언어 (예:)는 오른쪽에서 왼쪽으로 읽습니다.Some languages, such as Arabic, Hebrew, and Urdu (for example), are read from right to left. 이러한 언어를 지 원하는 응용 프로그램은 오른쪽에서 왼쪽 판독기에 맞게 조정 하는 화면 디자인을 사용 해야 합니다. 예를 들면 다음과 같습니다.Applications that support these languages should use screen designs that adapt for right-to-left readers, for example:

  • 텍스트를 오른쪽에 맞춰야 합니다.Text should be right-aligned.
  • 레이블은 입력 필드의 오른쪽에 표시 됩니다.Labels should appear to the right of input fields.
  • 기본 단추 배치가 일반적으로 반전 됩니다.Default button placement is generally reversed.
  • 컨텍스트 방향을 사용 하는 계층적 탐색 살짝 밀기 및 애니메이션 (및 기타 탐색 메타포 및 애니메이션)도 되돌려야 합니다.Hierarchical navigation swiping and animation (and other navigation metaphors and animations) that use direction for context should also be reversed.

IOS와 Android는 모두 오른쪽에서 왼쪽 레이아웃 및 글꼴 렌더링을 지원 하며, 기본 제공 기능을 사용 하 여 위의 조정을 수행 하는 데 도움이 됩니다.Both iOS and Android support right-to-left layouts and font rendering, with built-in features that help to make the above adjustments. Xamarin.ios는 현재 자동으로 RTL 렌더링을 지원 하지 않습니다.Xamarin.Forms does not currently automatically support RTL rendering.

정렬Sorting

언어 마다 동일한 문자 집합을 사용 하는 경우에도 해당 알파벳의 정렬 순서를 다르게 정의 합니다.Different languages define the sort order of their alphabets differently, even when they use the same character set.

언어 (CultureInfo)가 정렬 순서에 영향을 주는 예제에 대 한 .NET Framework 문자열 사용에 대 한 모범 사례 에서 문자열 비교의 세부 정보 를 참조 하세요.See the Detail of String Comparison in Best Practices for Using Strings in the .NET Framework for an example where language (CultureInfo) affects the sort order.

모바일 플랫폼의 기본 제공 데이터베이스 기능이 언어별 정렬 순서를 지원 하므로 비즈니스 논리에서 추가 코드를 구현 해야 할 수도 있습니다.It’s unlikely the built-in database capabilities on the mobile platforms will support language-specific sort ordering so you may be required to implement additional code in your business logic.

여러 언어를 염두에 두면 검색 알고리즘을 작성 하 고 테스트 해야 합니다.Ensure you write and test your search algorithm with multiple languages in mind. 고려해 야 할 사항은 다음과 같습니다.Things to consider include:

  • 자동 완성 – 자동 완성 기능을 작성 한 경우 사용자의 언어와 관련 된 제안 사항을 확인 합니다.Auto-complete – if you have built an auto-complete function ensure it sources suggestions relevant to the user’s language.
  • 쿼리와 데이터 일치 – 특정 언어로 입력 된 쿼리는 해당 언어로 작성 된 콘텐츠나 앱의 모든 콘텐츠에 대해 실행 됩니다.Matching query to data – will search queries entered in a specific language be executed against just content written in that language, or against all content in your app?
  • 형태소 분석 – 유사한 단어를 검색 하도록 검색을 작성 하는 경우 word 루트 및 기타 검색 최적화는 지원 되는 모든 언어에 대해 작성 된 최적화입니다.Stemming – if your search is built to search for similar words, word roots and other search optimizations, are those optimizations built for all the languages you support?
  • 정렬 – 결과가 올바르게 정렬 되었는지 확인 합니다 (위 참조).Sorting – make sure the results are sorted correctly (see above).

외부 소스의 데이터Data from external sources

많은 응용 프로그램은 Twitter 및 RSS 피드에서 날씨, 뉴스 또는 주식 가격으로 외부 소스에서 데이터를 다운로드 합니다.Many applications download data from external sources, from Twitter and RSS feeds to weather, news, or stock prices. 사용자에 게이를 표시 하는 경우 관련이 없거나 읽을 수 없는 정보 화면을 표시 하는 가능성을 고려해 야 합니다.When displaying this to a user you need to consider the possibility that you will display a screen of irrelevant or unreadable information to them.

응용 프로그램에서 사용자와 관련 된 데이터를 표시 하는 데 사용할 수 있는 몇 가지 전략이 있습니다.There are few strategies you can use to try and ensure your app displays data relevant to the user:

  • 다른 원본 – 응용 프로그램은 사용자의 언어나 로캘에 따라 다른 원본에서 데이터를 다운로드할 수 있습니다.Different sources – your application might download the data from a different source depending on the user’s language or locale. 로캘 뉴스, 날씨 및 주가는 북아메리카 피드에서 다운로드 한 항목 보다 더 효과적일 수 있습니다.Locale news, weather and stock prices might make more sense than something downloaded from a North American feed.
  • 지역화 된 표시 – Twitter 또는 사진 피드를 표시 하는 경우 콘텐츠 자체가 원래 언어로 유지 되는 경우에도 해당 언어로 된 메타 데이터 (예: 걸린 시간)를 표시 해야 합니다.Localized display – if you are displaying a Twitter or photo feed, you should display the metadata (such as the time taken) in his or her own language, even if the content itself remains in the original language.
  • 번역 – 들어오는 데이터의 컴퓨터 번역을 수행 하기 위해 앱에 번역 옵션을 빌드할 수 있습니다.Translation – you could build a translation option into your app to do a machine translation of incoming data. 이는 자동 이거나 사용자의 판단에 의해 수행 될 수 있습니다. 컴퓨터 번역이 완벽 하지 않으므로 사용자에 게 알려야 합니다.This could be automatic or at the user’s discretion – just be sure to notify the user if this is taking place, since machine translations are never perfect!

이는 오디오 트랙 또는 비디오에 대 한 외부 링크에도 영향을 줄 수 있습니다. 응용 프로그램을 디자인 하는 경우 소싱 번역 된 콘텐츠를 미리 계획 하거나 콘텐츠를 제공 하지 않을 때 사용자 인터페이스에서 사용자에 게 적절 한 알림이 제공 되도록 합니다. 언어도.This could also affect external links to audio tracks or videos – when designing your application be sure to plan ahead for sourcing translated content or ensuring that users are adequately informed by the user interface when content will not be presented in their language.

과도 하 게 변환 안 함Don’t over-translate

앱의 일부 문자열을 변환할 필요가 없거나, 변환기에서 특별히 주의를 기울여야 할 수도 있습니다.Some strings in your app might not need translating, or at the very least need special attention by the translator. 예를 들면 다음과 같습니다.Examples might include:

  • Url – URL을 나열 하는 경우 언어에 따라 조정 될 수도 있고 그렇지 않을 수도 있습니다.URLs – if you list a URL, it may or may not need to be adjusted by language. 예를 들어 facebook.com는 변환이 필요 하지 않습니다. 기본 사이트에서 언어를 자동으로 검색 합니다.For example, facebook.com doesn’t require translation it auto-detects language at the main site. 다른 사이트에는 로캘별 콘텐츠가 있으며 yahoo.com와 yahoo.fr 또는 yahoo.it와 같은 다른 URL을 제공할 수 있습니다.Other sites have locale-specific content and you might want to offer a different URL, such as yahoo.com versus yahoo.fr or yahoo.it.
  • 전화 번호 – 특히 특정 언어를 사용 하는 호출자의 국가 코드 또는 숫자가 다른 전화 번호입니다.Telephone numbers – especially those with different country-codes or numbers for callers that speak a particular language.
  • 연락처 세부 정보-주소 및 기타 정보는 언어나 로캘에 따라 달라질 수 있습니다.Contact details – addresses and other information might vary by language or locale.
  • 상표 & 제품 이름 – 일부 문자열은 항상 동일한 언어로 작성 되기 때문에 변환할 필요가 없습니다.Trademarks & product names – some strings don’t need translating because they’re always written in same language.

마지막으로 특정 문자열에 특별 한 처리가 필요한 경우에는 변환기에 대 한 자세한 지침을 포함 해야 합니다.Finally, be sure to include detailed instructions for the translator if certain strings require special treatment.

서식 있는 텍스트Formatted text

일반적으로 문자열의 형식이 지정 되지 않기 때문에 모바일 앱에서 문제가 발생 하지 않습니다.Not usually a problem with mobile apps because strings generally aren’t richly formatted. 그러나 앱에서 서식 있는 텍스트 (예: 굵게 또는 기울임꼴 서식 지정)가 필요한 경우 변환기에서 서식 지정을 입력 하는 방법을 알고 있는지 확인 하 고, 문자열 파일이 올바르게 저장 되며, 사용자에 게 표시 되기 전에 형식이 적절 하 게 지정 됩니다 (ie. 실수로 허용 하지 않음). 형식 지정 코드 자체가 사용자에 게 제공 됩니다.However if rich text (such as bold or italic formatting) is required in your app ensure the translator knows how to input the formatting, your strings files store it correctly and it is formatted properly before being displayed to the user (ie. don’t accidentally let the formatting codes themselves be presented to the user).

번역 팁Translation Tips

응용 프로그램에서 사용 하는 문자열을 변환 하는 것은 지역화 프로세스의 일부로 간주 됩니다.Translating the strings used by an application is considered to be part of the localization process. 일반적으로이 작업은 번역 서비스로 아웃소싱 되며 응용 프로그램 또는 비즈니스를 모를 수 있는 다국어 직원에 의해 수행 됩니다.Typically this task will be outsourced to a translation service and performed by multilingual staff that may not know your application or your business.

다음은 정확 하 게 변환 하기 쉽고 지역화 된 앱의 품질을 향상 시킬 수 있는 문자열을 생성 하는 데 도움이 되는 팁입니다.The following tips will help you produce strings that are easier to translate accurately and therefore improve the quality of your localized apps.

단어가 아니라 전체 문자열 지역화Localize complete strings, not words

개발자는 응용 프로그램 전체에서 다시 사용할 수 있도록 단일 단어나 문장의 ' 코드 조각 '을 지정 하는 방법을 사용 하기도 합니다.Sometimes developers take the approach of trying to specify single words or sentence 'snippets' so that they can re-use them throughout the application. 예를 들어 "5 개의 메시지가 있습니다." 라는 텍스트가 표시 됩니다.For example, for the text "You have 5 messages." 변환에 대해 다음 문자열을 지정할 수 있습니다.they might specify the following strings for translation

잘못됨:Bad:

"You have"
"no"
"message"
"messages"

그런 다음 문자열 연결을 사용 하 여 코드에 올바른 구를 즉시 만들려고 합니다.and then attempt to create the correct phrase on-the-fly in code using string concatenation:

잘못됨:Bad:

"You have" + " " + numMsgs + " " + "messages"
"You have" + " no " + "messages"

모든 언어에 대해 작동 하는 것은 아니며 변환기가 각 짧은 세그먼트의 컨텍스트를 이해 하기 어려울 수 있으므로이 방법은 사용 하지 않는 것이 좋습니다.This is discouraged because it will not necessarily work for all languages and will be difficult for the translator to understand the context of each short segment. 또한 번역 된 문자열을 다시 사용 하 여 다른 컨텍스트에서 사용 하는 경우 나중에 문제를 발생 시킬 수 있습니다 (업데이트 된 다음 업데이트).It also leads to re-use of translated strings, which can cause problems later if they are used in different contexts (and then get updated).

매개 변수 다시 정렬 허용Allow for parameter re-ordering

일부 프로그래밍 언어에서는 문자열의 매개 변수 순서를 지정 하기 위해 추가 구문이 필요 하지만 .NET은 이미 번호가 매겨진 자리 표시자의 개념을 지원 합니다.Some programming languages require extra syntax to specify the order of parameters in a string, however .NET already supports the concept of numbered placeholders, so

양호:Good:

"a {0} b {1} cde {3}"

다음을 변환할 수 있습니다 (자리 표시자의 위치 및 순서가 변경 됨).could be translated the following (where the position and order of the placeholders is changed)

"{2} {3} f g h {0}"

그리고 토큰은 변환기로 정렬 됩니다.and the tokens will be ordered as the translator intended. 문자열을 번역기로 보낼 때 각 자리 표시자에 포함 된 내용에 대 한 설명을 포함 해야 합니다.Be sure to include an explanation of what each placeholder contains when sending the string to a translator.

카디널리티에 여러 문자열 사용Use multiple strings for cardinality

더 나은 사용자 환경을 제공 하기 위해 각 상태에 대 한 특정 문자열을 사용 하 "You have {0} message/s." 같은 문자열을 사용 하지 않습니다.Avoid strings like "You have {0} message/s." Use specific strings for each state to provide a better user experience:

양호:Good:

"You have no messages."
"You have 1 message."
"You have 2 messages."
"You have {0} messages."

표시 되는 숫자를 평가 하 고 적절 한 문자열을 선택 하려면 앱에서 코드를 작성 해야 합니다.You will have to write code in your app to evaluate the number being displayed and choose the appropriate string. 일부 플랫폼 (iOS 및 Android 포함)에는 현재 언어/로캘의 기본 설정에 따라 가장 적합 한 복수형 문자열을 자동으로 선택 하는 기능이 기본 제공 됩니다.Some platforms (including iOS and Android) have built-in features to automatically choose the best plural string based on the preferences for the current language/locale.

성별 허용Allowing for gender

경우에 따라 라틴어 기반 언어는 주체의 성별에 따라 다른 단어를 사용 합니다.Latin-based languages sometimes use different words depending on the gender of the subject. 앱이 성별을 알고 있는 경우 번역 된 문자열이이를 반영 하도록 허용 해야 합니다.If your app knows about gender, you should allow the translated strings to reflect this.

또한 영어 에서도 문자열이 특정 사용자 또는 앱의 사용자를 참조 하는 보다 명백한 사례가 있습니다.There is also the more obvious case even in English, where strings refer to a specific person or user of your app. 예를 들어 일부 사이트는 "Bob commented on his post"와 같은 메시지를 표시 하므로 남성, 여성, 이진 또는 알 수 없는 성별 모두에 대 한 문자열이 필요 합니다.For example, some sites show messages like "Bob commented on his post" so you need strings for both a male, female, and non-binary or unknown gender:

양호:Good:

"{0} commented on his post"
"{0} commented on her post"
"{0} commented on their post"

문자열 다시 사용 안 함Don’t reuse strings

또는 문자열 자체가 다른 목적이 나 의미가 있는 경우에도 마찬가지로 문자열을 다시 사용 하지 마십시오.Or more accurately, don’t reuse strings just because they are similar when the string itself has a different purpose or meaning.

예를 들어 앱에 on/off 스위치가 있고 switch 컨트롤에는 ' on ' 및 ' o f f '에 대 한 텍스트를 지역화 해야 한다고 가정 합니다.For example: imagine you have an on/off switch in your app and the switch control needs the text for ‘on’ and ‘off’ to be localized. 또한 응용 프로그램의 다른 위치에 있는 해당 설정의 값을 텍스트 레이블로 표시 합니다.You also display the value of that setting elsewhere in the app in a text label. 스위치 표시에 다른 문자열을 사용 해야 합니다 (기본 언어의 동일한 문자열인 경우에도). 예를 들면 다음과 같습니다.You should use different strings for the switch display versus the switch’s status (even if they are the same string in your default language) – for example:

  • "켜기" – 스위치 자체에 표시 됩니다."On" – displayed on the switch itself
  • "Off" – 스위치 자체에 표시 됩니다."Off" – displayed on the switch itself
  • "On"-레이블에 표시 됩니다."On" – displayed in a label
  • "Off" – 레이블에 표시 됩니다."Off" – displayed in a label

이는 번역기에 대 한 최대 유연성을 제공 합니다.This provides maximum flexibility for the translator:

  • 디자인 상의 이유로 스위치 자체에서 소문자 "on" 및 "off"를 사용 하지만 표시 레이블은 대문자 "On" 및 "Off"를 사용 합니다.For design reasons, perhaps the switch itself uses lowercase "on" and "off" but the display label uses upper case "On" and "Off".
  • 일부 언어에서는 사용자 인터페이스 컨트롤에 맞게 스위치 값이 축약 되도록 해야 할 수도 있지만, 전체 (번역 된) 단어가 레이블에 표시 될 수 있습니다.Some languages might need the switch value to be abbreviated to fit in the user interface control, while the complete (translated) word can appear in the label.
  • 또는 일부 언어의 경우에는 "I" 및 "O"를 사용 하 여 문화권을 잘 이해 하는 것이 가능 하지만 레이블을 "On" 또는 "Off"로 계속 읽을 수 있습니다.Alternatively, for some languages the rendering of your switch might be use "I" and "O" for cultural familiarity, but you might still want the label to read "On" or "Off".

번역 서비스Translation Services

기계 번역Machine translation

앱에 번역 기능을 빌드하려면 Azure Translator Text API을 고려 하세요.To build translation features into your app, consider the Azure Translator Text API.

테스트를 위해 여러 온라인 번역 도구 중 하나를 사용 하 여 개발 중에 응용 프로그램에 지역화 된 텍스트를 포함할 수 있습니다.For testing purposes you could use one of the many online translation tools to include some localized text in your app during development:

사용할 수 있는 다른 여러 가지가 있습니다.There are many others available. 컴퓨터 번역의 품질은 일반적으로 전문 변환기 또는 네이티브 스피커로 먼저 검토 하 고 테스트 하지 않고도 응용 프로그램을 릴리스할 만큼 좋은 것은 아닙니다.The quality of machine translation generally isn't considered good enough to release an application without first being reviewed and tested by professional translators or native speakers.

전문 번역Professional translation

또한 문자열을 사용 하 여 자체 번역자에 게 배포 하는 전문 번역 서비스도 있으므로 요금에 대 한 번역을 완료할 수 있습니다.There are also professional translation services that will take your strings and distribute them to their own translators, providing you with finished translations for a fee.

가장 잘 알려진 서비스 중 하나는 LionBridge입니다.One of the best-known services is LionBridge. 대부분의 전문 서비스는 문자열, XML, RESX 및 p/PO를 비롯 한 모든 일반 파일 형식을 지원 합니다.Most professional services support all the common file types including strings, XML, RESX and POT/PO.

요약Summary

이 문서에서는 앱을 국제화 다음 리소스를 지역화 하기 전에 알아두어야 하는 몇 가지 개념을 소개 하 고 각 플랫폼에 대 한 언어 기본 설정을 변경 하는 방법도 살펴보았습니다.This article introduced some of the concepts that you should be familiar with before internationalizing your app and then localizing your resources, and also covered how to change language preferences for each platform.

이러한 개념은 Xamarin에서 가능한 다양 한 플랫폼별 및 플랫폼 간 국제화 기술에 적용 될 수 있습니다.These concepts can be applied to the various platform-specific and cross-platform internationalization techniques that are possible with Xamarin.

관심 있는 플랫폼에 대 한 기술 세부 정보를 계속 읽어 보십시오.Continue reading technical details for the platform you are interested in: