현지화 문자열 리소스를 구성하는 방법?


14

많은 작은 패키지로 구성된 대규모 응용 프로그램을 개발 중입니다. 각 패키지에는 현지화를위한 고유 한 리소스 파일 세트가 있습니다.

현지화 문자열을 구성하고 이름을 지정하는 가장 좋은 방법은 무엇입니까?

지금까지 내 생각은 다음과 같습니다.

중복 처리

동일한 패키지 (예 : "우편 번호")는 특정 패키지 내에서 여러 번 나타날 수 있습니다. 프로그래밍 본능 (DRY)은 모든 발생이 공유하는 단일 문자열 리소스 를 만들 도록 지시합니다 .

그런 다음 번역사가 일부 장소에서는 긴 번역 ( "Postleitzahl")을 선택하고 공간이 적은 장소에서는 짧은 번역 ( "PLZ")을 선택할 수 있습니다. 또는 일부 발생 ( "우편 번호 :")에는 콜론을 추가 할 수도 있지만 다른 경우에는 콜론을 추가하지 않을 수도 있습니다. 또는 일부 지역에서는 다른 대문자 ( "우편 번호")가 필요할 수 있습니다. 이러한 모든 주장 은 내용이 동일하더라도 사용 당 하나의 자원 을 작성하는 것을 가리 킵니다 .

명명

중복을 제거하려는 경우 content로 리소스 이름을 지정하는 것이 좋습니다 . 접두사를 통해 사용법의 종류를 암시 할 수도 있습니다. 따라서 labelOK= "OK" , messageFileTooLarge= "파일이 최대 파일 크기를 초과합니다." , and labelZipCode= "우편 번호" .

내용으로 이름을 지정하면 형식 인수를 자연스럽게 처리 할 수 ​​있다는 이점이 있습니다. 리소스 messageFileHas_0_MBWhileMaximumIs_1_MB는 실제 파일 크기와 최대 파일 크기라는 두 가지 형식 인수를 명확하게 취합니다.

그러나 중복을 허용하는 경우 콘텐츠만으로 이름을 지정하는 것은 의미가 없습니다. 고유 한 리소스 이름을 얻으려면 리소스 이름 에 사용 장소를 포함시켜야합니다 . 식별자가 약간 길어지는 경향이 있지만 그래픽 컨트롤에서 작동합니다. fileSelectionConfirmationButtonText= "OK" , customerDetailsTableColumnZipCode= "Zip Code" . 그러나 비 시각적 코드 파일의 경우 더 어려워집니다. 문자열의 최종 표시 위치를 모르는 경우 특정 문자열 사용법을 어떻게 지정합니까? 코드 파일과 함수 이름으로? 다소 어색하고 취하기 쉬운 것 같습니다.

대체로 중복을 허용하려고 노력하고 있지만 이것을 지원하는 일관된 이름 지정 체계를 찾는 데 어려움을 겪고 있습니다.

편집 : 이 질문에는 두 가지 측면이 있습니다. 자원 을 구성 하는 방법 (DRY 대 중복)과 이름지정 하는 방법 . 지금까지 답변은 첫 번째 측면에 집중되어 있습니다. 명명 규칙에 대한 의견을 보내 주셔서 감사합니다.


1
loc 세트가 각각 작은 패키지가 있는 경우 많은 복제본을 볼지 여부에 대한 질문이 발생합니다. 나는 중복으로 갈 것이고 코드의 식별자에 대해 너무 걱정하지 않을 것입니다.
Martin Ba

"결국 어디에 표시 될지 모른다면 어떻게 문자열의 특정 사용법을 지정합니까?" 이것은 디자인과 결함의 표시가 아니며, 논리 ( 표시 위치 결정 )와 프레젠테이션 (실제로 표시)을 혼합 합니다. 지역 데이터를 사용하여 텍스트를 구성하지만 이동할 수있는 다른 내부 데이터 개체처럼 처리하는 것은 매우 이상합니다.
Alpha

답변:


8

모든 문자열에서 특정 문자열이 사용되는 경우와 정확히 동일한 의미를 확신 할 수 없을 때마다 중복을 허용합니다.

두 개의 레이블에 항상 영어 (또는 모국어)로 동일한 문자열이 포함되어 있어도 모든 언어에서 반드시 같은 것은 아닙니다. 복제를 수락하면 그러한 상황을 처리하는 데 필요한 유연성을 제공 할 수 있습니다 (또는 번역가에게).

예를 들어, 상황에 따라 독일어로 "Zustand"또는 "Bedingung"으로 번역 될 수있는 "Condition"이라는 레이블을 생각해보십시오.



2

일부 중복을 수락하십시오.

추가 컨트롤을 만들어 여러 번역을 피할 수 있습니다. 예를 들어 a CancelButton와에 OKButton텍스트가 이미 포함되어 있으므로 취소 / Abbrechen OK / OK는 한 번만 번역하면됩니다. 그러나 이것은 거의 특별한 경우입니다.


2

이것이 우리 회사에서 처리하는 방식입니다.

명명 규칙 : 레이블 / 클래스 / 섹션 / 등을 접두어로 붙여 레이블 이름을 지정 합니다. 예를 들어 loadFile_loadButton, loadFile_fileNameLabel, loadFile_cancel로드 파일 대화에 속하는 모든 라벨입니다. 이 밑줄이 그어진 명명 규칙은 가장 일반적이지는 않지만, 가독성과 "그룹화"를 향상시키기 때문에보다 표준적인 규칙보다 선호합니다. 이름 loadFileLoadButton, loadFileNameLabelloadFileCancel. 차이가 그렇게 크지 않다고 생각할 수도 있지만 수천 개의 레이블이 있으면 복합 효과가 가치가 있습니다.

머리글 주석 : 레이블 이름 접두사 외에 리소스 파일에 "헤더"주석을 추가하여 레이블 그룹을 명확하게 정의합니다. 이런 식으로 특정 클래스 / 섹션 / 양식 등의 특정 레이블을 수정하거나 추가하려는 사람은 특정 요소와 관련된 모든 레이블을 한 위치에서 한 헤더 아래에서 쉽게 찾을 수 있으며 쉽게 레이블을 추가하거나 수정할 수 있습니다 그들이 다른 요소에 대한 번역을 깨뜨리지 않을 것이라는 것을 알고 있습니다.

"정의 된"복제본이 바람직하다 : 위에서 언급 한 바와 같이, 이러한 관행은 명백히 중복 된 레이블로 이어질 것이지만, 우리는 그것에 대해 아무런 문제가 없다 (거래 도구에서 이것을 다루는 방법에 대해 더 자세히).

다른 사람들이 지적했듯이, 한 언어로 된 하나의 레이블은 제시된 상황에 따라 다른 언어로 두 가지 이상의 다른 방식으로 번역 될 수 있습니다. 레이블을 "통합"하면 번역기는 레이블이있는 모든 컨텍스트에 맞는 단일 레이블을 만드는 데 어려움을 겪게됩니다. 따라서 "정의 된"복제본을 허용하면 동일한 컨텍스트에서 동일한 것을 참조하지 않는 한 현지화의 품질을 향상시키는 데 도움이됩니다 ( "정의 된"의 의미 임).

거래 도구 : 번역을 할 때 가능한 한 효과적으로하기 위해 번들에 존재하는 유사한 레이블을 찾아서 새 레이블의 기본값으로 번역을 제공하는 고유 한 도구를 만들거나 같은 기존 서비스를 사용 이 하나의 도구가 새로운 레이블 기본적으로 당신에게 몇 가지 번역 옵션을 제공하기 때문에, 새로운 라벨의 번역에게 산들 바람 (더가 반복 그렇다면 몇 번을, 내가 방금 언급 한 것과 같은 도구를 제공, ).

요약 : 정당한 복제와 레이블을 문맥에 따라 그룹화하면 번역가가 작업을 수행하는 데 실제로 도움이됩니다. 큰 시간입니다. 그냥 생각해보십시오. 문맥을 갖는 것은 번역가가 적절한 번역을 선택하도록 도와주는 데 큰 도움이됩니다. "정의 된"복제본을 허용하면 일부 상황에 맞지 않는 하나의 번역을 선택해야하는 충돌이 제거됩니다 (그러나 어쨌든 전체적으로 가장 적합합니다).

이게 도움이 되길 바란다!


1

과거 에이 작업을 수행했을 때 전체 문장이 포함 된 리소스 파일의 경로를 내려갔습니다. 똑같은 문장이 반복적으로 훌륭하게 사용되었지만 문장 내에서 개별 단어 만 사용 된 경우 해당 단어가 복제됩니다.

우리는 리소스 파일에 영어 구문 목록과 번역이 뒤 따르는 프레임 워크에 묶여있었습니다 (빠른 조회를 위해 끝에 색인 데이터가 있음).

필드 이름 "ZIP Code"또는 "OK"버튼과 같은 작은 데이터 프롬프트 또는 버튼의 경우 문자열 "ZIP Code"와 번역이 저장되며 전체 문자열이 필요한 모든 위치에서이를 사용합니다. 그러나 (문자열을 수동으로 끊지 않는 한) 문장에 나타나는 "ZIP 코드"에는 사용하지 않습니다.

우편 번호 예제를 사용하여 자체적으로 번역하려고 시도하고 사용하는 모든 문장으로 바꾸면 매우 나쁜 번역이됩니다.

예를 들어, "ZIP 코드를 입력해야합니다"는 다른 언어로 "입력 된 우편 번호를 입력해야합니다"와 같은 리터럴을 번역해야 할 수도 있습니다. 문장을 자르면 다른 언어로 필요한 단어를 뒤집을 수 없습니다.

그렇기 때문에 영어로 잘못 번역 한 일부가 너무 어리석은 것처럼 보입니다. 그를하는 사람은 문장 전체가 아닌 개별 단어를 번역했습니다.

문장을 깨지 않고 문장 전체를 번역하는 것이 가장 좋습니다. 삽입이 필요한 데이터 (예 : "부품 번호 @ 1은 중복 임")에 대한 자리 표시자가 있었으며 번역자는 자리 표시자를 이동하기 위해 원하는 위치로 이동할 수있었습니다.

그러나 동일한 문장이나 동일한 데이터 프롬프트 또는 동일한 버튼 레이블 등을 사용한 장소를 허용하면 번역을 공유하는 것이 좋습니다. 그것은 결코 문제가되지 않았고 번역가의 시간 / 비용을 절약했습니다.


바로 그거죠. 우리는 또한 이것을합니다. 번역에서 레이블 / 문장을 분리하지 마십시오.
Martin Ba

1
내 질문을 실제로 다루지 않는 것이 두렵습니다. 나는 문장이 깨지지 않아야한다는 것에 전적으로 동의한다. 그러나 대부분의 리소스는 문장이 아니라 단순한 레이블 (단추 텍스트, 표 머리글, 양식 레이블 등)입니다.
Daniel Wolf

어떤 경우에는 한 번 저장하고 재사용합니다. 아마도 당신이 직접하고있는 일의 범위 밖에서 고려할 사항은 번역가의 비용입니다. 우리는 실제로 전 세계 리셀러가 스스로 자금을 지원하고 응용 프로그램 내에서 번역을 테스트하도록했습니다. 그들은 가장 확실하게 중복을 피하기를 원했습니다.
RosieC

나는 여러 가지 큰 응용 프로그램을 스페인어로 그리고 스페인어로 번역하는 일을 해왔으며 올바른 번역 도구가 있다면 복제본이 문제가되지 않는다는 것을 알 수 있습니다 (심지어 바람직합니다). 이것을 효과적으로 처리하는 방법에 대한 내 대답을 참조하십시오.
carlossierra

0

네이밍에 대한 당신의 생각은 좋습니다.

목표

  • 현지화 된 텍스트에 대한 공통 레이블 (예 : 변수 이름)을 정의하십시오.
  • 레이블은 "마음 크기"여야합니다. 모호하지 않으면서도 실용적입니다.
  • 라벨은 일관된 형식을 따라야 예측 성과 리콜을 극대화 할 수 있습니다.

이행

  • 잘 알려진 약어를 일관되게 사용하여인지 부하를 줄입니다 (예 : msg = message, lbl = label, btn = button, ...)
  • 도구는 변수 / 라벨을 알파벳 목록으로 표시하므로 관련 레이블을 그룹화 할 때 사람 조회가 ​​가장 좋습니다. 가장 일반적인 이름부터 가장 구체적인 이름까지 이름을 계층 적으로 만듭니다. (예 : msgFileMissing, msgFileSaved, msgFileDeleted).
  • 영어는 동사의 명사 인 언어입니다. 많은 (대부분?) 다른 언어는 명사입니다. 명사 동사는 계층 그룹화에 가장 적합합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.