Node.js 국제화

“글로벌, 다국어 커뮤니티를 유지하는 것이 우리 일이다. 언어의 장벽 때문에 하고자 하는 일을 못 하는 사람은 없어야 한다.”

Richard Littauer, Node.js 컨트리뷰터

Node.js에서는 사람이 가장 중요하다

Node.js에 헌신하는 사람들을 만났을 때 이들은 모두 위 의견을 핵심원리로 생각하고 있었습니다.
커뮤니티 위원회(Community Committee)
만날 때마다 그 근간에서 이 생각을 보았습니다. 이 생각이 저를 더 움직이고 참여하게 했습니다.
커뮤니티 활성화로 가능하게 하는 것이 우리의 임무이고, 사람들이 어떤 언어를 사용하고 그들이 어떤 배경을
가졌는지와 상관없이 사람들이 할 수 있게 하는 것을 깊이 신경 쓰고 있습니다.

최근 Node.js를 국제화하는 일을 커뮤니티 위원회가 맡았고
이전에 멈춘 작업을 이어서 한다는 일에 기대하고 있습니다.
커뮤니티와 런타임이 제공하는 모든 것에서 아무도 언어의 차이를 겪지 않도록 하겠습니다. 2016년
Node.js 사용자 설문조사
참여자의 49%는 영어를 두 번째 언어로 사용한다고 응답했습니다. 사용자가 Node.js를 사용하고자 할 때
영어가 모국어일 필요가 없고 이상적으로는 영어를 전혀 몰라도 상관없어야 합니다.

따라서 커뮤니티 위원회와 나는 이러한 노력이 더 진행되도록 새로운 제안을 하게 되어 기쁩니다.

간단히 정리하면 다음의 내용을 담고 있습니다.

  • 현재 국제 언어에 관한 Node.js의 요구사항
  • Node.js 국제화(i18n)와 지역화(l10n) 상태 보고서
  • 커뮤니티 위원회의 역할 중 하나로 Node의 i18n이 앞으로 나아가게 하려는 우리의 제안

현재 국제 언어에 관한 Node.js의 요구사항

Ndoe.js 생태계의 언어 상황은 아주 거대합니다.

최근 npm에서 npmjs.com 방문자의 기본 브라우저 설정에 기반을 둬서
전 세계 Node.js 커뮤니티의 현재 언어 선호도를 볼 수 있는 자료를 제공했습니다.[1] 이 자료로
현재 가장 번역이 필요한 부분이 어디인지 명확하게 알 수 있습니다.

Node.js 사용자의 상위 10개 언어

이 자료에서 알 수 있는 내용은 다음과 같습니다.

  • Node.js 사용자 중 30% 이상은 영어가 아닌 언어를 모국어로 사용합니다.
  • 사이트, 문서, 튜토리얼, Node 코어에 필요한 텍스트 요소(예: 에러 메시지[2])를 위의 언어로
    번역하는 것은 아주 중요합니다. 이는 현재 사용자를 배제하거나
    프로젝트의 잠재적인 성장을 억누르지 않기 위함입니다.
  • 앞으로 나아가려면, l10n 프로젝트 대상의 우선순위는 위에 나온 언어 순서로 정의될 것입니다.

i18n의 현재 상태와 해결하려는 문제

io.js i18n이 Node의 분위기를 정했습니다

io.js로 포크한 즐거움으로 프로젝트의 l10n 그룹을 만들자는 진지한 움직임이 있었고
이는 꽤 성공적이었습니다!

iojs.org의 언어 옵션

Node.js 재단이 생겼을 때 io.js i18n 방법론이 그대로 넘어와서
현재 Node 작업 모델의 템플릿이 되었습니다.

현재 Node.js i18n 절차
  • l10n 그룹은 해당 언어 커뮤니티의 필요에 따라 Node의 콘텐츠를 자신들의 언어로 번역합니다.
  • 번역 커밋을 l10n 저장소에 올립니다.
    (예: nodejs/nodejs-fr)
  • 기술 결정 위원회가 i18n 프로젝트를 결정하고
    Intl 워킹 그룹이 주도해서 l10n 그룹과 직접 일하면서
    Node 사이트, 문서, 모듈, 코어에 변경사항을 적용합니다.

이 모델은 때로는 Node에 이점으로 작용했지만, 이 모델이 가진 중대한 이슈들이
프로젝트가 더 나아가지 못하게 하고 있습니다.

무엇이 문제입니까?

이슈 1: 제각각인 속도

여러 번 시도했지만, 최신 변경사항을 따라가면서 모든 API 문서를 번역하는 것은 너무 힘듭니다.
아주 중요하지만 다 번역하지 못하고 있습니다.

Daijiro Wachi, Node.js 협업자

이러한 증거처럼 현재의 번역 시스템이 점점 비효율적이 되고(변경사항이 업스트림에 적용되는 속도) 있다는
것은 명백합니다. 효과적인 방법으로 능률적으로 바꾸고 통합하는 것이 불가능합니다.

이슈 2: GitHub 프로세스로 인한 병목화

  • 번역자는 GitHub의 작업 흐름과 UI를 탐색하는 방법을 반드시 이해해야 합니다.
    이미 GitHub을 사용해본 사람은 괜찮지만 그렇지 않은 사람에게는 불필요한 장벽입니다.
  • 각 기여자가 l10n 그룹에 PR이나 수정사항을 만들려면 시간이 걸리고 Node.js i18n 프로젝트의
    PR이나 수정사항도 눈에 띄게 느려졌습니다. 여기에 우선순위를 지정하고 리뷰하는데 추가 시간이 필요하며
    생산성은 정체될 정도로 점점 느려졌습니다.

이슈 3: l10n 그룹 의지력의 지속성

“프랑스어 저장소는 2년 전에 죽은 것으로 보인다.”

Benjamin Zaslavsky, Node.js 개발자

이는 앞의 두 이슈의 부작용으로 보입니다.

l10n 프로젝트가 코어의 변경 속도를 따라갈 수 없고, 번역할 수 있는 사람의 수가 GitHub 작업 흐름을
이해하거나 배우려는 사람들로 제한된다면, 대부분은 번아웃을 경험한 후에 프로젝트에 관한
그룹의 흥미가 사라지게 됩니다.

l10n 그룹이 i18n 프로젝트에 작업하는데 Node.js 코어의 통합 주기가 불규칙적이라면 번역에 관한
추진력은 아마도 사라질 것입니다. 사람들은 자신이 변경한 내용이 적용될 때 흥미를 갖게 됩니다.

Node.js i18n v2

Node.js가 세계화될수록 Node i18n의 짐은 더 커지므로 이 절차를 다시 생각해
볼 필요가 있습니다. 다행히 우리가 배울 수 있는 멋진 사람들이 주변에 많이 있습니다.

Electron의 예시에서 배우기

Electron 커뮤니티는 국제화에 뛰어난 작업을 하고 있고 최근
케이스 스터디
구현 결정[3]에서 많은 것을 배울 수 있습니다. Electron 커뮤니티는
Crowdin 지역화 관리 플랫폼과 뛰어난 Node.js 모듈을 사용해서
Node.js의 i18n이 현재 필요로 하는 훌륭하고 현명한 패턴을 제안하고 있습니다.

Crowdin의 장점

  • 번역하는 사람에게 GitHub 환경을 요구하는 것은 꽤 혼란스럽습니다.
    Crowdin은 이를 간단하고 유용한 인터페이스로 잘 추상화했습니다.

  • 각 지역화 프로젝트는 코어 프로젝트 문서의 디렉터리를 담고 있습니다. 이는 무엇이 번역되지 않았는지
    번역하는 사람에게 가시성을 지속해서 제공하며 전체 절차를 간소화합니다.

  • 간단한 작업 환경은 번역되지 않은
    문서를 한 곳에서 제공하고, 갱신되고 있는 지역화된 버전은 다른 곳에서 제공합니다.
  • Crowdin 프로젝트는 국제화 프로젝트의 PR과 수정사항을 자동화해서
    기존 GitHub 저장소와 자연스럽게 통합됩니다.
  • 오픈소스 프로젝트는 공짜입니다!

직접 작성한 i18n 모듈

Electron 커뮤니티의 가장 빛나는 부분은
electron-i18n이라고 생각합니다.
모든 번역의 현재 상태를 담고 있는 JSON 객체를 제공하므로 부모 프로젝트가 사용할 수 있고
번역되지 않은 부분은 영어로 자연스럽게 보여줍니다.

Node.js의 새로운 i18n 절차

다른 i18n 프로젝트가 Crowdin 서비스와 커스텀 모듈을 잘 활용하는 것을 보면서
Node.js의 새로운 국제화 절차를 제안하게 되어 기쁩니다.

새로운 Node.js i18n 절차 제안
  • Node.js 커뮤니티 위원회의 새로운 i18n 워킹 그룹이 Node의 번역 기반을 모으고 지원합니다.
    이는 현재 l10n 그룹, 개인 번역가, 고용된 번역가(만약 전략적인 이니셔티브의
    우선순위에서 이가 필요하다면)로 이루어져 있습니다.
  • 번역 기반은 번역 작업을 할 때 Crowdin 지역화 프로젝트를 활용합니다.
    프로젝트는 통계적인 필요와 커뮤니티의 요구에 따라 생깁니다.
  • Crowdin l10n 프로젝트의 작업은 해당 Node.js i18n 저장소에 PR과 수정사항을 자동으로 생성합니다.
  • Node.js i18n 저장소는 모든 언어로 번역된 하나의 큰 JSON 객체를 내보내고 여기에는
    모든 사이트, 문서, 튜토리얼, Node.js 코어에 도움 되는 문자를 담고 있습니다.
  • 전략적인 이니셔티브를 구현하려고 Node.js가 필요로 할 때마다 i18n 모듈을 임포트하고 사용합니다.

잘 알고 있듯이, l10n 그룹과 코어 통합 간의 끊어진 연결을 이어주는 것이 Node.js 모듈일 것입니다! 😎

전략적 이니셔티브 지원

i18n 워킹 그룹 지원에 있어 가장 급한 사항은
새로운 웹사이트입니다.

웹사이트가 Node.js와 커뮤니티 위원회 이니셔티브의 얼굴이므로 i18n은 프로젝트의 핵심이 될 것입니다.
우리는 개발 일정과 함께 이를 추적할 것입니다.

웹사이트가 다시 잘 디자인 되도록 돕고 Node의 국제화 수준을 더 높일 것입니다.

도움이 필요합니다

“어떤 바보라도 복잡한 일을 만들 수 있습니다. 이를 간단하게 하려면 천재가 필요합니다.”

Woody Guthrie

간단하게 하려면 많은 작업이 필요합니다. 참여하고자 하는 모든 사람의 도움이 필요합니다.

이제 남아 있는 작업

  • 이 제안과 관련된 현재 Node i18n 그룹의 동의를 받아야 합니다.
  • 제안이 받아들여진다면 이를 알리고 그룹에 번역 도움을 요청합니다.
    여기에 참여하고자 하는 사람들을 초청해야 합니다.
  • 새로운 i18n 모듈을 만들기 시작하고 그 과정에서 Node.js 코어 기여자와
    TSC와 논의합니다.
  • 웹사이트를 개편하고 통합하는 진행 상황을 추적합니다.

도와줄 방법

커뮤니티 위원회에서 진행 상황을 확인하고
언제든 자유롭게 참여하면 됩니다. i18n 워킹 그룹 저장소는 곧 사용할 수 있게 될 것입니다.

이제 해야 할 큰 작업이 있고 당신이 합류하게 되어 기쁘게 생각합니다.


Adam Miller, Ben Tiriel, Rachel White, Daijiro Wachi, Tierney Cyren, Zeke Sikelianos, Tracy Hinds, DShaw, James Snell, Michael Dawson과 이 작업에 기여하는 모두에게 감사드립니다.


  1. 언어 선호도 상태를 제공해준 npm과 Adam Miller에게 감사드립니다. ↩︎

  2. 이 아이디어를 제안한 Michael Dawson에게 감사드립니다. ↩︎

  3. 커뮤니티 위원회 이슈에서 "댓글로 주도"를 제공한 Zeke Sikelianos에게 감사드립니다. ↩︎