본문으로 건너뛰기

수집된 텍스트 — text 타깃

「내보내기」로 돌아가기


text 타입으로 적힌 컬럼의 값들을 그룹마다 파일 하나로 씁니다.

값 자체는 다른 내보내기로 그대로 나가므로, 이 타깃을 빼도 빌드가 읽는 것은 하나도 달라지지 않습니다.

형식은 이 도구가 갖고 있지 않습니다. 기본 형식도 없습니다.

수집된 파일을 읽는 것은 남의 엔진이거나 남의 번역 파이프라인이고, 이 도구가 고른 형식이 다음 프로젝트에서 맞을 이유가 없습니다.

그래서 Format을 적지 않으면 무엇을 적어야 하는지 출력하고 멈춥니다.

{
"Type": "text",
"Path": "./game/cms/textset",
"FileExtension": ".textset",
"Format": "NSLOCTEXT(\"{namespace}\", \"{text}\", \"{text}\")",
"LineEnding": "crlf"
}
NSLOCTEXT("", "몸으로 말해요", "몸으로 말해요")
NSLOCTEXT("", "바가지 회피", "바가지 회피")

NSLOCTEXT는 네임스페이스, 키, 원문 셋을 받습니다.

위에서 키 자리에 원문이 들어간 것은 키를 두지 않는 관례입니다. 시트에 내줄 키 컬럼이 없고, 문자열이 자기를 식별합니다.

고정된 키를 원한다면 시트에 있는 것으로 만들면 됩니다. "{group}_{index}"가 그 예입니다.

채워 넣는 이름

이름무엇
{text}그 파일 형식에 맞게 이스케이프된 값. 아래
{raw}시트에 있는 그대로
{group}그룹 이름. 파일 이름이기도 합니다
{namespace}그 그룹이 속한 네임스페이스. 컬럼에 적힌 것이거나, 아무 컬럼도 적지 않았으면 이 항목의 Namespace
{table} · {field}어느 테이블 어느 컬럼에서 왔는지
{location}워크북, 시트, 셀
{index}파일 안에서 몇 번째인지. 1부터
{count}그 파일이 든 개수. HeaderFooter에서만 사용할 수 있습니다

네임스페이스가 그룹보다 바깥입니다.

그룹 하나가 파일 하나이고, 그 파일이 네임스페이스 하나에 속합니다. 문자열마다 붙는 것이 아닙니다.

그래서 한 그룹으로 모이는 컬럼들의 네임스페이스가 서로 다르면 오류입니다. 적지 않은 컬럼은 이견이 아니라 그룹의 것을 따릅니다.

{{}}는 중괄호 한 개입니다.

수집되는 문자열에는 중괄호가 흔합니다. {0} 애호가가 그런 문장이고 치환 대상이 아닙니다. 패턴은 한 번만 훑으므로 채워 넣은 값 안으로는 다시 들어가지 않습니다.

이스케이프는 확장자가 정합니다

설정이 아닙니다.

형식마다 맞는 답이 하나뿐이고, recipe의 FileExtension에 어느 형식을 쓰는지 이미 적혀 있습니다. 한 번 더 적는 것은 나중에 서로 어긋날 자리를 만드는 것입니다.

확장자{text}가 하는 것
.json · .jsonl · .ndjsonJSON 문자열 내용. 제어문자까지 처리합니다. JSON 문자열 안의 줄바꿈은 파싱 오류입니다
.xml · .xlf · .xliff · .resx · .html& < > " ' 를 엔티티로
.csv"를 두 번으로
.tsv탭과 줄바꿈을 이스케이프합니다. 이 형식에서는 그것들이 구분자입니다
그 외 (.textset 포함)\" 앞에 \

같은 문자열 The "Blue" Whale이 5개 파일에 5가지로 나갑니다.

recipe는 아무것도 적지 않았고 확장자만 달랐습니다.

여러 줄과 감싸는 구조

옵션무엇
Header · Footer앞뒤로 한 줄씩. {group}, {namespace}, {count}만 사용합니다. 파일에 대한 것이지 문자열 하나에 대한 것이 아니기 때문입니다
Separator마지막 항목 뒤에는 붙지 않습니다. 패턴은 어느 것이 마지막인지 볼 수 없고, JSON은 마지막 쉼표 하나로 무효가 됩니다

이 셋이면 감싸는 형식도 여기서 됩니다.

{
"Type": "text",
"Path": "./out/loc",
"FileExtension": ".json",
"Header": "[",
"Format": " {{ \"text\": \"{text}\", \"from\": \"{table}.{field}\" }}",
"Separator": ",",
"Footer": "]"
}

그 밖의 옵션

옵션기본값무엇
FileExtension.txt그룹 이름 뒤에 붙고, 이스케이프를 정합니다
Namespace비어 있음어느 컬럼도 적지 않은 그룹의 네임스페이스
LineEndinglf남의 도구가 만든 트리에 끼어드는 파일이라, 실행마다 전부 diff가 나는 것을 피할 자리입니다
Sweeptrue이번 실행이 쓰지 않은 파일을 지웁니다. 매니페스트에 적힌 것만 지웁니다
Template없음Scriban 템플릿. 한 줄 패턴으로 나타낼 수 없을 때. Format과 둘 다 적으면 오류입니다

Sweep이 매니페스트에 적힌 것만 지우는 이유는, 번역자가 보는 파일이 남아 있는 것이 낡은 소스보다 나쁘기 때문입니다.

Template은 항목마다 결정할 것이 있는 형식을 위한 것입니다. 어느 테이블에서 왔느냐에 따라 줄이 달라지는 경우가 그렇습니다.

이름만 적으면 이 도구가 담고 있는 것을 사용합니다. textset-unreal 하나뿐이고, 위 첫 예시의 패턴을 그대로 적어 둔 것입니다. 경로나 .sbn이 붙으면 프로젝트 자기 파일입니다.

템플릿이 받는 것은 group.name, group.namespace, group.entries, entry.text, entry.raw, entry.table, entry.field, entry.location입니다.

줄 끝의 공백은 잘립니다. Template을 쓸 때만입니다. 템플릿 엔진이 모든 생성 파일에 하는 일이고, Format은 거치지 않습니다.