mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2025-01-22 07:32:07 -05:00
Japanese Support (#574)
* server console with commands * better unicode support and japanese translation * Update README.md * restore unneeded changes * missed this * extra * restore * remove extra line * spacing * japanese aliased * language display names * Update .gitignore * japanese language support * more common kanji * merging new images * fix line conflicts * again * redefinition removal * Update djui_font.c * Update djui_font.c * Update djui_font.c * separated japanese glyphs and images * Update .gitignore * Update djui_font.c * Revert "Update djui_font.c" This reverts commitab2ad8c189
. * Revert "separated japanese glyphs and images" This reverts commitc3d0fd40e3
. * recombined sheets * Update djui_font.c * Update djui_font.c * Update djui_font.c * separated japanese glyphs and images * Update Japanese.ini --------- Co-authored-by: Isaac0-dev <62234577+Isaac0-dev@users.noreply.github.com>
This commit is contained in:
parent
0ef9ae742e
commit
735a7ec7a7
26 changed files with 3296 additions and 15 deletions
|
@ -3,6 +3,14 @@
|
|||
#include "game/ingame_menu.h"
|
||||
#include "make_const_nonconst.h"
|
||||
|
||||
ALIGNED8 const u8 texture_font_jp[] = {
|
||||
#include "textures/custom_font/custom_font_jp.rgba32.inc.c"
|
||||
};
|
||||
|
||||
ALIGNED8 const u8 texture_font_jp_aliased[] = {
|
||||
#include "textures/custom_font/custom_font_jp_aliased.rgba32.inc.c"
|
||||
};
|
||||
|
||||
ALIGNED8 const u8 texture_font_normal[] = {
|
||||
#include "textures/custom_font/custom_font_normal.rgba32.inc.c"
|
||||
};
|
||||
|
|
|
@ -1546,6 +1546,8 @@ extern ALIGNED8 const Texture texture_font_hud_recolor[];
|
|||
extern ALIGNED8 const Texture texture_font_special[];
|
||||
extern ALIGNED8 const Texture texture_selectionbox_back_icon[];
|
||||
extern ALIGNED8 const Texture texture_selectionbox_forward_icon[];
|
||||
extern ALIGNED8 const Texture texture_font_jp[];
|
||||
extern ALIGNED8 const Texture texture_font_jp_aliased[];
|
||||
extern ALIGNED8 const Texture texture_coopdx_logo[];
|
||||
extern ALIGNED8 const Texture pss_seg7_texture_07000000[];
|
||||
extern ALIGNED8 const Texture pss_seg7_texture_07000800[];
|
||||
|
|
|
@ -1138,13 +1138,16 @@ static const struct BuiltinTexInfo sDynosBuiltinTexs[] = {
|
|||
define_builtin_tex(waluigi_texture_eyes_up, "actors/waluigi/custom_waluigi_eyes_up_unused.rgba16.png", 64, 32, 16),
|
||||
define_builtin_tex(waluigi_texture_eyes_down, "actors/waluigi/custom_waluigi_eyes_down_unused.rgba16.png", 64, 32, 16),
|
||||
define_builtin_tex(waluigi_texture_eyes_dead, "actors/waluigi/custom_waluigi_eyes_dead.rgba16.png", 64, 32, 16),
|
||||
|
||||
// DJUI
|
||||
define_builtin_tex(texture_font_normal, "textures/custom_font/custom_font_normal.rgba32.png", 256, 128, 32),
|
||||
define_builtin_tex(texture_font_aliased, "textures/custom_font/custom_font_aliased.rgba32.png", 512, 256, 32),
|
||||
define_builtin_tex(texture_font_title, "textures/custom_font/custom_font_title.rgba32.png", 1024, 512, 32),
|
||||
define_builtin_tex(texture_font_hud, "textures/custom_font/custom_font_normal.rgba32.png", 512, 512, 32),
|
||||
define_builtin_tex(texture_font_hud_recolor, "textures/custom_font/custom_font_aliased.rgba32.png", 512, 512, 32),
|
||||
define_builtin_tex(texture_font_hud, "textures/custom_font/custom_font_hud.rgba32.png", 512, 512, 32),
|
||||
define_builtin_tex(texture_font_hud_recolor, "textures/custom_font/custom_font_hud_recolor.rgba32.png", 512, 512, 32),
|
||||
define_builtin_tex(texture_font_special, "textures/custom_font/custom_font_special.rgba32.png", 512, 512, 32),
|
||||
define_builtin_tex(texture_font_jp, "textures/custom_font/custom_font_jp.rgba32.png", 512, 1024, 32),
|
||||
define_builtin_tex(texture_font_jp_aliased, "textures/custom_font/custom_font_jp_aliased.rgba32.png", 1024, 2048, 32),
|
||||
|
||||
// Logo
|
||||
define_builtin_tex(texture_selectionbox_back_icon, "textures/segment2/custom_selectionbox_back_icon.rgba16.png", 16, 16, 16),
|
||||
|
|
|
@ -379,6 +379,16 @@ MUTE_FOCUS_LOSS = "Ztlumit, když je okno na pozadí"
|
|||
|
||||
[LANGUAGE]
|
||||
LANGUAGE = "JAZYK"
|
||||
Czech = "Čeština"
|
||||
Dutch = "Dutch (Nederlands)"
|
||||
French = "French (Français)"
|
||||
German = "German (Deutsch)"
|
||||
Italian = "Italian (Italiano)"
|
||||
Japanese = "Japanese (日本語)"
|
||||
Polish = "Polish (Polski)"
|
||||
Portuguese = "Portuguese (Português)"
|
||||
Russian = "Russian (Русский)"
|
||||
Spanish = "Spanish (Español)"
|
||||
|
||||
[LOBBIES]
|
||||
PUBLIC_LOBBIES = "VEREJNE HRY"
|
||||
|
|
|
@ -379,6 +379,16 @@ MUTE_FOCUS_LOSS = "Dempen wanneer venster niet meer scherp is"
|
|||
|
||||
[LANGUAGE]
|
||||
LANGUAGE = "TAAL"
|
||||
Czech = "Czech (Čeština)"
|
||||
Dutch = "Nederlands"
|
||||
French = "French (Français)"
|
||||
German = "German (Deutsch)"
|
||||
Italian = "Italian (Italiano)"
|
||||
Japanese = "Japanese (日本語)"
|
||||
Polish = "Polish (Polski)"
|
||||
Portuguese = "Portuguese (Português)"
|
||||
Russian = "Russian (Русский)"
|
||||
Spanish = "Spanish (Español)"
|
||||
|
||||
[LOBBIES]
|
||||
PUBLIC_LOBBIES = "PUBLIEKE LOBBIES"
|
||||
|
|
|
@ -379,6 +379,16 @@ MUTE_FOCUS_LOSS = "Mute When Window Unfocused"
|
|||
|
||||
[LANGUAGE]
|
||||
LANGUAGE = "LANGUAGE"
|
||||
Czech = "Czech (Čeština)"
|
||||
Dutch = "Dutch (Nederlands)"
|
||||
French = "French (Français)"
|
||||
German = "German (Deutsch)"
|
||||
Italian = "Italian (Italiano)"
|
||||
Japanese = "Japanese (日本語)"
|
||||
Polish = "Polish (Polski)"
|
||||
Portuguese = "Portuguese (Português)"
|
||||
Russian = "Russian (Русский)"
|
||||
Spanish = "Spanish (Español)"
|
||||
|
||||
[LOBBIES]
|
||||
PUBLIC_LOBBIES = "PUBLIC LOBBIES"
|
||||
|
|
|
@ -379,6 +379,16 @@ MUTE_FOCUS_LOSS = "Muet en arrière plan"
|
|||
|
||||
[LANGUAGE]
|
||||
LANGUAGE = "LANGUE"
|
||||
Czech = "Czech (Čeština)"
|
||||
Dutch = "Dutch (Nederlands)"
|
||||
French = "Français"
|
||||
German = "German (Deutsch)"
|
||||
Italian = "Italian (Italiano)"
|
||||
Japanese = "Japanese (日本語)"
|
||||
Polish = "Polish (Polski)"
|
||||
Portuguese = "Portuguese (Português)"
|
||||
Russian = "Russian (Русский)"
|
||||
Spanish = "Spanish (Español)"
|
||||
|
||||
[LOBBIES]
|
||||
PUBLIC_LOBBIES = "PARTIES\nPUBLIQUES"
|
||||
|
|
|
@ -379,6 +379,16 @@ MUTE_FOCUS_LOSS = "Stumm wenn nicht fokussiert"
|
|||
|
||||
[LANGUAGE]
|
||||
LANGUAGE = "SPRACHE"
|
||||
Czech = "Czech (Čeština)"
|
||||
Dutch = "Dutch (Nederlands)"
|
||||
French = "French (Français)"
|
||||
German = "Deutsch"
|
||||
Italian = "Italian (Italiano)"
|
||||
Japanese = "Japanese (日本語)"
|
||||
Polish = "Polish (Polski)"
|
||||
Portuguese = "Portuguese (Português)"
|
||||
Russian = "Russian (Русский)"
|
||||
Spanish = "Spanish (Español)"
|
||||
|
||||
[LOBBIES]
|
||||
PUBLIC_LOBBIES = "ÖFFENTLICHE\nLOBBIES"
|
||||
|
|
|
@ -377,6 +377,16 @@ MUTE_FOCUS_LOSS = "Disattiva l'audio quando la finestra non è a fuoco"
|
|||
|
||||
[LANGUAGE]
|
||||
LANGUAGE = "LINGUA"
|
||||
Czech = "Czech (Čeština)"
|
||||
Dutch = "Dutch (Nederlands)"
|
||||
French = "French (Français)"
|
||||
German = "German (Deutsch)"
|
||||
Italian = "Italiano"
|
||||
Japanese = "Japanese (日本語)"
|
||||
Polish = "Polish (Polski)"
|
||||
Portuguese = "Portuguese (Português)"
|
||||
Russian = "Russian (Русский)"
|
||||
Spanish = "Spanish (Español)"
|
||||
|
||||
[LOBBIES]
|
||||
PUBLIC_LOBBIES = "PUBLIC LOBBIES"
|
||||
|
|
404
lang/Japanese.ini
Normal file
404
lang/Japanese.ini
Normal file
|
@ -0,0 +1,404 @@
|
|||
[NOTIF]
|
||||
CONNECTED = "@が接続しました。"
|
||||
DISCONNECTED = "@が切断しました。"
|
||||
LEFT_THIS_LEVEL = "@はこのレベルを出ました。"
|
||||
ENTERED_THIS_LEVEL = "@はこのレベルに入りました。"
|
||||
ENTERED = "@が\n#に入りました。"
|
||||
SERVER_CLOSED = "\\#ffa0a0\\切断されました:\\#dcdcdc\\ 部屋が閉じられています。"
|
||||
DISCORD_ERROR = "Discordエラーが発生しました。\n解決するには、\n1. ゲームを終了。\n2. Discordを再起動。\n3. ゲームを開く。"
|
||||
DISCORD_DETECT = "\\#ffa0a0\\エラー:\\#dcdcdc\\ Discordが検出されていません。\n\\#a0a0a0\\ゲームを終了し、Discordを再起動して、もう一度お試しください。"
|
||||
DISCONNECT_FULL = "\\#ffa0a0\\切断されました:\\#dcdcdc\\ 部屋が満員です"
|
||||
DISCONNECT_KICK = "\\#ffa0a0\\切断されました:\\#dcdcdc\\ キックされました"
|
||||
DISCONNECT_BAN = "\\#ffa0a0\\切断されました:\\#dcdcdc\\ 部屋からBANされています"
|
||||
DISCONNECT_REJOIN = "\\#ffa0a0\\切断されました:\\#dcdcdc\\ 再参加しようとしています…"
|
||||
DISCONNECT_CLOSED = "\\#ffa0a0\\切断されました:\\#dcdcdc\\ 部屋主が接続を閉じました。"
|
||||
DISCONNECT_BIG_MOD = "部屋は大きすぎたMODがあるので\n切断しています。"
|
||||
DIED = "@が死んでしまった。"
|
||||
DEBUG_FLY = "@がデバッグフライトモードに入りました!"
|
||||
IMPORT_MOD_SUCCESS = "'@'\n\\#a0ffa0\\MODを読み込みました。\\#dcdcdc\\"
|
||||
IMPORT_DYNOS_SUCCESS = "'@'\n\\#a0ffa0\\DynOSのパックを読み込みました。\\#dcdcdc\\"
|
||||
IMPORT_PALETTE_SUCCESS = "'@'\n\\#a0ffa0\\パレットのプリセットを読み込みました\\#dcdcdc\\"
|
||||
IMPORT_FAIL = "'@'\n\\#ffa0a0\\読み込みに失敗しました。\\#dcdcdc\\"
|
||||
IMPORT_FAIL_INGAME = "\\#ffa0a0\\ゲーム中に読み込めない"
|
||||
COOPNET_CONNECTION_FAILED = "\\#ffa0a0\\CoopNetに接続できませんでした。"
|
||||
COOPNET_DISCONNECTED = "\\#ffa0a0\\CoopNetの接続が落ちました。"
|
||||
LOBBY_NOT_FOUND = "\\#ffa0a0\\エラー:\\#dcdcdc\\ 部屋がすでに閉じられています!"
|
||||
LOBBY_JOIN_FAILED = "\\#ffa0a0\\部屋に参加できませんでした。"
|
||||
LOBBY_PASSWORD_INCORRECT = "\\#ffa0a0\\パスワードが間違っています。"
|
||||
COOPNET_VERSION = "\\#ffa0a0\\あなたの版はCoopNetに対応していません。アップデートしましょう!"
|
||||
PEER_FAILED = "\\#ffa0a0\\'@'に接続できませんでした。"
|
||||
UNKNOWN = "末和"
|
||||
LOBBY_HOST = "部屋主"
|
||||
UPDATE_AVAILABLE = "アップデートが利用可能です!"
|
||||
LATEST_VERSION = "最新版"
|
||||
YOUR_VERSION = "あなたの版"
|
||||
|
||||
[CHAT]
|
||||
KICKING = "'@'をキックしています…"
|
||||
BANNING = "'@'をBANしています…"
|
||||
SERVER_ONLY = "このコマンドは部屋主のみ実行できます。"
|
||||
PERM_BANNING = "'@'が永久BANしています…"
|
||||
ADD_MODERATOR = "'@'がモデレーターにしています。"
|
||||
PLAYERS = "プレイヤー"
|
||||
NO_PERMS = "このコマンドを実行する許可がありません。"
|
||||
PLAYER_NOT_FOUND = "プレイヤーが見つかりませんでした。。"
|
||||
NAMETAGS_MISSING_PARAMETERS = "引数が不足しています: [OPTION]が必要です。"
|
||||
SELF_KICK = "自分をキックできません!"
|
||||
SELF_BAN = "自分をBANできません!"
|
||||
SELF_MOD = "自分をモドレーターにすることができません!"
|
||||
KICK_CONFIRM = "本当に'@'を強制退出しますか?\n強制退出するには'\\#a0ffa0\\/confirm\\#fff982\\' と入力して確定する。"
|
||||
BAN_CONFIRM = "本当に'@'をBANしますか?\nBANするには'\\#a0ffa0\\/confirm\\#fff982\\' と入力して確認する。"
|
||||
PERM_BAN_CONFIRM = "本当に'@'を永久BANしますか?\nBANするには'\\#a0ffa0\\/confirm\\#fff982\\' と入力して確定する。"
|
||||
MOD_CONFIRM = "本当に'@'をモデレータにしますか?\n'\\#a0ffa0\\/confirm\\#fff982\\' と入力して確定する。"
|
||||
PLAYERS_DESC = "/players - プレイヤー名とID一覧を表示する。"
|
||||
KICK_DESC = "/kick [NAME|ID] - プレイヤーを部屋からキックする。"
|
||||
BAN_DESC = "/ban [NAME|ID] - プレイヤーを部屋からBANする。"
|
||||
PERM_BAN_DESC = "/permban [NAME|ID] - プレイヤーをすべての部屋からBANする。"
|
||||
MOD_DESC = "/moderator [NAME|ID] - プレイヤーに/kick、/ban、/permbanのようなコマンドの使用を許可する。"
|
||||
NAMETAGS_DESC = "/nametags [show-tag|show-health] - あなたの体力やネームタグの表示を変更する。"
|
||||
UNRECOGNIZED = "未知のコマンドです。"
|
||||
MOD_GRANTED = "\\#fff982\\あなたがモデレーターになりました。"
|
||||
|
||||
[MENU]
|
||||
BACK = "戻る"
|
||||
CANCEL = "キャンセル"
|
||||
NO = "いいえ"
|
||||
YES = "はい"
|
||||
|
||||
[CAMERA]
|
||||
CAMERA = "CAMERA"
|
||||
FREE_CAMERA = "フリーカメラ"
|
||||
ANALOG_CAMERA = "アナログカメラ"
|
||||
MOUSE_LOOK = "マウスで操作する"
|
||||
INVERT_X = "Xを逆転"
|
||||
INVERT_Y = "Yを逆転"
|
||||
X_SENSITIVITY = "Xの感度"
|
||||
Y_SENSITIVITY = "Yの感度"
|
||||
AGGRESSION = "かたさ"
|
||||
PAN_LEVEL = "流し撮りのレベル"
|
||||
DECELERATION = "げんそく"
|
||||
|
||||
[CONTROLS]
|
||||
CONTROLS = "CONTROLS"
|
||||
|
||||
N64_BINDS = "N64の操作"
|
||||
EXTRA_BINDS = "その他"
|
||||
BACKGROUND_GAMEPAD = "バックグラウンドのゲームパッド"
|
||||
DISABLE_GAMEPADS = "ゲームパッドを無効化"
|
||||
GAMEPAD = "ゲームパッド"
|
||||
DEADZONE = "デットゾーン"
|
||||
RUMBLE_STRENGTH = "振動の強さ"
|
||||
|
||||
CHAT = "チャットを開く"
|
||||
PLAYERS = "プレイヤーリストを表示する"
|
||||
D_UP = "上の十字キー"
|
||||
D_DOWN = "下の十字キー"
|
||||
D_LEFT = "左の十字キー"
|
||||
D_RIGHT = "右の十字キー"
|
||||
X = "X"
|
||||
Y = "Y"
|
||||
CONSOLE = "コンソール"
|
||||
PREV = "前のページへ戻る"
|
||||
NEXT = "次のページへ進む"
|
||||
DISCONNECT = "切断する"
|
||||
|
||||
UP = "上"
|
||||
DOWN = "下"
|
||||
LEFT = "左"
|
||||
RIGHT = "右"
|
||||
A = "A"
|
||||
B = "B"
|
||||
START = "スタート"
|
||||
L = "L"
|
||||
R = "R"
|
||||
Z = "Z"
|
||||
C_UP = "上のCボタン"
|
||||
C_DOWN = "下のCボタン"
|
||||
C_LEFT = "左のCボタン"
|
||||
C_RIGHT = "右のCボタン"
|
||||
|
||||
[DISPLAY]
|
||||
DISPLAY = "DISPLAY"
|
||||
FULLSCREEN = "全画面"
|
||||
FORCE_4BY3 = "強制4:3"
|
||||
PRELOAD_TEXTURES = "テクスチャをプリロード"
|
||||
VSYNC = "垂直同期 (VSYNC)を有効にする"
|
||||
UNCAPPED_FRAMERATE = "フレームレートを限定しない"
|
||||
FRAME_LIMIT = "フレームレートの限定"
|
||||
FAST = "速い"
|
||||
ACCURATE = "正確"
|
||||
INTERPOLATION = "補間"
|
||||
NEAREST = "ニアレスト"
|
||||
LINEAR = "バイリニア"
|
||||
TRIPOINT = "トライリニア"
|
||||
FILTERING = "フィルタリング"
|
||||
D0P5X = "0.5x"
|
||||
D1X = "1x"
|
||||
D1P5X = "1.5x"
|
||||
D3X = "3x"
|
||||
D10X = "10x"
|
||||
D100X = "100x"
|
||||
DRAW_DISTANCE = "描画距離"
|
||||
DYNOS_PACKS = "DynOSのパック"
|
||||
ANTIALIASING = "アンチエイリアス"
|
||||
OFF = "オフ"
|
||||
MUST_RESTART = "変更を適用するにはゲームを再起動してください"
|
||||
SHOW_FPS = "FPSを表示にする"
|
||||
|
||||
[DJUI_THEMES]
|
||||
DJUI_THEME = "DJUI テーマ"
|
||||
DJUI_SCALE = "DJUI サイズ"
|
||||
DJUI_FONT = "DJUI フォント"
|
||||
AUTO = "自動"
|
||||
CENTER = "DJUI 中心"
|
||||
FONT_NORMAL = "普通"
|
||||
FONT_ALIASED = "エイリアス"
|
||||
LIGHT_THEME = "ライト"
|
||||
DARK_THEME = "ダーク"
|
||||
MARIO_THEME = "マリオ"
|
||||
ODYSSEY_THEME = "オデッセイ"
|
||||
FILE_SELECT_THEME = "ファイル選択"
|
||||
|
||||
[DYNOS]
|
||||
DYNOS = "DYNOS"
|
||||
LOCAL_PLAYER_MODEL_ONLY = "ローカルのキャラモデルのみ"
|
||||
|
||||
[HOST_MESSAGE]
|
||||
INFO_TITLE = "INFO"
|
||||
WARN_DISCORD = ""
|
||||
WARN_DISCORD2 = ""
|
||||
WARN_SOCKET = "ファイアウォール設定が正しく設定されている事をご確認ください。\n直接接続には、ルータのポート転送でIPv4インバウンド接続を受信するように設定する\\#ffa0a0\\必要\\#dcdcdc\\があります。\n\nUDPポート'%d'番を開放してください。IPv6も対応しています。"
|
||||
HOST = "部屋を作る"
|
||||
|
||||
[HOST_MODS]
|
||||
MODS = "MODS"
|
||||
CATEGORIES = "カテゴリ一覧"
|
||||
WARNING = "\\#ffffa0\\<注意>\\#dcdcdc\\ MOD数が10以上あるので、ラグや不安定さをふせぐためにいくつか無効にしてください"
|
||||
NO_MODS_FOUND = "なにもMODが見つかりませんでした。"
|
||||
|
||||
[HOST_MOD_CATEGORIES]
|
||||
ALL = "All"
|
||||
MISC = "その他"
|
||||
ROMHACKS = "ハックロム"
|
||||
GAMEMODES = "ゲームモード"
|
||||
MOVESETS = "技構成"
|
||||
CHARACTER_SELECT = "キャラクター選択"
|
||||
|
||||
[HOST_SAVE]
|
||||
SAVE_TITLE = "SAVE"
|
||||
ERASE_TITLE = "ERASE"
|
||||
CONFIRM = "本当に消しますか?"
|
||||
ERASE = "消す"
|
||||
EDIT = "変更"
|
||||
EDIT_TITLE = "EDIT"
|
||||
EDIT_NAME = "ファイル名@を変更:"
|
||||
|
||||
[HOST_SETTINGS]
|
||||
SETTINGS = "SETTINGS"
|
||||
NONSOLID = "なし"
|
||||
SOLID = "衝突"
|
||||
FRIENDLY_FIRE = "同士討ち"
|
||||
PLAYER_INTERACTION = "プレイヤーの交流"
|
||||
WEAK = "弱い"
|
||||
NORMAL = "普通"
|
||||
TOO_MUCH = "強すぎる"
|
||||
KNOCKBACK_STRENGTH = "ノックバックの強さ"
|
||||
CLASSIC_PVP = "Classic"
|
||||
REVAMPED_PVP = "Revamped"
|
||||
PVP_MODE = "PvP Mode"
|
||||
LEAVE_LEVEL = "レベルを出る"
|
||||
STAY_IN_LEVEL = "レベルを出ない"
|
||||
NONSTOP = "ノンストップ"
|
||||
ON_STAR_COLLECTION = "スターを取った時"
|
||||
SKIP_INTRO_CUTSCENE = "イントロをスキップする"
|
||||
ENABLE_CHEATS = "チートを有効にする"
|
||||
BUBBLE_ON_DEATH = "死んだ時、バブル"
|
||||
NAMETAGS = "ネームタグを有効にする"
|
||||
BOUNCY_BOUNDS_ON_CAP = "オン(制限付き)"
|
||||
BOUNCY_BOUNDS_ON = "オン"
|
||||
BOUNCY_BOUNDS_OFF = "オフ"
|
||||
BOUNCY_LEVEL_BOUNDS = "緩いレベルの境界"
|
||||
AMOUNT_OF_PLAYERS = "最大人数"
|
||||
PAUSE_ANYWHERE = "どこでもポーズできる"
|
||||
|
||||
[HOST]
|
||||
SERVER_TITLE = "SERVER"
|
||||
HOST_TITLE = "HOST"
|
||||
DISCORD = "Discord"
|
||||
DIRECT_CONNECTION = "直接接続"
|
||||
COOPNET = "CoopNet"
|
||||
NETWORK_SYSTEM = "ネットワークシステム"
|
||||
PORT = "ポート"
|
||||
PASSWORD = "パスワード"
|
||||
SAVE_SLOT = "セーブスロット"
|
||||
SETTINGS = "設定"
|
||||
MODS = "MOD一覧"
|
||||
ROMHACKS = "ハックロム"
|
||||
APPLY = "適用"
|
||||
HOST = "部屋を作る"
|
||||
|
||||
[JOIN_MESSAGE]
|
||||
JOINING = "JOINING"
|
||||
|
||||
[JOIN]
|
||||
JOIN_TITLE = "JOIN"
|
||||
JOIN_DISCORD = ""
|
||||
JOIN_SOCKET = "\\#d0d0ff\\直接接続\\#dcdcdc\\のIPとポートを入力してください:"
|
||||
JOIN = "参加する"
|
||||
PUBLIC_LOBBIES = "公開部屋"
|
||||
PRIVATE_LOBBIES = "非公開部屋"
|
||||
DIRECT = "直接接続"
|
||||
|
||||
[RULES]
|
||||
RULES_TITLE = "RULES"
|
||||
RULE_1 = "1. 13歳以上が必要です。"
|
||||
RULE_2 = "2. 不快な言葉、中傷、攻撃的な言葉を言わないでください。"
|
||||
RULE_3 = "3. 非公式ビルドを使わないでください。"
|
||||
RULE_4 = "4. ゲームをエクスプロイトする外部ツールの使用は禁止。"
|
||||
RULE_5 = "5. 作者の許可なく、非公開MODを公開しないでください。"
|
||||
RULE_6 = "6. いかなるエッチなコンテンツは禁止。"
|
||||
SUBJECT_TO_CHANGE = "ルールはアップデートで変更される可能性があります。"
|
||||
NOTICE = "公開部屋でルールをお守りください。"
|
||||
RULES = "ルールを見る"
|
||||
|
||||
[MAIN]
|
||||
QUIT_TITLE = "QUIT"
|
||||
QUIT_CONFIRM = "本当に終了しますか?"
|
||||
HOST = "部屋を作る"
|
||||
JOIN = "部屋に入る"
|
||||
OPTIONS = "オプション"
|
||||
QUIT = "終了"
|
||||
|
||||
[MENU_OPTIONS]
|
||||
MENU_TITLE = "MENU"
|
||||
LEVEL = "レベル"
|
||||
STAFF_ROLL = "スタッフロール"
|
||||
MUSIC = "BGM"
|
||||
RANDOM_STAGE = "ランダムのステージ"
|
||||
PLAY_VANILLA_DEMOS = "バニラのデモを再生"
|
||||
|
||||
[MISC]
|
||||
DEBUG_TITLE = "DEBUG"
|
||||
FIXED_COLLISIONS = "直した当たり判定"
|
||||
LUA_PROFILER = "Luaのプロファイラ"
|
||||
CTX_PROFILER = "Ctxのプロファイラ"
|
||||
DEBUG_PRINT = "デバッグのプリント"
|
||||
DEBUG_INFO = "デバッグの情報"
|
||||
DEBUG_ERRORS = "デバッグのエラー"
|
||||
MISC_TITLE = "MISC"
|
||||
PAUSE_IN_SINGLEPLAYER = "ソロプレイに一時停止"
|
||||
DISABLE_POPUPS = "ポップアップを無効化にする"
|
||||
USE_STANDARD_KEY_BINDINGS_CHAT = "初期のチャットの操作"
|
||||
MENU_OPTIONS = "メニューの設定"
|
||||
INFORMATION = "情報"
|
||||
DEBUG = "デバッグ"
|
||||
LANGUAGE = "言語"
|
||||
COOP_COMPATIBILITY = "sm64ex-coop対応"
|
||||
R_BUTTON = "Rボタン - オプション"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFO"
|
||||
CHANGELOG = "変更りれき"
|
||||
|
||||
[CONSOLE]
|
||||
CONSOLE = "CONSOLE"
|
||||
|
||||
[MODLIST]
|
||||
MODS = "MODS"
|
||||
|
||||
[OPTIONS]
|
||||
OPTIONS = "OPTIONS"
|
||||
PLAYER = "プレイヤー"
|
||||
CAMERA = "カメラ"
|
||||
CONTROLS = "操作"
|
||||
DISPLAY = "ディスプレイ"
|
||||
SOUND = "サウンド"
|
||||
MISC = "その他"
|
||||
USER_FOLDER = "ユーザーフォルダを開く"
|
||||
APPDATA = "AppDataフォルダを開く"
|
||||
|
||||
[PAUSE]
|
||||
QUIT_TITLE = "QUIT"
|
||||
QUIT_HOST = "本当に閉じますか?"
|
||||
QUIT_CLIENT = "本当に出退しますか?"
|
||||
PAUSE_TITLE = "PAUSE"
|
||||
PLAYER = "プレイヤー"
|
||||
DYNOS_PACKS = "DynOSのパック"
|
||||
OPTIONS = "オプション"
|
||||
CHEATS = "チート"
|
||||
SERVER_SETTINGS = "部屋の設定"
|
||||
RESUME = "つづける"
|
||||
STOP_HOSTING = "部屋を閉じる"
|
||||
DISCONNECT = "切断する"
|
||||
MOD_MENU = "MODメニュー"
|
||||
MOD_MENU_TITLE = "MOD MENU"
|
||||
|
||||
[PLAYER]
|
||||
PLAYER_TITLE = "PLAYER"
|
||||
OVERALLS = "オーバーオール"
|
||||
SHIRT = "シャツ"
|
||||
GLOVES = "手袋"
|
||||
SHOES = "くつ"
|
||||
HAIR = "髪"
|
||||
SKIN = "はだ"
|
||||
CAP = "帽子"
|
||||
EMBLEM = "エンブレム"
|
||||
PALETTE = "PALETTE"
|
||||
PART = "部分"
|
||||
HEX_CODE = "16進数"
|
||||
RED = "赤"
|
||||
GREEN = "緑"
|
||||
BLUE = "青"
|
||||
PLAYER = "プレイヤー"
|
||||
NAME = "名前"
|
||||
MODEL = "キャラクター"
|
||||
PALETTE_PRESET = "パレットのプリセット"
|
||||
EDIT_PALETTE = "パレットの変更"
|
||||
PRESET_NAME = "プリセットの名前"
|
||||
DELETE_PRESET = "プリセットを消す"
|
||||
SAVE_PRESET = "プリセットを保存する"
|
||||
CAP_TOGGLE = "帽子をかぶるのはZボタンで切り替え"
|
||||
|
||||
[PALETTE]
|
||||
CUSTOM = "自作"
|
||||
|
||||
[PLAYER_LIST]
|
||||
PLAYERS = "PLAYERS"
|
||||
NAME = "名前"
|
||||
LOCATION = "位置"
|
||||
ACT = "アクト"
|
||||
|
||||
[SOUND]
|
||||
SOUND = "SOUND"
|
||||
MASTER_VOLUME = "主音量"
|
||||
MUSIC_VOLUME = "BGM音量"
|
||||
SFX_VOLUME = "SE音量"
|
||||
ENV_VOLUME = "環境の音量"
|
||||
FADEOUT = "遠い音をフェードアウトする"
|
||||
MUTE_FOCUS_LOSS = "非フォーカス時ミュートする"
|
||||
|
||||
[LANGUAGE]
|
||||
LANGUAGE = "LANGUAGE"
|
||||
Czech = "チェコ語 (Čeština)"
|
||||
Dutch = "オランダ語 (Nederlands)"
|
||||
English = "英語 (English)"
|
||||
French = "フランス語 (Français)"
|
||||
German = "ドイツ語 (Deutsch)"
|
||||
Italian = "イタリア語 (Italiano)"
|
||||
Japanese = "日本語"
|
||||
Polish = "ポーランド語 (Polski)"
|
||||
Portuguese = "ポルトガル語 (Português)"
|
||||
Russian = "ロシア語 (Русский)"
|
||||
Spanish = "スペイン語 (Español)"
|
||||
|
||||
[LOBBIES]
|
||||
PUBLIC_LOBBIES = "PUBLIC ROOMS"
|
||||
PRIVATE_LOBBIES = "PRIVATE ROOMS"
|
||||
REFRESH = "リフレッシュ"
|
||||
REFRESHING = "リフレッシュ中…"
|
||||
ENTER_PASSWORD = "部屋のパスワードを入力してください:"
|
||||
SEARCH = "検索"
|
||||
NONE_FOUND = "部屋が見つかりませんでした"
|
||||
|
||||
[CHANGELOG]
|
||||
CHANGELOG_TITLE = "CHANGELOG"
|
|
@ -379,6 +379,16 @@ MUTE_FOCUS_LOSS = "Wycisz dźwięk, gdy okno traci fokus"
|
|||
|
||||
[LANGUAGE]
|
||||
LANGUAGE = "JĘZYK"
|
||||
Czech = "Czech (Čeština)"
|
||||
Dutch = "Dutch (Nederlands)"
|
||||
French = "French (Français)"
|
||||
German = "German (Deutsch)"
|
||||
Italian = "Italian (Italiano)"
|
||||
Japanese = "Japanese (日本語)"
|
||||
Polish = "Polski"
|
||||
Portuguese = "Portuguese (Português)"
|
||||
Russian = "Russian (Русский)"
|
||||
Spanish = "Spanish (Español)"
|
||||
|
||||
[LOBBIES]
|
||||
PUBLIC_LOBBIES = "GRY PUBLICZNE"
|
||||
|
|
|
@ -379,6 +379,16 @@ MUTE_FOCUS_LOSS = "Silenciar quando a janela estiver desfocada"
|
|||
|
||||
[LANGUAGE]
|
||||
LANGUAGE = "IDIOMA"
|
||||
Czech = "Czech (Čeština)"
|
||||
Dutch = "Dutch (Nederlands)"
|
||||
French = "French (Français)"
|
||||
German = "German (Deutsch)"
|
||||
Italian = "Italian (Italiano)"
|
||||
Japanese = "Japanese (日本語)"
|
||||
Polish = "Polish (Polski)"
|
||||
Portuguese = "Português"
|
||||
Russian = "Russian (Русский)"
|
||||
Spanish = "Spanish (Español)"
|
||||
|
||||
[LOBBIES]
|
||||
PUBLIC_LOBBIES = "PARTIDAS\nPUBLICAS"
|
||||
|
|
|
@ -378,6 +378,16 @@ MUTE_FOCUS_LOSS = "Выключить звук когда окно не выбр
|
|||
|
||||
[LANGUAGE]
|
||||
LANGUAGE = "LANGUAGE"
|
||||
Czech = "Czech (Čeština)"
|
||||
Dutch = "Dutch (Nederlands)"
|
||||
French = "French (Français)"
|
||||
German = "German (Deutsch)"
|
||||
Italian = "Italian (Italiano)"
|
||||
Japanese = "Japanese (日本語)"
|
||||
Polish = "Polish (Polski)"
|
||||
Portuguese = "Portuguese (Português)"
|
||||
Russian = "Русский"
|
||||
Spanish = "Spanish (Español)"
|
||||
|
||||
[LOBBIES]
|
||||
PUBLIC_LOBBIES = "PUBLIC LOBBIES"
|
||||
|
|
|
@ -379,6 +379,16 @@ MUTE_FOCUS_LOSS = "Silenciar sonido cuando la ventana está desenfocada"
|
|||
|
||||
[LANGUAGE]
|
||||
LANGUAGE = "IDIOMA"
|
||||
Czech = "Czech (Čeština)"
|
||||
Dutch = "Dutch (Nederlands)"
|
||||
French = "French (Français)"
|
||||
German = "German (Deutsch)"
|
||||
Italian = "Italian (Italiano)"
|
||||
Japanese = "Japanese (日本語)"
|
||||
Polish = "Polish (Polski)"
|
||||
Portuguese = "Portuguese (Português)"
|
||||
Russian = "Russian (Русский)"
|
||||
Spanish = "Español"
|
||||
|
||||
[LOBBIES]
|
||||
PUBLIC_LOBBIES = "PARTIDAS\nPÚBLICAS"
|
||||
|
|
|
@ -12,11 +12,20 @@ static void djui_font_normal_render_char(char* c) {
|
|||
if (*c == ' ') { return; }
|
||||
|
||||
u32 index = djui_unicode_get_sprite_index(c);
|
||||
u32 tx = index % 32;
|
||||
u32 ty = index / 32;
|
||||
|
||||
extern ALIGNED8 const u8 texture_font_normal[];
|
||||
djui_gfx_render_texture_tile(texture_font_normal, 256, 128, 32, tx * 8, ty * 16, 8, 16, false, true);
|
||||
if (index & 0x010000) {
|
||||
index &= ~0x010000;
|
||||
u32 tx = index % 64;
|
||||
u32 ty = index / 64;
|
||||
extern ALIGNED8 const u8 texture_font_jp[];
|
||||
djui_gfx_render_texture_tile(texture_font_jp, 512, 1024, 32, tx * 8, ty * 16, 8, 16, false, true);
|
||||
}
|
||||
else {
|
||||
u32 tx = index % 32;
|
||||
u32 ty = index / 32;
|
||||
extern ALIGNED8 const u8 texture_font_normal[];
|
||||
djui_gfx_render_texture_tile(texture_font_normal, 256, 128, 32, tx * 8, ty * 16, 8, 16, false, true);
|
||||
}
|
||||
}
|
||||
|
||||
static f32 djui_font_normal_char_width(char* c) {
|
||||
|
@ -143,11 +152,20 @@ static void djui_font_aliased_render_char(char* c) {
|
|||
if (*c == ' ') { return; }
|
||||
|
||||
u32 index = djui_unicode_get_sprite_index(c);
|
||||
u32 tx = index % 32;
|
||||
u32 ty = index / 32;
|
||||
|
||||
extern ALIGNED8 const u8 texture_font_aliased[];
|
||||
djui_gfx_render_texture_tile(texture_font_aliased, 512, 256, 32, tx * 16, ty * 32, 16, 32, false, true);
|
||||
if (index & 0x010000) {
|
||||
index &= ~0x010000;
|
||||
u32 tx = index % 64;
|
||||
u32 ty = index / 64;
|
||||
extern ALIGNED8 const u8 texture_font_jp_aliased[];
|
||||
djui_gfx_render_texture_tile(texture_font_jp_aliased, 1024, 2048, 32, tx * 16, ty * 32, 16, 32, false, true);
|
||||
}
|
||||
else {
|
||||
u32 tx = index % 32;
|
||||
u32 ty = index / 32;
|
||||
extern ALIGNED8 const u8 texture_font_aliased[];
|
||||
djui_gfx_render_texture_tile(texture_font_aliased, 512, 256, 32, tx * 16, ty * 32, 16, 32, false, true);
|
||||
}
|
||||
}
|
||||
|
||||
static f32 djui_font_aliased_char_width(char* c) {
|
||||
|
|
|
@ -34,6 +34,11 @@ char* djui_language_get(const char *section, const char *key) {
|
|||
return value;
|
||||
}
|
||||
|
||||
char* djui_language_find_key(const char* section, const char* value) {
|
||||
if (!sLang) return NULL;
|
||||
return (char*)ini_find_key(sLang, section, value);
|
||||
}
|
||||
|
||||
void djui_language_replace(char* src, char* dst, int size, char key, char* value) {
|
||||
char tmpChar[10] = { 0 };
|
||||
char* c = src;
|
||||
|
|
|
@ -4,5 +4,6 @@
|
|||
bool djui_language_init(char* lang);
|
||||
/* |description|Gets a language `key` from a `section`|descriptionEnd| */
|
||||
char* djui_language_get(const char *section, const char *key);
|
||||
char* djui_language_find_key(const char* section, const char* value);
|
||||
void djui_language_replace(char* src, char* dst, int size, char key, char* value);
|
||||
void djui_language_replace2(char* src, char* dst, int size, char key1, char* value1, char key2, char* value2);
|
||||
|
|
|
@ -33,9 +33,13 @@ static void select_language(struct DjuiBase* caller) {
|
|||
tmp->base.interactable->update_style(&tmp->base);
|
||||
child = child->next;
|
||||
}
|
||||
|
||||
char* langName = checkbox->text->message;
|
||||
char* key = djui_language_find_key("LANGUAGE",langName);
|
||||
if (key) langName = key;
|
||||
|
||||
if (strcmp(configLanguage, checkbox->text->message)) {
|
||||
snprintf(configLanguage, MAX_CONFIG_STRING, "%s", checkbox->text->message);
|
||||
if (strcmp(configLanguage, langName)) {
|
||||
snprintf(configLanguage, MAX_CONFIG_STRING, "%s", langName);
|
||||
sLanguageChanged = true;
|
||||
smlua_call_event_hooks_string_param(HOOK_ON_LANGUAGE_CHANGED, configLanguage);
|
||||
}
|
||||
|
@ -133,7 +137,19 @@ void djui_panel_language_create(struct DjuiBase* caller) {
|
|||
|
||||
bool match = !strcmp(path, configLanguage);
|
||||
if (match) { foundMatch = true; }
|
||||
struct DjuiCheckbox* checkbox = djui_checkbox_create(sLayoutBase, path, match ? &sTrue : &sFalse, select_language);
|
||||
|
||||
struct DjuiCheckbox* checkbox = NULL;
|
||||
|
||||
char* displayName = djui_language_get("LANGUAGE",path);
|
||||
if (displayName != (char*)path) {
|
||||
char newName[SYS_MAX_PATH + 32] = { 0 };
|
||||
snprintf(newName, SYS_MAX_PATH + 32, "%s", displayName);
|
||||
checkbox = djui_checkbox_create(sLayoutBase, newName, match ? &sTrue : &sFalse, select_language);
|
||||
}
|
||||
else {
|
||||
checkbox = djui_checkbox_create(sLayoutBase, path, match ? &sTrue : &sFalse, select_language);
|
||||
}
|
||||
|
||||
if (!strcmp(path, "English")) { chkEnglish = checkbox; }
|
||||
}
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#define SPRITE_INDEX_START_CHAR '!'
|
||||
|
||||
struct SmCodeGlyph {
|
||||
char unicode[3];
|
||||
char unicode[4];
|
||||
char base;
|
||||
f32 width;
|
||||
u32 spriteIndex;
|
||||
|
@ -178,6 +178,10 @@ struct SmCodeGlyph sSmCodeGlyphs[] = {
|
|||
{ "ґ", 'R', 0, 0 },
|
||||
};
|
||||
|
||||
struct SmCodeGlyph sSmCodeGlyphs_JP[] = {
|
||||
#include "jp_glyphs.h"
|
||||
};
|
||||
|
||||
struct SmCodeGlyph sSmCodeDuplicateGlyphs[] = {
|
||||
{ "А", 'A', 0, 0 },
|
||||
{ "В", 'B', 0, 0 },
|
||||
|
@ -222,7 +226,6 @@ static u64 convert_unicode_char_to_u64(char* text) {
|
|||
value <<= 8;
|
||||
value |= (u8)*(++text);
|
||||
bytes--;
|
||||
text++;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
@ -241,6 +244,18 @@ void djui_unicode_init(void) {
|
|||
assert(key > 127);
|
||||
hmap_put(sCharMap, key, glyph);
|
||||
}
|
||||
|
||||
//add japanese glyphs
|
||||
size_t jpCount = sizeof(sSmCodeGlyphs_JP) / sizeof(sSmCodeGlyphs_JP[0]);
|
||||
for (size_t i = 0; i < jpCount; i++) {
|
||||
struct SmCodeGlyph* glyph = &sSmCodeGlyphs_JP[i];
|
||||
glyph->spriteIndex = 0x010000 + i;
|
||||
u64 key = convert_unicode_char_to_u64(glyph->unicode);
|
||||
s32 bytes = count_bytes_for_char(glyph->unicode);
|
||||
assert(bytes >= 2 && bytes <= 4);
|
||||
assert(key > 127);
|
||||
hmap_put(sCharMap, key, glyph);
|
||||
}
|
||||
|
||||
// add duplicate glyphs
|
||||
size_t dupCount = sizeof(sSmCodeDuplicateGlyphs) / sizeof(sSmCodeDuplicateGlyphs[0]);
|
||||
|
|
2676
src/pc/djui/jp_glyphs.h
Normal file
2676
src/pc/djui/jp_glyphs.h
Normal file
File diff suppressed because it is too large
Load diff
32
src/pc/ini.c
32
src/pc/ini.c
|
@ -219,6 +219,38 @@ void ini_free(ini_t *ini) {
|
|||
free(ini);
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds first key with matching value
|
||||
* @return string of key name
|
||||
*/
|
||||
const char* ini_find_key(ini_t *ini, const char* section, const char* value) {
|
||||
char *current_section = "";
|
||||
char *val;
|
||||
char *p = ini->data;
|
||||
|
||||
if (*p == '\0') {
|
||||
p = next(ini, p);
|
||||
}
|
||||
|
||||
while (p < ini->end) {
|
||||
if (*p == '[') {
|
||||
current_section = p + 1;
|
||||
}
|
||||
else {
|
||||
val = next(ini, p);
|
||||
if (!section || !strcmpci(section, current_section)) {
|
||||
if (!strcmpci(val,value)) {
|
||||
return p;
|
||||
}
|
||||
}
|
||||
p = val;
|
||||
}
|
||||
p = next(ini,p);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets value by specified key and section.
|
||||
* @return string with the key.
|
||||
|
|
|
@ -21,5 +21,6 @@ ini_t* ini_load(const char *filename);
|
|||
void ini_free(ini_t *ini);
|
||||
const char* ini_get(ini_t *ini, const char *section, const char *key);
|
||||
int ini_sget(ini_t *ini, const char *section, const char *key, const char *scanfmt, void *dst);
|
||||
const char* ini_find_key(ini_t *ini, const char* section, const char* value);
|
||||
|
||||
#endif
|
Binary file not shown.
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 183 KiB |
BIN
textures/custom_font/custom_font_jp.rgba32.png
Normal file
BIN
textures/custom_font/custom_font_jp.rgba32.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 65 KiB |
BIN
textures/custom_font/custom_font_jp_aliased.rgba32.png
Normal file
BIN
textures/custom_font/custom_font_jp_aliased.rgba32.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 164 KiB |
Binary file not shown.
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 73 KiB |
Loading…
Reference in a new issue