숫자를 올바르게 지역화하는 방법은 무엇입니까? 숫자 그룹화에는 인도 번호 체계가 선호됩니다.

프론트 엔드 응용 프로그램에서 숫자를 지역화 할 때 어떤주의 사항을 알아야합니까?

예 : 브라질 포르투갈어 (pt-BR)에서는 점과 소수점으로 수천을 쉼표로 나눕니다. 미국 영어 (en-US)에서는 그 반대입니다. pt-BR에서는 en-US와 같은 숫자를 천 단위로 구분하여 표시합니다. 그러나 오늘 인도 영어 (en-IN)에 대해 읽으면이 보석을 발견했습니다.

숫자 그룹화에는 인도 번호 체계가 선호됩니다. 말로 쓰거나 말할 때 100,000 / 100 000 미만의 숫자는 표준 영어와 같이 표현됩니다. 100,000 / 100 000을 포함하여 10을 초과하는 숫자는 인도 번호 체계의 하위 집합으로 표현됩니다.

https://ko.wikipedia.org/wiki/Indian_English#Numbering_system

다음을 의미합니다.

1000000 units in pt-BR are formatted 1.000.000
1000000 units in en-US are formatted 1,000,000
1000000 units in en-IN are formatted 10,00,000

쉼표와 점 및 기타 특정 구분 기호 외에도 마스킹도 유효한 문제인 것 같습니다.

프론트 엔드 애플리케이션에서 숫자를 현지화 할 때 알아야 할 다른 경고 사항은 무엇입니까? 특히 비 라틴 문자 세트에 숫자를 표시하는 경우?



답변

대부분의 프로그래밍 언어와 프레임 워크에는 이미 사용할 수있는 합리적인 작동 메커니즘이 있습니다.

예를 들어, C # 에코 시스템에는 원하는 System.Globalization 네임 스페이스가 있으므로 Culture원하는 것을 지정할 수 있습니다 .

Console.WriteLine(myMoneyValue.ToString("C", "en-US"));

이것은 당신이 다시 발명하고 싶은 것이 아닙니다. 자주 사용하는 언어 또는 프레임 워크에서 제공하는 국제화 기능을 사용하십시오.


답변

여기에 몇 가지 훌륭한 답변이 있지만 잊어 버리지 않는 것이 중요하다고 생각하는 한 가지 언급하지 않았습니다. 숫자 서식이 발생하는 곳마다 출력이 사용되는 것이 분명하거나 제어 할 수 있는지 확인하십시오.

  • 사용자 인터페이스 용인 경우 현지화 된 형식을 적용해야합니다.

  • 번호가 파일에 쓰거나 네트워크를 통해 전송 될 때 또는 번호가 기계 판독 가능 형식으로 필요한 다른 형식으로 전송 될 때 현재 문화권에 따라 형식이 지정 되지 않고 고정 된 설정에 따라 형식이 지정 되었는지 확인하십시오 예를 들어 .NET 환경에서는을 사용 InvariantCulture하십시오.

그렇지 않으면 문화권 A를 사용하여 숫자를 쓰거나 보낼 때 문화권 B를 사용하여 읽거나받을 때 문제가 발생합니다.

내 경험상 이것은 숫자의 적절한 지역화를 수행하는 데 가장 큰 장애물 중 하나입니다. 숫자 서식 및 변환을 중앙 집중화하려는 시도에서 사람들은 서식에 대해 일반적이고 재사용 가능한 기능을 만들기 시작한 다음 전체에서 사용하기 시작합니다. 장소. 그러나 프로그램의 다른 곳에서 기계가 읽을 수있는 문자열 형식으로 숫자를 필요로하는 즉시 현지화 된 형식과 현지화되지 않은 형식의 두 가지 변형이 필요합니다. 이로 인해 두 가지 형식의 변환이 혼동 될 위험이 높습니다 (특히 개발자와 테스트 머신에 UI가 아닌 형식에 사용되는 “고정”설정과 유사한 기본 로케일 설정이 있지만 사용자 기반의 일부는 그렇지 않은 경우).

부록 :이 문제는 번호가 기계 나 사람 (또는 둘 다)에 의해 처리 될 것인지 사전에 명확하지 않은 상황에서 실제로 불쾌해질 수 있습니다. 예를 들어, 로그 파일 출력의 일부로. 이 경우 점을 소수점 구분 기호로 사용하지 않고 구분 기호를 사용하지 않는 “중립”표준을 따르는 것이 가장 좋습니다.


답변

적절한 현지화는 매우 어렵습니다. 대부분의 프로그래밍 생태계는 현지화를위한 솔루션을 시도하지만 제 경험상 그것들은 다소 손상되었습니다. 그러므로 나는 제안 할 것이다 :

  • 현지화를 자동화하지 마십시오. 항상 작동하지는 않습니다. 문제를 파악하고 사용자를 실망시키는 것은 어렵습니다.

  • 일관성 유지 : 영어 텍스트의 브라질 식 소수 구분 기호와 같이 다른 언어와 서식 규칙을 혼용하지 마십시오.

  • 지정된 로케일 세트를 명시 적으로 지원합니다. 번역자와 협력하여 날짜와 숫자의 형식을 알아냅니다. 대부분의 문제는 기존 라이브러리에 위임 할 수 있지만 자체 지역화 툴킷을 만들 수도 있습니다.

  • 날짜 및 시간 형식, 소수점 구분 기호, 기본 통화,… 등 각 사용자가 구성 할 수있는 간단한 형식을 선택하십시오. 이는 언어, 언어와 독립적으로 여러 지역 또는 문화를 혼합해야하는 여행자, 국외 거주자 또는 기타 사람들에게 특히 유용합니다.


답변

중요한 고려 사항 : 충분한 양을 결정해야합니다. 완벽하게 현지화하려는 토끼 구멍을 내려 가면 점점 복잡해지기 때문입니다.

“n 개의 항목을 선택했습니다”와 같은 일반적인 레이블을 사용하십시오. 하나의 항목 만 선택한 경우 잘못 읽습니다. 추악하지만 실용적인 해결책은 “n 개의 항목을 선택했습니다.”라고 쓰는 것입니다. 그러나 올바르게 수행하려면 n에 따라 두 가지 다른 텍스트가 필요합니다. 여러 로케일에서이 작업을 시도하면 언어마다 문법이 다르기 때문에 매우 복잡해집니다. 일부 언어의 경우 하나, 둘 및 여러 항목에 대해 서로 다른 활용이 있습니다. 이러한 이유로, 알고있는 사람들은 항상 기존 지역화 프레임 워크가 충분하지 않다고 불평 할 것입니다.

그러나 전투를 선택하고 어느 수준의 정교함이 충분한지를 결정해야합니다. 많은 목적을 위해 숫자와 날짜를 형식화하기위한 표준 지역화 라이브러리로 충분해야합니다.


답변

언어의 모든 경고를 알 수는 없습니다. 당신은 숫자에 대해 이야기하고 있지만, 복수, 성별, 데이터 정렬이 있습니다. 이들이 존재하고 다른 사람들, 특히 ICU 및 CLDR 프로젝트가 수행 한 광범위한 작업에 의존하고 있음을 알아야합니다.

대부분의 현대 언어는 이러한 프로젝트의 일부 또는 모든 기능을 구현하지만 그렇지 않은 경우에도이 프로젝트에 대해 읽으면 무엇을 찾아야할지에 대한 좋은 아이디어를 얻을 수 있습니다.

http://site.icu-project.org

http://cldr.unicode.org

최신 정보

CLDR 측량 도구는 모든 패턴에 대한 액세스를 제공합니다. 특정 언어 및 지역에서 숫자를 형식화하는 방법을 보여줍니다. 예를 들어 포르투갈어 (포르투갈) :

http://st.unicode.org/cldr-apps/v#/pt_PT/Number_Formatting_Patterns/

모든 데이터를 확인하고 사용하려면 GitHub에서 CLDR을 JSON 형식으로 다운로드하십시오.

https://github.com/unicode-cldr/cldr-json#cldr-json

다운로드에 대한 자세한 정보는 여기 :

http://cldr.unicode.org/index/downloads


답변

글쎄, 여기에있는 모든 답변에 만족하지만 실제로는 하나 하나를 정답으로 표시하기 위해 각 답변에 개별적으로 만족하지 않습니다.

지금까지 숫자를 지역화 할 때 알아야 할 사항은 다음과 같습니다.

인간을 위해 :

  • 수천 개의 구분 기호가 항상 수천으로 분리되는 것은 아닙니다. 문제의 인도 사례를 참조하십시오.
  • 천과 소수는 문화에 따라 문화가 다릅니다. 예를 들어, 독일어에서는 공백을 사용하여 수천 개가 나뉘어져 있습니다. 영어에서는 쉼표이고 포르투갈어에서는 점입니다.
  • 왼쪽에서 오른쪽으로, 오른쪽에서 왼쪽으로 쓰는 언어가 서로 다른 경우에는 정보가 없습니다.
  • 지원되는 특정 현지화 세트를 제공하고 사용자에게 명확하게하십시오.
  • 사용자가 기본 현지화를 지원되는 현지화 중 하나로 변경할 수 있도록 허용하면 관대하고 신이 많기 때문에 기쁘고 감사하게 케이크를 보낼 수 있습니다. :);

컴퓨터의 경우 :

  • 머신은 관대하지 않으며 숫자를 직렬화 및 직렬화 해제하는 동안 항상 동일한 형식을 수신해야합니다.
  • 단일 형식을 고수하십시오.
  • 가능한 최소 형식을 사용하십시오. 수천 개의 분리를 피하십시오. 10 진수는 직렬화 및 역 직렬화에 충분해야합니다.

개발자 :

  • (아래 @hyde에서 제안한대로) : 현지화를 위해 기존 라이브러리를 사용하십시오.
  • 가능하면 기본 테스터를 사용하고 현지화 / 국제화 테스트 사례를 지정하고 그렇지 않으면 라이브러리를 신뢰하십시오.
  • 현지화는 대부분 해결되는 문제입니다. 모든 주요 언어에는 숫자, 날짜 및 시간을 현지화 할 수있는 기본 또는 외부 라이브러리가 있습니다.