Weblate에 새 프로젝트 생성

프로젝트 생성

화면 상단의 ‘+’아이콘 -> 새로운 번역 프로젝트 추가를 누르면 프로젝트 생성 창이 뜹니다.

와 같이 작성하면, 프로젝트 정보란에 아래와 같이 표시됩니다.

파일 추가

Weblate는 A 언어->B 언어로 번역하는 데 도움을 주는 도구가 아니라 A-> B, C, D, E 등 불특정 ‘다수’의 언어로 번역하는 데 사용하는 도구이기에

  • A 언어가 담긴 파일
  • B, C, D, E, … 등 언어를 번역할 때 쓰일 최초의 파일

이 필요하고, 파일의 이름이든, 폴더의 이름이든 파일의 경로에서 각 언어을 구분할 수 있어야 합니다.

폴더 별 언어 구분

파일별 구분

그리고, Weblate에서는 번역 파일을 파일 단위로 관리하지 않고 ‘구성요소'(컴포넌트) 단위로 관리합니다. 이는 아래 단계들에서 다시 살펴볼 예정입니다.

본격적으로 번역할 파일을 추가하기 전에 용어집을 먼저 추가하는 것이 좋습니다.

경우에 따라 자동으로 만들어진 용어집을 사용할 수 있지만, 직접 만들어주면 버전관리할 때 큰 도움이 됩니다.

용어집 추가

‘구성 요소’ -> ‘새로운 번역 구성 요소 추가’를 누르고 ‘처음부터 시작’ 탭을 누릅니다.

내용은

  • 구성 요소 이름: 프로젝트 이름 그대로 쓰는 것을 추천
  • URL 슬러그: ‘glossary’를 추천
  • ‘Use as a glossary’: 체크
  • 프로젝트: 그대로
  • 원본 언어: 번역하고자 하는 원문의 언어
  • 파일 유형: TermBase eXchange file 추천 (다른 파일 형식은 Weblate의 단어집 기능을 온전하게 쓰지 못합니다)

로 작성하고 ‘계속’을 누릅니다.

‘구성 요소 업데이트 중’에서 넘어가지 않으면

‘이전의 구성 요소로 돌아가기’를 두번 누르면 방금 만든 용어집을 볼 수 있습니다.

이 이후로는

번역할 파일 개수가 적다면

  • 문서 번역
  • 처음부터 시작

번역할 파일 개수가 많다면

  • 번역 파일 올리기
  • 버전 관리

를 선택해서 파일을 추가하면 됩니다.

구성 요소 생성

프로젝트 페이지 -> 구성 요소 탭 -> 새로운 번역 구성 요소 추가로 구성 요소를 추가할 수 있습니다.

버전 관리를 제외하고 나머지 3가지 방법은 한 언어에 번역할 파일이 10개 있으면 아래의 작업을 번역할 파일별로 10번 반복해야합니다.

처음부터 시작

(작성중 4순위)

문서 번역

(작성중 3순위)

번역 파일 올리기(ZIP)

같은 내용을 담은 원문과 번역문 파일을 압축합니다. 위에서 설명한 대로 번역 파일은 (폴더 이름으로 구분 하던, 파일 이름으로 구분하던) 경로명에 언어 코드가 있어야 합니다.

  • ui.zip
    • de
      • ui.json
    • en
      • ui.json
    • fr
      • ui.json
    • ko
      • ui.json

만약 원문만 있는 경우

  • ui.zip
    • en
      • ui.json

과 같이 압축하시면 됩니다.

그리고 이 파일을 업로드 하면 ‘구성 요소 이름’과 ‘URL 슬러그’가 자동으로 ZIP 파일 이름으로 변경되는데 그대로 두셔도 좋고, 바꾸셔도 좋습니다.

원본 언어는 다른 언어 번역은 다 없에도 남아 있을 마지막 언어를 지정하시면 됩니다. 기본적으로 원문(또는 영어)로 선택하시면 됩니다.

가져올 번역 파일 선택에서 파일 유형 ‘~’, 파일 마스크 ‘~’ 가 자동으로 지정된 경우도 있으면 제대로 되었는지 확인하고 아니라면 ‘수동으로 구성 지정’을 선택합니다.

중요한 옵션

  • 파일 유형: 업로드한 원문 파일의 형식. 확장자를 보고 선택하시면 됩니다.
  • 파일 마스크: 경로명(폴더 이름+파일명)에서 어디가 언어 코드인지를 Weblate에 알려줍니다.
    이것 때문에 번역할 원문 파일이 1개 (한 언어) 뿐이라도 경로명에 언어코드가 들어가야 합니다.
  • 새 번역 템플릿: 번역할 언어를 추가할 때 어떤 파일을 복사해서 사용할 것인지 정하는 곳입니다.

업로드한 번역 파일(ZIP)이

  • ui.zip
    • de
      • ui.json
    • en
      • ui.json
    • fr
      • ui.json
    • ko
      • ui.json

이면

일본어를 추가할 때

  • de
    • ui.json
  • en
    • ui.json
  • fr
    • ui.json
  • ko
    • ui.json
  • ja
    • ui.json

과 같이 만들텐데 ‘ja/ui.json’ 파일을 만들 때 어느 파일을 복사할 것인지 정하는 곳입니다.

보통 영어 원문을 지정(이 경우 en/ui.json)합니다.

파일 형식이 GetText(*.po)인 경우 po는 원문 정의, pot가 번역문 정의이기에 pot 파일을 지정하시면 됩니다.

위 3개를 지정하고, 저장을 누르면 아래와 같이 새로운 ‘구성 요소’가 만들어집니다.

버전 관리

대량의 파일을 추가한다면, 위의 3개 방법으로는 파일 별로 반복해서 작업해야합니다.

버전 관리를 통해 원문을 관리하면 대량의 파일을 한번에 추가하고, 새로운 원문 파일이 생겼을 때 ‘구성 요소’를 자동으로 추가해줍니다.

GitHub 계정 연동

프로젝트 -> 관리 -> API 접근에서

SSH 키를 전체 복사하여

GitHub 계정 아이콘 클릭 -> Settings의

SSH and GPG keys -> New SSH Key를 클릭합니다

Weblate에서 복사한 SSH 키를 여기에 붙여넣고 Title을 채운 뒤 ‘Add SSH Key’를 누릅니다.

이렇게 하면 개인 계정의 비공개 레포지토리나 레포지토리에 번역한 파일 반양 등의 작업을 할 수 있습니다.

용어집을 만들 때 저장소 활용하기

추가 기능은 프로젝트 단위가 아닌 컴포넌트 단위로 적용되고, 저장소에서 자동으로 번역할 파일을 불러오는 ‘구성 요소 발견’ 추가 기능을 사용할 때 추가 기능을 등록할 컴포넌트에서 사용하는 저장소를 기준으로 합니다.

따라서, 용어집을 만들 때 GitHub를 활용하여 만들어야합니다. 기존에 이미 만들어 둔 저장소가 있으면 지우고 계속하세요.

먼저 GitHub에 원문/기존에 번역되어있는 번역문을 올려둡니다. 예제에서는 아래의 구조를 가지는 저장소를 만들어두었습니다. (https://github.com/dmc31a42/Weblate-New-Project-Tutorial)

  • de
    • equipment.json
    • localization.json
    • tooltip.json
  • en
    • equipment.json
    • localization.json
    • tooltip.json
  • fr
    • equipment.json
    • localization.json
    • tooltip.json

저장소에서 Code -> Clone -> SSH 주소를 복사합니다.

용어집 구성 요소를 만들때 위에서 소개한 방법과 거의 비슷하지만 ‘처음부터 시작’ 탭이 아닌 ‘버전 관리에서’ 탭에서 필요한 내용을 채우고 ‘소스 코드 저장소’ 에 방금 복사한 주소를 넣어줍니다.

계속을 누른 뒤 나오는 ‘새로운 번역 구성 요소 추가’ 창에서

  • 파일 유형: TermBase eXchange file 선택
  • 파일 마스크: ‘*.tbx’ 입력

한 뒤 저장을 누릅니다.

‘커뮤니티 현지화 점검표’가 나오면 정상적으로 용어집이 만들어졌습니다. ‘이전의 구성 요소로 돌아가기’를 누르면 방금 만든 용어집 구성 요소 화면이 나옵니다.

프로젝트에서 저장소 불러오기

방금 만든 용어집 구성 요소에서 ‘관리 -> 추가 기능’ 을 누릅니다.

추가 기능 화면에서 ‘구성 요소 발견’의 ‘설치’를 누릅니다.

구성 요소 발견 추가 기능 설정창에서 아래의 것을 채워야합니다.

번역 파일과 일치하는 정규 표현식

저장소에 업로드된 파일 경로를 기준으로 언어와 컴포넌트 명을 추출하는 정규 표현식을 작성해야합니다.

예시로는

전체 파일 경로가

en/locaization.json

이고, 정규 표현식을 아래와 같이 작성한다면

(?P<language>[^/.]*)/(?P<component>[^/]*)\.json

‘?P<language>’에 해당하는 부분은 en

‘?P<component>’에 해당하는 부분은 localization이 됩니다.

파일 유형

원문, 번역문의 파일 유형을 선택합니다. 보통 확장자로 구분할 수 있습니다.

구성 요소 이름을 커스터마이즈하기

‘번역 파일과 일치하는 정규 표현식’에서

(?P<component>[^/]*)

구문으로 경로명에서 추출한 컴포넌트 이름에 무언가 덧댈 것이 있으면 덧대줍니다. 파일명을 그대로 컴포넌트 이름으로 쓴다면

{{ component }}

로 쓰면 됩니다. 예시로는

  • equipment
  • localization
  • tooltip

가 구성 요소의 이름이 됩니다.

새 번역을 위한 기본 파일 정의하기

‘번역 파일 올리기(ZIP)’에서 설명했던 대로 새로운 언어를 추가할 때 어떤 언어의 파일을 복사해서 추가할 언어에서 사용할 파일로 쓸지 지정해야합니다. 보통 영어 파일을 복사해서 사용합니다.

예시에선

en/{{ component }}.json

와 같이 영문 원문 파일을 지정했습니다. 그러면 localization 구성 요소에서 한국어 (‘ko’)를 추가하면 ‘en/localization.json’ 파일을 복사해서 ‘ko/localization.json’ 파일을 만들고 이 파일을 수정하여 번역하게 됩니다.

보통 원문과 번역문의 파일 확장자가 같으나 GetText (*.po/*.pot) 의 경우 .pot 파일을 지정해야합니다. (.po 파일은 원문만 있을 뿐 번역문은 없는 파일이기 때문)

위의 내용들을 작성하고 저장을 누릅니다. 만약 잘못 작성한 경우 저장을 누른 후 예상되는 결과를 미리 보여주니 결과를 보고 입력했던 값들을 수정하여 원하는 결과를 얻을 수 있습니다.

만약 잘못 작성했다면, 일치하는 구성 요소가 없다고 안내해줍니다.

구성 요소/언어 별로 잘 구분된 것을 확인했으면 ‘나는 위의 일치 항목이 올바른지 확인합니다’를 체크하고 다시 저장을 누릅니다.

‘구성 요소 발견’ 추가 기능이 잘 설정되었다면 설치된 추가 기능에 구성요소 발견을 확인할 수 있습니다.

프로젝트 화면의 구성 요소 탭으로 가면 추가 기능 설정창에서 미리 보았던 구성 요소들이 정상적으로 불러와진 것을 확인할 수 있습니다.

크롬이 NT-style 마운트된 폴더를 네트워크 폴더라 오인할 때

‘COULD_NOT_GET_TEMP_DIRECTORY’ 라고 확장프로그램이 설치되지 않을 때

디스크 용량이 부족해서 다른 드라이브를 C:\Users 폴더에 마운트 했는데 크롬에서 이 디렉토리를 네트워크 디렉토리라 판단하는 것 같다.

크롬과 관련된 경로만 로컬에 심볼링크를 만들어주면 해결

나의 경우

SET Google=C:\Google
mkdir %Google%
mv %LOCALAPPDATA%\Google %Google%
mklink /j %LOCALAPPDATA%\Google %Google%

와 같이 구글과 관련된 모든 폴더를 루트에 만들었다.(Chrome, Chrome Dev 두 개를 사용하기 때문)

참고: https://bugs.chromium.org/p/chromium/issues/detail?id=413889#c122

스테레오 믹스처럼 원하는 소리만 추출하여 방송프로그램으로 전달하기

예전에는 윈도우에서 재생되는 소리중 일부만을 스테레오 믹스에 넣으면 녹화프로그램 등에서 가져와다 쓸 수 있었는데 요즘은 안되는 것 같습니다.
그래서 별도의 프로그램을 사용하여 데스크탑에서 재생되는 모든 소리가 아닌 일부 소리만 캡쳐할 수 있는 방법을 알려드리고자 합니다.

https://www.vb-audio.com/Voicemeeter/ 에서 Voicemeeter EXE file을 다운받습니다.

다운받은 프로그램을 실행시키면 설치 화면이 나옵니다. ‘Install’을 클릭합니다.

설치가 다 되면 컴퓨터를 재부팅하라는 문구가 나옵니다. 닫고 컴퓨터를 재부팅해줍니다.

사운드 장치를 보면 VoiceMeeter Input이라는 출력장치랑 VoiceMeeter Output이라는 입력장치(Input과 Output을 반대로 적은 것이 아닙니다)가 보입니다.

이제 ‘바탕화면 오른쪽 하단 작업표시줄의 사운드 아이콘 오른쪽 클릭 -> 소리 설정 열기’ 또는 ‘설정->시스템->소리’에 있는 소리으로 들어갑니다.

소리 설정에서 아랫쪽에 있는 ‘고급 사운드 옵션 -> 앱 볼륨 및 장치 기본 설정’으로 들어갑니다.

여기서 사운드를 분리하고자 하는 프로그램의 출력을 ‘기본값’에서 ‘VoiceMeeter Input’으로 변경합니다.

그럼 이상태에서는 그 프로그램의 소리는 안들려야 정상입니다. 만약 들린다면 그 프로그램을 껐다 켜주세요

만약 껐다 켰는데도 안된다면 프로그램이 사운드 장치를 설정할 수 있는지 확인합니다.

그런 것 조차도 없다면, 프로그램을 실행하기 전에 시스템의 기본 출력장치를 VoiceMeteer로 변경하고 프로그램을 실행한 뒤 다시 원래 출력장치로 바꿉니다.

프로그램 실행 전에 재생 디바이스를 VoiceMeeter Input으로 변경
프로그램을 실행한 다음 원래 사용하던 재생 디바이스(여기서는 스피커(Realtek …))로 변경

소리가 정상적으로 설정되었는지 확인하려면 볼륨 Mixer를 띄워서 장치를 VoiceMeteer로 변경하신 다음 확인해보시면 됩니다. 프로그램간 소리 크기도 여기서 조절하시면 됩니다. Mixer를 사용하고 난 뒤에는 기본 재생장치를 원래 장치로 돌려놓으셔야합니다. 이상태로 쓰시면 그 이후에 실행되는 프로그램들이 전부 VoiceMeeter로 출력을 할 껍니다.

이렇게 분리된 사운드를 방송 프로그램에서 사용하려면 각종 프로그램에서 마이크/보조/입력 장치에서 VoiceMeteer Output를 선택하면 됩니다.

OBS기준으로 마이크/보조 오디오 2에 VoiceMeeter Output을 설정해두었고 OBS의 오디오믹서에서 정상적으로 사운드가 들리는지 시각적으로 확인해봅니다.

이렇게 사운드를 다른 장치로 돌리면 이걸 컴퓨터로 직접 듣고 싶다할때는 VoiceMeeter를 실행해줍니다.

그리고 Engine 로딩이 끝난 후 HARDWARE OUT에 A1을 클릭하고 WDM으로 시작하는 원래 사용하던 사운드 출력장치를 선택합니다. 그러면 VoiceMeeter Input으로 사운드가 출력되게 설정한 프로그램의 소리도 데스크탑에서 들을 수 있습니다.

이렇게 설정해두시면 OBS에서는 데스크탑 사운드는 꺼두셔야합니다. 아니면 소리가 두번 들립니다.

OpenTTD mac static compile

https://wiki.openttd.org/Compiling_on_Mac_OS_X 공식 웹사이트에 컴파일을 한 파일을 배포하면 개발과 상관없는 사람이 실행했을 때 ‘문제가 있기 때문에 OpenTTD을(를) 열 수 없습니다.’ 라는 오류가 발생했다고 뜨는 현상이 발생한다. 이는 거의 대부분 실행에 필요한 라이브러리가 설치되어 있지 않기 때문이며, 컴파일할 때 –enable-static 옵션을 주어도 필요한 라이브러리 중 일부가 바이너리 파일(실행 파일)에 포함되지 않기 때문에 발생하는 오류이다. 오류가 발생했을 때 리포트를 클릭하고 세부사항 보기를 누르면 Dyld Error Message에 Library not loaded에 표시된 파일을 읽어올 수 없다고 표시가 뜰 것이다. 정확한 이유는 모르겠지만 일부 아리브러리 중에서 static으로 컴파일 할 수 없는 라이브러리가 있어서 그런 것이라 파악되고 이러한 라이브러리를 직접 컴파일 한 후 OpenTTD를 컴파일 할 수 있는 방법을 소개하고자 한다.

계속 읽기 “OpenTTD mac static compile”

ESXi Let’s Encrypt auto renewal in ESXi host

It show How to auto-renewal “Let’s Encrypt” certificate in ESXi host. When I search, I can find a method in case that a site is received DNS service from AWS Route 53.1) But, there is no way to renewal Let’s Encrypt certificate in ESXi host itself.  So, I wrote this article.

If you find Korean lecture, please visit ‘ESXi Let’s Encrypt 자동 renewal

계속 읽기 “ESXi Let’s Encrypt auto renewal in ESXi host”

ESXi Let’s Encrypt 자동 renewal

ESXi 호스트에서 Let’s Encrypt를 자동으로 renewal 하는 방법이다. 지금까지 살펴본 결과 AWS Route 53를 통하여 DNS 서비스를 제공받는 경우에는 방법이 있으나1) 그 외의 경우에는 ESXi 호스트 자체적으로 Let’s Encrypt 인증서를 생성하고 renewal 하는 방법이 없어 강좌를 작성한다.

If you find english lecture, please visit ‘ESXi Let’s Encrypt auto renewal in ESXi host

계속 읽기 “ESXi Let’s Encrypt 자동 renewal”