From 1622a2fc51ec5c3a3fda4b59a7222b52ee3d5d28 Mon Sep 17 00:00:00 2001 From: iisaev Date: Fri, 23 Oct 2026 20:54:49 +0200 Subject: [PATCH] Localization in es, zh, ja, ko, vi; map and events files end with a line break; no novel editor hub in docs --- locale/ui_es.properties | 104 ++++++++++++++++++++++++++++++++ locale/ui_ja.properties | 104 ++++++++++++++++++++++++++++++++ locale/ui_ko.properties | 104 ++++++++++++++++++++++++++++++++ locale/ui_vi.properties | 104 ++++++++++++++++++++++++++++++++ locale/ui_zh.properties | 104 ++++++++++++++++++++++++++++++++ manifest.json | 2 +- src/RpgMapDocument.cs | 6 +- src/RpgMapEditorToolProvider.cs | 2 +- tests/RpgMapDocumentTests.cs | 2 + 9 files changed, 527 insertions(+), 5 deletions(-) create mode 100644 locale/ui_es.properties create mode 100644 locale/ui_ja.properties create mode 100644 locale/ui_ko.properties create mode 100644 locale/ui_vi.properties create mode 100644 locale/ui_zh.properties diff --git a/locale/ui_es.properties b/locale/ui_es.properties new file mode 100644 index 0000000..2604616 --- /dev/null +++ b/locale/ui_es.properties @@ -0,0 +1,104 @@ +mod_rpg_editor_name = Editor de mapas RPG +mod_rpg_editor_desc = Editor de mapas de casillas del mundo RPG: tres capas de casillas, la capa de colisiones y los eventos del mapa, con deshacer y vista previa en vivo en el juego en marcha. +tools/rpg_editor/title = Editor de mapas RPG +tools/rpg_editor/hint = Clic izq.: pintar · clic der.: borrar · Alt+clic izq.: tomar casilla · eventos: clic: seleccionar/arrastrar, doble clic: añadir, Supr: borrar · 1–5 capas · B/E/G pincel · rueda/Mayús+rueda, arrastrar con botón central: desplazar · Ctrl+rueda: zoom · Ctrl+Z/Y · Ctrl+S +tools/rpg_editor/layer_back = Fondo +tools/rpg_editor/layer_main = Principal +tools/rpg_editor/layer_front = Frente +tools/rpg_editor/layer_collision = Colisiones +tools/rpg_editor/layer_events = Eventos +tools/rpg_editor/tool_pencil = Lápiz +tools/rpg_editor/tool_eraser = Goma +tools/rpg_editor/tool_fill = Relleno +tools/rpg_editor/grid = Cuadrícula +tools/rpg_editor/zoom_in = Acercar +tools/rpg_editor/zoom_out = Alejar +tools/rpg_editor/undo = Deshacer +tools/rpg_editor/undo_tip = Deshacer el último cambio (Ctrl+Z) +tools/rpg_editor/redo = Rehacer +tools/rpg_editor/redo_tip = Rehacer (Ctrl+Y) +tools/rpg_editor/play = Jugar +tools/rpg_editor/play_tip = Guardar y recorrer el mapa desde su punto de inicio en el juego en marcha +tools/rpg_editor/play_no_scene = El juego no conoce la escena "{0}": revisa scenes/{0}.json en el mod del mapa. +tools/rpg_editor/scene_created = escena {0} creada +tools/rpg_editor/section_palette = Paleta +tools/rpg_editor/section_map = Mapa +tools/rpg_editor/section_spawn = Punto de inicio +tools/rpg_editor/section_encounters = Combates aleatorios +tools/rpg_editor/section_event = Evento +tools/rpg_editor/section_action = Qué hace +tools/rpg_editor/section_teleport = Teletransporte +tools/rpg_editor/map_id = Id +tools/rpg_editor/map_id_tip = El id del mapa es el nombre del archivo y el de la escena que muestra el mapa +tools/rpg_editor/map_name = Clave del nombre +tools/rpg_editor/map_name_tip = Clave de localización del nombre visible del mapa +tools/rpg_editor/tileset = Tileset +tools/rpg_editor/width = Ancho +tools/rpg_editor/height = Alto +tools/rpg_editor/resize = Aplicar tamaño +tools/rpg_editor/zoom = Zoom en el juego +tools/rpg_editor/zoom_tip = Píxeles de pantalla por píxel de casilla en el juego +tools/rpg_editor/x = X +tools/rpg_editor/y = Y +tools/rpg_editor/dir = Orientación +tools/rpg_editor/dir_down = Abajo +tools/rpg_editor/dir_left = Izquierda +tools/rpg_editor/dir_right = Derecha +tools/rpg_editor/dir_up = Arriba +tools/rpg_editor/encounter_steps = Cada ~N pasos +tools/rpg_editor/encounter_steps_tip = Número medio de pasos entre combates aleatorios; 0 los desactiva +tools/rpg_editor/encounter_groups = Grupos de enemigos +tools/rpg_editor/encounter_groups_tip = Ids de personajes, grupos separados por ";": por ejemplo slime; wolf,slime +tools/rpg_editor/no_event = Cambia a la capa Eventos y haz clic en un evento, o haz doble clic en una casilla vacía para añadir uno. +tools/rpg_editor/event_id = Id +tools/rpg_editor/sprite = Charset +tools/rpg_editor/sprite_tip = Ruta de la imagen en el grupo charsets: 3 fotogramas × 4 orientaciones +tools/rpg_editor/tile = Casilla +tools/rpg_editor/tile_tip = Índice del tileset que se dibuja cuando no hay charset; -1 para ninguno +tools/rpg_editor/trigger = Activación +tools/rpg_editor/trigger_action = Tecla de acción (E/F) +tools/rpg_editor/trigger_touch = Al pisarlo +tools/rpg_editor/solid = Sólido +tools/rpg_editor/solid_auto = Cuando se dibuja +tools/rpg_editor/solid_yes = Sí +tools/rpg_editor/solid_no = No +tools/rpg_editor/solid_tile = sólida +tools/rpg_editor/condition = Condición +tools/rpg_editor/condition_tip = Condición de escenario; el evento solo existe mientras se cumple +tools/rpg_editor/scenario = Escenario +tools/rpg_editor/scenario_tip = Ruta en el grupo scenarios, la extensión es opcional +tools/rpg_editor/commands = Líneas de escenario propias, se ejecutan después del escenario: +tools/rpg_editor/teleport_map = Mapa +tools/rpg_editor/teleport_map_tip = Id del mapa de destino; vacío con una casilla indicada significa este mapa +tools/rpg_editor/delete_event = Borrar evento +tools/rpg_editor/collision_block = Muro: siempre bloqueado +tools/rpg_editor/collision_open = Paso: siempre transitable +tools/rpg_editor/collision_auto = Auto: según las casillas +tools/rpg_editor/problem_tileset = El mapa "{0}" no tiene tileset. +tools/rpg_editor/problem_event_id = El evento en {0} no tiene id. +tools/rpg_editor/problem_event_duplicate = Dos eventos comparten el id "{0}". +tools/rpg_editor/tab_tiles = Casillas +tools/rpg_editor/tab_characters = Personajes +tools/rpg_editor/character_search = Buscar por nombre o id +tools/rpg_editor/place_npc = Colocar como PNJ +tools/rpg_editor/place_npc_tip = Pone al personaje en el mapa como un evento que habla con E/F; escribe sus frases en las líneas de escenario +tools/rpg_editor/place_enemy = Colocar como enemigo +tools/rpg_editor/place_enemy_tip = Pone al personaje en el mapa como enemigo: E/F inicia un combate con él y desaparece al ser vencido +tools/rpg_editor/characters_hint = Elige un personaje, pulsa un botón y haz clic en una casilla del mapa (clic derecho cancela). El charset se busca por el campo Charset del personaje o por la ruta de su retrato. +tools/rpg_editor/place_status = Haz clic en la casilla donde poner «{0}» (clic derecho cancela) +tools/rpg_editor/place_cancelled = Colocación del personaje cancelada +tools/rpg_editor/placed_npc = «{0}» colocado como PNJ: evento {1} +tools/rpg_editor/placed_enemy = «{0}» colocado como enemigo: evento {1} +tools/rpg_editor/icon = Icono +tools/rpg_editor/icon_tip = Imagen del grupo items (como el Sprite de un objeto) cuando no hay ni charset ni casilla +tools/rpg_editor/tab_items = Objetos +tools/rpg_editor/item_search = Buscar por nombre o id +tools/rpg_editor/items_hint = Elige un objeto, indica la cantidad, pulsa «Colocar» y haz clic en una casilla (clic derecho cancela). El jugador lo recoge al pisar la casilla; después desaparece. +tools/rpg_editor/item_count = Cantidad +tools/rpg_editor/item_count_tip = Cuántos recibe el jugador +tools/rpg_editor/place_item = Colocar +tools/rpg_editor/place_item_tip = Deja el objeto en el mapa: pisar la casilla lo recoge +tools/rpg_editor/item_found_line = Encontrado: {0} ×{1} +tools/rpg_editor/placed_item = «{0}» está en el mapa: evento {1} +tools/rpg_editor/picker_no_look = No se encontró imagen para el mapa, se muestra un marcador +tools/rpg_editor/problem_event_locked = El id de evento {0} ya lo usa un evento de otro archivo o mod: elige otro diff --git a/locale/ui_ja.properties b/locale/ui_ja.properties new file mode 100644 index 0000000..d573020 --- /dev/null +++ b/locale/ui_ja.properties @@ -0,0 +1,104 @@ +mod_rpg_editor_name = RPG マップエディター +mod_rpg_editor_desc = RPG ワールドのタイルマップエディター:3 つのタイルレイヤー、衝突レイヤー、マップのイベント。元に戻す機能と、実行中のゲームでのライブプレビュー付き。 +tools/rpg_editor/title = RPG マップエディター +tools/rpg_editor/hint = 左クリック——描く · 右クリック——消す · Alt+左クリック——タイルを拾う · イベント:クリック——選択/ドラッグ、ダブルクリック——追加、Del——削除 · 1–5 レイヤー · B/E/G ブラシ · ホイール/Shift+ホイール、中ボタンドラッグ——スクロール · Ctrl+ホイールでズーム · Ctrl+Z/Y · Ctrl+S +tools/rpg_editor/layer_back = 背景 +tools/rpg_editor/layer_main = メイン +tools/rpg_editor/layer_front = 前景 +tools/rpg_editor/layer_collision = 衝突 +tools/rpg_editor/layer_events = イベント +tools/rpg_editor/tool_pencil = 鉛筆 +tools/rpg_editor/tool_eraser = 消しゴム +tools/rpg_editor/tool_fill = 塗りつぶし +tools/rpg_editor/grid = グリッド +tools/rpg_editor/zoom_in = 拡大 +tools/rpg_editor/zoom_out = 縮小 +tools/rpg_editor/undo = 元に戻す +tools/rpg_editor/undo_tip = 最後の編集を元に戻す(Ctrl+Z) +tools/rpg_editor/redo = やり直す +tools/rpg_editor/redo_tip = やり直す(Ctrl+Y) +tools/rpg_editor/play = プレイ +tools/rpg_editor/play_tip = 保存して、実行中のゲームで開始地点からマップを歩く +tools/rpg_editor/play_no_scene = ゲームはシーン「{0}」を知りません:マップの MOD の scenes/{0}.json を確認してください。 +tools/rpg_editor/scene_created = シーン {0} を作成しました +tools/rpg_editor/section_palette = パレット +tools/rpg_editor/section_map = マップ +tools/rpg_editor/section_spawn = 開始地点 +tools/rpg_editor/section_encounters = ランダムバトル +tools/rpg_editor/section_event = イベント +tools/rpg_editor/section_action = 動作 +tools/rpg_editor/section_teleport = テレポート +tools/rpg_editor/map_id = Id +tools/rpg_editor/map_id_tip = マップの id はファイル名であり、マップを表示するシーンの名前でもある +tools/rpg_editor/map_name = 名前のキー +tools/rpg_editor/map_name_tip = マップ表示名のローカライズキー +tools/rpg_editor/tileset = タイルセット +tools/rpg_editor/width = 幅 +tools/rpg_editor/height = 高さ +tools/rpg_editor/resize = サイズを適用 +tools/rpg_editor/zoom = ゲーム内の拡大率 +tools/rpg_editor/zoom_tip = ゲームでタイル 1 ピクセルあたりの画面ピクセル数 +tools/rpg_editor/x = X +tools/rpg_editor/y = Y +tools/rpg_editor/dir = 向き +tools/rpg_editor/dir_down = 下 +tools/rpg_editor/dir_left = 左 +tools/rpg_editor/dir_right = 右 +tools/rpg_editor/dir_up = 上 +tools/rpg_editor/encounter_steps = 約 N 歩ごと +tools/rpg_editor/encounter_steps_tip = ランダムバトルの間の平均歩数。0 で無効 +tools/rpg_editor/encounter_groups = 敵のグループ +tools/rpg_editor/encounter_groups_tip = キャラクターの id。グループは「;」で区切る——例:slime; wolf,slime +tools/rpg_editor/no_event = イベントレイヤーに切り替えてイベントをクリックするか、空いたマスをダブルクリックして追加してください。 +tools/rpg_editor/event_id = Id +tools/rpg_editor/sprite = キャラチップ +tools/rpg_editor/sprite_tip = charsets グループの画像パス:3 コマ × 4 方向 +tools/rpg_editor/tile = タイル +tools/rpg_editor/tile_tip = キャラチップがないときに描くタイルセットの番号。-1 でなし +tools/rpg_editor/trigger = 起動 +tools/rpg_editor/trigger_action = アクションキー(E/F) +tools/rpg_editor/trigger_touch = 踏んだとき +tools/rpg_editor/solid = 通れない +tools/rpg_editor/solid_auto = 描かれているとき +tools/rpg_editor/solid_yes = はい +tools/rpg_editor/solid_no = いいえ +tools/rpg_editor/solid_tile = 通れない +tools/rpg_editor/condition = 条件 +tools/rpg_editor/condition_tip = シナリオの条件。真の間だけイベントが存在する +tools/rpg_editor/scenario = シナリオ +tools/rpg_editor/scenario_tip = scenarios グループ内のパス。拡張子は省略可 +tools/rpg_editor/commands = シナリオの後に実行するインラインの行: +tools/rpg_editor/teleport_map = マップ +tools/rpg_editor/teleport_map_tip = 移動先マップの id。空でマスが指定されていればこのマップ +tools/rpg_editor/delete_event = イベントを削除 +tools/rpg_editor/collision_block = 壁——常に通れない +tools/rpg_editor/collision_open = 通路——常に通れる +tools/rpg_editor/collision_auto = 自動——タイルに従う +tools/rpg_editor/problem_tileset = マップ「{0}」にタイルセットがありません。 +tools/rpg_editor/problem_event_id = {0} にあるイベントに id がありません。 +tools/rpg_editor/problem_event_duplicate = 2 つのイベントが同じ id「{0}」を使っています。 +tools/rpg_editor/tab_tiles = タイル +tools/rpg_editor/tab_characters = キャラクター +tools/rpg_editor/character_search = 名前か id で検索 +tools/rpg_editor/place_npc = NPC として配置 +tools/rpg_editor/place_npc_tip = E/F で話すイベントとしてキャラクターをマップに置く。セリフはシナリオの行に書く +tools/rpg_editor/place_enemy = 敵として配置 +tools/rpg_editor/place_enemy_tip = キャラクターを敵としてマップに置く:E/F でバトルが始まり、倒すと消える +tools/rpg_editor/characters_hint = キャラクターを選び、ボタンを押して、マップのマスをクリックします(右クリックでキャンセル)。キャラチップはキャラクターの Charset フィールドか肖像のパスで探します。 +tools/rpg_editor/place_status = 「{0}」を置くマスをクリック(右クリックでキャンセル) +tools/rpg_editor/place_cancelled = キャラクターの配置をキャンセルしました +tools/rpg_editor/placed_npc = 「{0}」を NPC として配置:イベント {1} +tools/rpg_editor/placed_enemy = 「{0}」を敵として配置:イベント {1} +tools/rpg_editor/icon = アイコン +tools/rpg_editor/icon_tip = キャラチップもタイルもないときの items グループの画像(アイテムの Sprite と同じ) +tools/rpg_editor/tab_items = アイテム +tools/rpg_editor/item_search = 名前か id で検索 +tools/rpg_editor/items_hint = アイテムを選び、数を決め、「配置」を押してマスをクリックします(右クリックでキャンセル)。プレイヤーはマスを踏むと拾い、その後は消えます。 +tools/rpg_editor/item_count = 数 +tools/rpg_editor/item_count_tip = プレイヤーが得る数 +tools/rpg_editor/place_item = 配置 +tools/rpg_editor/place_item_tip = アイテムをマップに置く:マスを踏むと拾える +tools/rpg_editor/item_found_line = 見つけた:{0} ×{1} +tools/rpg_editor/placed_item = 「{0}」をマップに置いた:イベント {1} +tools/rpg_editor/picker_no_look = マップ用の画像が見つからないため、マーカーを表示します +tools/rpg_editor/problem_event_locked = イベント id {0} は別のファイルか MOD のイベントが使っています——別の id にしてください diff --git a/locale/ui_ko.properties b/locale/ui_ko.properties new file mode 100644 index 0000000..8a7f436 --- /dev/null +++ b/locale/ui_ko.properties @@ -0,0 +1,104 @@ +mod_rpg_editor_name = RPG 맵 에디터 +mod_rpg_editor_desc = RPG 월드의 타일 맵 에디터: 타일 레이어 3개, 충돌 레이어, 맵 이벤트. 되돌리기와 실행 중인 게임에서의 실시간 미리 보기 지원. +tools/rpg_editor/title = RPG 맵 에디터 +tools/rpg_editor/hint = 좌클릭 — 그리기 · 우클릭 — 지우기 · Alt+좌클릭 — 타일 집기 · 이벤트: 클릭 — 선택/드래그, 더블클릭 — 추가, Del — 삭제 · 1–5 레이어 · B/E/G 브러시 · 휠/Shift+휠, 가운데 버튼 드래그 — 스크롤 · Ctrl+휠 확대/축소 · Ctrl+Z/Y · Ctrl+S +tools/rpg_editor/layer_back = 배경 +tools/rpg_editor/layer_main = 메인 +tools/rpg_editor/layer_front = 전경 +tools/rpg_editor/layer_collision = 충돌 +tools/rpg_editor/layer_events = 이벤트 +tools/rpg_editor/tool_pencil = 연필 +tools/rpg_editor/tool_eraser = 지우개 +tools/rpg_editor/tool_fill = 채우기 +tools/rpg_editor/grid = 격자 +tools/rpg_editor/zoom_in = 확대 +tools/rpg_editor/zoom_out = 축소 +tools/rpg_editor/undo = 되돌리기 +tools/rpg_editor/undo_tip = 마지막 편집 되돌리기 (Ctrl+Z) +tools/rpg_editor/redo = 다시 실행 +tools/rpg_editor/redo_tip = 다시 실행 (Ctrl+Y) +tools/rpg_editor/play = 플레이 +tools/rpg_editor/play_tip = 저장하고 실행 중인 게임에서 시작 지점부터 맵을 걸어 봅니다 +tools/rpg_editor/play_no_scene = 게임이 장면 "{0}"을(를) 모릅니다: 맵이 있는 모드의 scenes/{0}.json을 확인하세요. +tools/rpg_editor/scene_created = 장면 {0} 생성됨 +tools/rpg_editor/section_palette = 팔레트 +tools/rpg_editor/section_map = 맵 +tools/rpg_editor/section_spawn = 시작 지점 +tools/rpg_editor/section_encounters = 랜덤 전투 +tools/rpg_editor/section_event = 이벤트 +tools/rpg_editor/section_action = 동작 +tools/rpg_editor/section_teleport = 순간 이동 +tools/rpg_editor/map_id = Id +tools/rpg_editor/map_id_tip = 맵 id는 파일 이름이자 맵을 보여 주는 장면의 이름 +tools/rpg_editor/map_name = 이름 키 +tools/rpg_editor/map_name_tip = 맵 표시 이름의 로컬라이즈 키 +tools/rpg_editor/tileset = 타일셋 +tools/rpg_editor/width = 너비 +tools/rpg_editor/height = 높이 +tools/rpg_editor/resize = 크기 적용 +tools/rpg_editor/zoom = 게임 내 확대 배율 +tools/rpg_editor/zoom_tip = 게임에서 타일 픽셀 하나당 화면 픽셀 수 +tools/rpg_editor/x = X +tools/rpg_editor/y = Y +tools/rpg_editor/dir = 방향 +tools/rpg_editor/dir_down = 아래 +tools/rpg_editor/dir_left = 왼쪽 +tools/rpg_editor/dir_right = 오른쪽 +tools/rpg_editor/dir_up = 위 +tools/rpg_editor/encounter_steps = 약 N걸음마다 +tools/rpg_editor/encounter_steps_tip = 랜덤 전투 사이의 평균 걸음 수. 0이면 끕니다 +tools/rpg_editor/encounter_groups = 적 그룹 +tools/rpg_editor/encounter_groups_tip = 캐릭터 id, 그룹은 ";"로 구분 — 예: slime; wolf,slime +tools/rpg_editor/no_event = 이벤트 레이어로 바꾸고 이벤트를 클릭하거나, 빈 칸을 더블클릭해 추가하세요. +tools/rpg_editor/event_id = Id +tools/rpg_editor/sprite = 캐릭터 시트 +tools/rpg_editor/sprite_tip = charsets 그룹의 그림 경로: 3프레임 × 4방향 +tools/rpg_editor/tile = 타일 +tools/rpg_editor/tile_tip = 캐릭터 시트가 없을 때 그리는 타일셋 번호. -1이면 없음 +tools/rpg_editor/trigger = 발동 +tools/rpg_editor/trigger_action = 액션 키 (E/F) +tools/rpg_editor/trigger_touch = 밟았을 때 +tools/rpg_editor/solid = 통과 불가 +tools/rpg_editor/solid_auto = 그려져 있을 때 +tools/rpg_editor/solid_yes = 예 +tools/rpg_editor/solid_no = 아니요 +tools/rpg_editor/solid_tile = 통과 불가 +tools/rpg_editor/condition = 조건 +tools/rpg_editor/condition_tip = 시나리오 조건. 참인 동안에만 이벤트가 존재한다 +tools/rpg_editor/scenario = 시나리오 +tools/rpg_editor/scenario_tip = scenarios 그룹의 경로, 확장자는 생략 가능 +tools/rpg_editor/commands = 시나리오 뒤에 실행할 인라인 줄: +tools/rpg_editor/teleport_map = 맵 +tools/rpg_editor/teleport_map_tip = 대상 맵 id. 비어 있고 칸이 지정되면 이 맵 +tools/rpg_editor/delete_event = 이벤트 삭제 +tools/rpg_editor/collision_block = 벽 — 항상 막힘 +tools/rpg_editor/collision_open = 통로 — 항상 지나갈 수 있음 +tools/rpg_editor/collision_auto = 자동 — 타일에 따름 +tools/rpg_editor/problem_tileset = 맵 "{0}"에 타일셋이 없습니다. +tools/rpg_editor/problem_event_id = {0}에 있는 이벤트에 id가 없습니다. +tools/rpg_editor/problem_event_duplicate = 두 이벤트가 같은 id "{0}"을(를) 씁니다. +tools/rpg_editor/tab_tiles = 타일 +tools/rpg_editor/tab_characters = 캐릭터 +tools/rpg_editor/character_search = 이름 또는 id로 검색 +tools/rpg_editor/place_npc = NPC로 배치 +tools/rpg_editor/place_npc_tip = 캐릭터를 E/F로 대화하는 이벤트로 맵에 놓습니다. 대사는 시나리오 줄에 쓰세요 +tools/rpg_editor/place_enemy = 적으로 배치 +tools/rpg_editor/place_enemy_tip = 캐릭터를 적으로 맵에 놓습니다: E/F로 전투가 시작되고, 쓰러뜨리면 사라집니다 +tools/rpg_editor/characters_hint = 캐릭터를 고르고 버튼을 누른 뒤 맵의 칸을 클릭하세요(우클릭으로 취소). 캐릭터 시트는 캐릭터의 Charset 필드나 초상화 경로로 찾습니다. +tools/rpg_editor/place_status = "{0}"을(를) 놓을 칸을 클릭하세요 (우클릭으로 취소) +tools/rpg_editor/place_cancelled = 캐릭터 배치를 취소했습니다 +tools/rpg_editor/placed_npc = "{0}"을(를) NPC로 배치: 이벤트 {1} +tools/rpg_editor/placed_enemy = "{0}"을(를) 적으로 배치: 이벤트 {1} +tools/rpg_editor/icon = 아이콘 +tools/rpg_editor/icon_tip = 캐릭터 시트도 타일도 없을 때 쓰는 items 그룹의 그림(아이템의 Sprite와 같음) +tools/rpg_editor/tab_items = 아이템 +tools/rpg_editor/item_search = 이름 또는 id로 검색 +tools/rpg_editor/items_hint = 아이템을 고르고 개수를 정한 뒤 "배치"를 누르고 칸을 클릭하세요(우클릭으로 취소). 플레이어가 칸을 밟으면 줍고, 그다음엔 사라집니다. +tools/rpg_editor/item_count = 개수 +tools/rpg_editor/item_count_tip = 플레이어가 받는 개수 +tools/rpg_editor/place_item = 배치 +tools/rpg_editor/place_item_tip = 아이템을 맵에 놓습니다: 칸을 밟으면 줍습니다 +tools/rpg_editor/item_found_line = 발견: {0} ×{1} +tools/rpg_editor/placed_item = "{0}"이(가) 맵에 놓였습니다: 이벤트 {1} +tools/rpg_editor/picker_no_look = 맵용 그림을 찾지 못해 표식을 표시합니다 +tools/rpg_editor/problem_event_locked = 이벤트 id {0}은(는) 다른 파일이나 모드의 이벤트가 쓰고 있습니다 — 다른 것을 고르세요 diff --git a/locale/ui_vi.properties b/locale/ui_vi.properties new file mode 100644 index 0000000..8b29ede --- /dev/null +++ b/locale/ui_vi.properties @@ -0,0 +1,104 @@ +mod_rpg_editor_name = Trình sửa bản đồ RPG +mod_rpg_editor_desc = Trình sửa bản đồ ô cho thế giới RPG: ba lớp ô, lớp va chạm và sự kiện trên bản đồ, có hoàn tác và xem trước trực tiếp trong game đang chạy. +tools/rpg_editor/title = Trình sửa bản đồ RPG +tools/rpg_editor/hint = Chuột trái — vẽ · chuột phải — xóa · Alt+chuột trái — lấy ô · sự kiện: nhấp — chọn/kéo, nhấp đúp — thêm, Del — xóa · 1–5 lớp · B/E/G bút · cuộn/Shift+cuộn, kéo chuột giữa — di chuyển · Ctrl+cuộn thu phóng · Ctrl+Z/Y · Ctrl+S +tools/rpg_editor/layer_back = Nền +tools/rpg_editor/layer_main = Chính +tools/rpg_editor/layer_front = Phía trước +tools/rpg_editor/layer_collision = Va chạm +tools/rpg_editor/layer_events = Sự kiện +tools/rpg_editor/tool_pencil = Bút chì +tools/rpg_editor/tool_eraser = Tẩy +tools/rpg_editor/tool_fill = Tô +tools/rpg_editor/grid = Lưới +tools/rpg_editor/zoom_in = Phóng to +tools/rpg_editor/zoom_out = Thu nhỏ +tools/rpg_editor/undo = Hoàn tác +tools/rpg_editor/undo_tip = Hoàn tác thay đổi cuối (Ctrl+Z) +tools/rpg_editor/redo = Làm lại +tools/rpg_editor/redo_tip = Làm lại (Ctrl+Y) +tools/rpg_editor/play = Chơi +tools/rpg_editor/play_tip = Lưu và đi trên bản đồ từ điểm xuất phát trong game đang chạy +tools/rpg_editor/play_no_scene = Game không biết cảnh "{0}": hãy kiểm tra scenes/{0}.json trong mod của bản đồ. +tools/rpg_editor/scene_created = đã tạo cảnh {0} +tools/rpg_editor/section_palette = Bảng màu +tools/rpg_editor/section_map = Bản đồ +tools/rpg_editor/section_spawn = Điểm xuất phát +tools/rpg_editor/section_encounters = Trận đấu ngẫu nhiên +tools/rpg_editor/section_event = Sự kiện +tools/rpg_editor/section_action = Tác dụng +tools/rpg_editor/section_teleport = Dịch chuyển +tools/rpg_editor/map_id = Id +tools/rpg_editor/map_id_tip = Id của bản đồ là tên tệp và cũng là tên cảnh hiển thị bản đồ +tools/rpg_editor/map_name = Khóa tên +tools/rpg_editor/map_name_tip = Khóa bản địa hóa của tên hiển thị bản đồ +tools/rpg_editor/tileset = Tileset +tools/rpg_editor/width = Chiều rộng +tools/rpg_editor/height = Chiều cao +tools/rpg_editor/resize = Áp dụng kích thước +tools/rpg_editor/zoom = Thu phóng trong game +tools/rpg_editor/zoom_tip = Số điểm ảnh màn hình cho mỗi điểm ảnh ô trong game +tools/rpg_editor/x = X +tools/rpg_editor/y = Y +tools/rpg_editor/dir = Hướng nhìn +tools/rpg_editor/dir_down = Xuống +tools/rpg_editor/dir_left = Trái +tools/rpg_editor/dir_right = Phải +tools/rpg_editor/dir_up = Lên +tools/rpg_editor/encounter_steps = Khoảng mỗi N bước +tools/rpg_editor/encounter_steps_tip = Số bước trung bình giữa các trận đấu ngẫu nhiên; 0 để tắt +tools/rpg_editor/encounter_groups = Nhóm kẻ địch +tools/rpg_editor/encounter_groups_tip = Id nhân vật, các nhóm tách bằng ";" — ví dụ slime; wolf,slime +tools/rpg_editor/no_event = Chuyển sang lớp Sự kiện và nhấp vào một sự kiện, hoặc nhấp đúp vào ô trống để thêm. +tools/rpg_editor/event_id = Id +tools/rpg_editor/sprite = Charset +tools/rpg_editor/sprite_tip = Đường dẫn hình trong nhóm charsets: 3 khung × 4 hướng +tools/rpg_editor/tile = Ô +tools/rpg_editor/tile_tip = Số ô của tileset được vẽ khi không có charset; -1 là không có +tools/rpg_editor/trigger = Kích hoạt +tools/rpg_editor/trigger_action = Phím hành động (E/F) +tools/rpg_editor/trigger_touch = Khi bước lên +tools/rpg_editor/solid = Chặn đường +tools/rpg_editor/solid_auto = Khi được vẽ +tools/rpg_editor/solid_yes = Có +tools/rpg_editor/solid_no = Không +tools/rpg_editor/solid_tile = chặn đường +tools/rpg_editor/condition = Điều kiện +tools/rpg_editor/condition_tip = Điều kiện kịch bản; sự kiện chỉ tồn tại khi điều kiện đúng +tools/rpg_editor/scenario = Kịch bản +tools/rpg_editor/scenario_tip = Đường dẫn trong nhóm scenarios, có thể bỏ phần mở rộng +tools/rpg_editor/commands = Các dòng kịch bản riêng, chạy sau kịch bản: +tools/rpg_editor/teleport_map = Bản đồ +tools/rpg_editor/teleport_map_tip = Id bản đồ đích; để trống mà có ô thì là bản đồ này +tools/rpg_editor/delete_event = Xóa sự kiện +tools/rpg_editor/collision_block = Tường — luôn bị chặn +tools/rpg_editor/collision_open = Lối đi — luôn đi được +tools/rpg_editor/collision_auto = Tự động — theo các ô +tools/rpg_editor/problem_tileset = Bản đồ "{0}" không có tileset. +tools/rpg_editor/problem_event_id = Sự kiện ở {0} không có id. +tools/rpg_editor/problem_event_duplicate = Hai sự kiện dùng chung id "{0}". +tools/rpg_editor/tab_tiles = Ô +tools/rpg_editor/tab_characters = Nhân vật +tools/rpg_editor/character_search = Tìm theo tên hoặc id +tools/rpg_editor/place_npc = Đặt làm NPC +tools/rpg_editor/place_npc_tip = Đặt nhân vật lên bản đồ như một sự kiện nói chuyện bằng E/F; viết lời thoại trong các dòng kịch bản +tools/rpg_editor/place_enemy = Đặt làm kẻ địch +tools/rpg_editor/place_enemy_tip = Đặt nhân vật lên bản đồ làm kẻ địch: E/F bắt đầu trận đấu với nó, nó biến mất khi bị đánh bại +tools/rpg_editor/characters_hint = Chọn một nhân vật, nhấn nút rồi nhấp vào một ô trên bản đồ (chuột phải để hủy). Charset được tìm theo trường Charset của nhân vật hoặc theo đường dẫn chân dung. +tools/rpg_editor/place_status = Nhấp vào ô để đặt "{0}" (chuột phải để hủy) +tools/rpg_editor/place_cancelled = Đã hủy đặt nhân vật +tools/rpg_editor/placed_npc = "{0}" đã đặt làm NPC: sự kiện {1} +tools/rpg_editor/placed_enemy = "{0}" đã đặt làm kẻ địch: sự kiện {1} +tools/rpg_editor/icon = Biểu tượng +tools/rpg_editor/icon_tip = Hình trong nhóm items (như Sprite của vật phẩm) khi không có charset lẫn ô +tools/rpg_editor/tab_items = Vật phẩm +tools/rpg_editor/item_search = Tìm theo tên hoặc id +tools/rpg_editor/items_hint = Chọn một vật phẩm, đặt số lượng, nhấn "Đặt" và nhấp vào một ô (chuột phải để hủy). Người chơi nhặt nó khi bước lên ô; sau đó nó biến mất. +tools/rpg_editor/item_count = Số lượng +tools/rpg_editor/item_count_tip = Người chơi nhận được bao nhiêu +tools/rpg_editor/place_item = Đặt +tools/rpg_editor/place_item_tip = Đặt vật phẩm lên bản đồ: bước lên ô sẽ nhặt được +tools/rpg_editor/item_found_line = Tìm thấy: {0} ×{1} +tools/rpg_editor/placed_item = "{0}" nằm trên bản đồ: sự kiện {1} +tools/rpg_editor/picker_no_look = Không tìm thấy hình cho bản đồ, hiển thị một điểm đánh dấu +tools/rpg_editor/problem_event_locked = Id sự kiện {0} đã được một sự kiện ở tệp hoặc mod khác dùng — hãy chọn id khác diff --git a/locale/ui_zh.properties b/locale/ui_zh.properties new file mode 100644 index 0000000..0161a6b --- /dev/null +++ b/locale/ui_zh.properties @@ -0,0 +1,104 @@ +mod_rpg_editor_name = RPG 地图编辑器 +mod_rpg_editor_desc = RPG 世界的瓦片地图编辑器:三层瓦片、碰撞层和地图事件,支持撤销,并在运行中的游戏里实时预览。 +tools/rpg_editor/title = RPG 地图编辑器 +tools/rpg_editor/hint = 左键——绘制 · 右键——擦除 · Alt+左键——吸取瓦片 · 事件:点击——选择/拖动,双击——添加,Del——删除 · 1–5 切换图层 · B/E/G 画笔 · 滚轮/Shift+滚轮、中键拖动——滚动 · Ctrl+滚轮缩放 · Ctrl+Z/Y · Ctrl+S +tools/rpg_editor/layer_back = 背景层 +tools/rpg_editor/layer_main = 主层 +tools/rpg_editor/layer_front = 前景层 +tools/rpg_editor/layer_collision = 碰撞 +tools/rpg_editor/layer_events = 事件 +tools/rpg_editor/tool_pencil = 铅笔 +tools/rpg_editor/tool_eraser = 橡皮 +tools/rpg_editor/tool_fill = 填充 +tools/rpg_editor/grid = 网格 +tools/rpg_editor/zoom_in = 放大 +tools/rpg_editor/zoom_out = 缩小 +tools/rpg_editor/undo = 撤销 +tools/rpg_editor/undo_tip = 撤销上一次编辑(Ctrl+Z) +tools/rpg_editor/redo = 重做 +tools/rpg_editor/redo_tip = 重做(Ctrl+Y) +tools/rpg_editor/play = 试玩 +tools/rpg_editor/play_tip = 保存,并在运行中的游戏里从出生点开始走这张地图 +tools/rpg_editor/play_no_scene = 游戏不认识场景"{0}":请检查地图所在模组中的 scenes/{0}.json。 +tools/rpg_editor/scene_created = 已创建场景 {0} +tools/rpg_editor/section_palette = 调色板 +tools/rpg_editor/section_map = 地图 +tools/rpg_editor/section_spawn = 出生点 +tools/rpg_editor/section_encounters = 随机战斗 +tools/rpg_editor/section_event = 事件 +tools/rpg_editor/section_action = 效果 +tools/rpg_editor/section_teleport = 传送 +tools/rpg_editor/map_id = Id +tools/rpg_editor/map_id_tip = 地图 id 就是文件名,也是显示该地图的场景名 +tools/rpg_editor/map_name = 名称键 +tools/rpg_editor/map_name_tip = 地图显示名称的本地化键 +tools/rpg_editor/tileset = 瓦片集 +tools/rpg_editor/width = 宽度 +tools/rpg_editor/height = 高度 +tools/rpg_editor/resize = 应用尺寸 +tools/rpg_editor/zoom = 游戏内缩放 +tools/rpg_editor/zoom_tip = 游戏中每个瓦片像素对应的屏幕像素 +tools/rpg_editor/x = X +tools/rpg_editor/y = Y +tools/rpg_editor/dir = 朝向 +tools/rpg_editor/dir_down = 下 +tools/rpg_editor/dir_left = 左 +tools/rpg_editor/dir_right = 右 +tools/rpg_editor/dir_up = 上 +tools/rpg_editor/encounter_steps = 约每 N 步 +tools/rpg_editor/encounter_steps_tip = 两次随机战斗之间的平均步数;0 表示关闭 +tools/rpg_editor/encounter_groups = 敌人组 +tools/rpg_editor/encounter_groups_tip = 角色 id,用";"分隔各组——例如 slime; wolf,slime +tools/rpg_editor/no_event = 切换到事件层并点击一个事件,或双击空格子来添加一个。 +tools/rpg_editor/event_id = Id +tools/rpg_editor/sprite = 行走图 +tools/rpg_editor/sprite_tip = charsets 组中的图片路径:3 帧 × 4 个朝向 +tools/rpg_editor/tile = 瓦片 +tools/rpg_editor/tile_tip = 没有行走图时绘制的瓦片集编号;-1 表示无 +tools/rpg_editor/trigger = 触发 +tools/rpg_editor/trigger_action = 动作键(E/F) +tools/rpg_editor/trigger_touch = 踩上去 +tools/rpg_editor/solid = 实体 +tools/rpg_editor/solid_auto = 绘制时 +tools/rpg_editor/solid_yes = 是 +tools/rpg_editor/solid_no = 否 +tools/rpg_editor/solid_tile = 实体 +tools/rpg_editor/condition = 条件 +tools/rpg_editor/condition_tip = 剧本条件;只有条件成立时事件才存在 +tools/rpg_editor/scenario = 剧本 +tools/rpg_editor/scenario_tip = scenarios 组中的路径,扩展名可省略 +tools/rpg_editor/commands = 内联剧本行,在剧本之后执行: +tools/rpg_editor/teleport_map = 地图 +tools/rpg_editor/teleport_map_tip = 目标地图 id;为空且设置了格子表示本地图 +tools/rpg_editor/delete_event = 删除事件 +tools/rpg_editor/collision_block = 墙——始终阻挡 +tools/rpg_editor/collision_open = 通道——始终可走 +tools/rpg_editor/collision_auto = 自动——取决于瓦片 +tools/rpg_editor/problem_tileset = 地图"{0}"没有瓦片集。 +tools/rpg_editor/problem_event_id = 位于 {0} 的事件没有 id。 +tools/rpg_editor/problem_event_duplicate = 两个事件使用了相同的 id"{0}"。 +tools/rpg_editor/tab_tiles = 瓦片 +tools/rpg_editor/tab_characters = 角色 +tools/rpg_editor/character_search = 按名称或 id 搜索 +tools/rpg_editor/place_npc = 放置为 NPC +tools/rpg_editor/place_npc_tip = 把角色作为按 E/F 对话的事件放到地图上;它的台词写在剧本行中 +tools/rpg_editor/place_enemy = 放置为敌人 +tools/rpg_editor/place_enemy_tip = 把角色作为敌人放到地图上:按 E/F 与它战斗,被击败后消失 +tools/rpg_editor/characters_hint = 选择一个角色,按下按钮,再点击地图上的格子(右键取消)。行走图按角色的 Charset 字段或其立绘路径查找。 +tools/rpg_editor/place_status = 点击要放置"{0}"的格子(右键取消) +tools/rpg_editor/place_cancelled = 已取消放置角色 +tools/rpg_editor/placed_npc = "{0}"已作为 NPC 放置:事件 {1} +tools/rpg_editor/placed_enemy = "{0}"已作为敌人放置:事件 {1} +tools/rpg_editor/icon = 图标 +tools/rpg_editor/icon_tip = items 组中的图片(与物品的 Sprite 相同),在既没有行走图也没有瓦片时使用 +tools/rpg_editor/tab_items = 物品 +tools/rpg_editor/item_search = 按名称或 id 搜索 +tools/rpg_editor/items_hint = 选择物品,设置数量,按"放置"并点击格子(右键取消)。玩家踩上格子即可拾取,之后它就消失了。 +tools/rpg_editor/item_count = 数量 +tools/rpg_editor/item_count_tip = 玩家获得的数量 +tools/rpg_editor/place_item = 放置 +tools/rpg_editor/place_item_tip = 把物品放到地图上:踩上格子即可拾取 +tools/rpg_editor/item_found_line = 找到:{0} ×{1} +tools/rpg_editor/placed_item = "{0}"放在地图上:事件 {1} +tools/rpg_editor/picker_no_look = 没有找到地图用的图片,显示为标记 +tools/rpg_editor/problem_event_locked = 事件 id {0} 已被其他文件或模组的事件占用——请换一个 diff --git a/manifest.json b/manifest.json index 799a081..c6c07b8 100644 --- a/manifest.json +++ b/manifest.json @@ -3,7 +3,7 @@ "name": "RPG Map Editor", "version": "1.0.0", "author": "ct", - "description": "Editor of the rpg mod's tile maps (maps/*.json): paints the back, main and front tile layers and the collision layer with a pencil, an eraser and a flood fill from the tileset palette, places and edits map events (look, trigger, scenario, inline commands, teleport, condition), sets the map size, spawn and random encounters. Undo/redo, live update of the running world after saving, play from the spawn. Opens from the main menu tools, the novel editor hub and the in-game toolbar.", + "description": "Editor of the rpg mod's tile maps (maps/*.json): paints the back, main and front tile layers and the collision layer with a pencil, an eraser and a flood fill from the tileset palette, places and edits map events (look, trigger, scenario, inline commands, teleport, condition), sets the map size, spawn and random encounters. Undo/redo, live update of the running world after saving, play from the spawn. Opens from the main menu tools and the in-game toolbar.", "category": "tools, editor", "sources": [ "src/**/*.cs" diff --git a/src/RpgMapDocument.cs b/src/RpgMapDocument.cs index 8de485f..b138732 100644 --- a/src/RpgMapDocument.cs +++ b/src/RpgMapDocument.cs @@ -98,19 +98,19 @@ namespace Cthangover.Tools.RpgEditor /// Mod-relative path of the editor's events file of a map: map_events/<id>/events.json. public static string EventsPath(string mapId) => $"{RpgMapEventResolver.Directory}/{mapId}/events.json"; - /// The map file text: cells written into rows, nulls left out, indented, LF line breaks on every OS. + /// The map file text: cells written into rows, nulls left out, indented, LF line breaks on every OS, a final one. public string ToJson() { Grid.WriteTo(Map); var data = new FileData { Kind = "rpg_map", Items = new List { Map } }; - return JsonSerializer.Serialize(data, JsonOptionsProvider.WriteIndentedIgnoreNullOptions).Replace("\r\n", "\n"); + return JsonSerializer.Serialize(data, JsonOptionsProvider.WriteIndentedIgnoreNullOptions).Replace("\r\n", "\n") + "\n"; } /// The events file text (): the own events, nulls left out, indented. public string EventsToJson() { var data = new RpgMapEventFile { Events = Events }; - return JsonSerializer.Serialize(data, JsonOptionsProvider.WriteIndentedIgnoreNullOptions).Replace("\r\n", "\n"); + return JsonSerializer.Serialize(data, JsonOptionsProvider.WriteIndentedIgnoreNullOptions).Replace("\r\n", "\n") + "\n"; } /// Remembers the current state as one undo step and forgets the redo branch. diff --git a/src/RpgMapEditorToolProvider.cs b/src/RpgMapEditorToolProvider.cs index 35de08f..a33f031 100644 --- a/src/RpgMapEditorToolProvider.cs +++ b/src/RpgMapEditorToolProvider.cs @@ -7,7 +7,7 @@ namespace Cthangover.Tools.RpgEditor /// /// Registers the RPG map editor as a tool: the kernel's tool factory finds /// every , so the editor appears in the main - /// menu's tool block, the novel editor hub and (with + /// menu's tool block and (with /// ) the in-game toolbar. /// public class RpgMapEditorToolProvider : IToolProvider diff --git a/tests/RpgMapDocumentTests.cs b/tests/RpgMapDocumentTests.cs index e57c365..97735f9 100644 --- a/tests/RpgMapDocumentTests.cs +++ b/tests/RpgMapDocumentTests.cs @@ -223,6 +223,8 @@ namespace Cthangover.Tools.RpgEditor.Tests ModAssert.True(json.Contains("\"Kind\": \"rpg_map\""), "the file declares its kind"); ModAssert.False(json.Contains("\"Events\""), "the map file holds no events"); ModAssert.True(eventsJson.Contains("\"Events\""), "the events file holds them"); + ModAssert.False(eventsJson.Contains("IsSolid"), "the computed solidity is not written"); + ModAssert.True(json.EndsWith("}\n") && eventsJson.EndsWith("}\n"), "both files end with a line break"); ModAssert.False(eventsJson.Contains("\"Scenario\""), "empty fields are left out"); ModAssert.Equal("map_events/test_map/events.json", RpgMapDocument.EventsPath("test_map"), "the editor's events file of the map"); ModAssert.Equal(0, RpgMapDocument.Load(json).Events.Count, "a map without an events file has no events");