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 commit ab2ad8c189.

* Revert "separated japanese glyphs and images"

This reverts commit c3d0fd40e3.

* 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:
Michael 2024-12-31 09:32:31 -06:00 committed by GitHub
parent 0ef9ae742e
commit 735a7ec7a7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
26 changed files with 3296 additions and 15 deletions

View file

@ -3,6 +3,14 @@
#include "game/ingame_menu.h" #include "game/ingame_menu.h"
#include "make_const_nonconst.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[] = { ALIGNED8 const u8 texture_font_normal[] = {
#include "textures/custom_font/custom_font_normal.rgba32.inc.c" #include "textures/custom_font/custom_font_normal.rgba32.inc.c"
}; };

View file

@ -1546,6 +1546,8 @@ extern ALIGNED8 const Texture texture_font_hud_recolor[];
extern ALIGNED8 const Texture texture_font_special[]; extern ALIGNED8 const Texture texture_font_special[];
extern ALIGNED8 const Texture texture_selectionbox_back_icon[]; extern ALIGNED8 const Texture texture_selectionbox_back_icon[];
extern ALIGNED8 const Texture texture_selectionbox_forward_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 texture_coopdx_logo[];
extern ALIGNED8 const Texture pss_seg7_texture_07000000[]; extern ALIGNED8 const Texture pss_seg7_texture_07000000[];
extern ALIGNED8 const Texture pss_seg7_texture_07000800[]; extern ALIGNED8 const Texture pss_seg7_texture_07000800[];

View file

@ -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_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_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), define_builtin_tex(waluigi_texture_eyes_dead, "actors/waluigi/custom_waluigi_eyes_dead.rgba16.png", 64, 32, 16),
// DJUI // DJUI
define_builtin_tex(texture_font_normal, "textures/custom_font/custom_font_normal.rgba32.png", 256, 128, 32), 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_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_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, "textures/custom_font/custom_font_hud.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_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_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 // Logo
define_builtin_tex(texture_selectionbox_back_icon, "textures/segment2/custom_selectionbox_back_icon.rgba16.png", 16, 16, 16), define_builtin_tex(texture_selectionbox_back_icon, "textures/segment2/custom_selectionbox_back_icon.rgba16.png", 16, 16, 16),

View file

@ -379,6 +379,16 @@ MUTE_FOCUS_LOSS = "Ztlumit, když je okno na pozadí"
[LANGUAGE] [LANGUAGE]
LANGUAGE = "JAZYK" 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] [LOBBIES]
PUBLIC_LOBBIES = "VEREJNE HRY" PUBLIC_LOBBIES = "VEREJNE HRY"

View file

@ -379,6 +379,16 @@ MUTE_FOCUS_LOSS = "Dempen wanneer venster niet meer scherp is"
[LANGUAGE] [LANGUAGE]
LANGUAGE = "TAAL" 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] [LOBBIES]
PUBLIC_LOBBIES = "PUBLIEKE LOBBIES" PUBLIC_LOBBIES = "PUBLIEKE LOBBIES"

View file

@ -379,6 +379,16 @@ MUTE_FOCUS_LOSS = "Mute When Window Unfocused"
[LANGUAGE] [LANGUAGE]
LANGUAGE = "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] [LOBBIES]
PUBLIC_LOBBIES = "PUBLIC LOBBIES" PUBLIC_LOBBIES = "PUBLIC LOBBIES"

View file

@ -379,6 +379,16 @@ MUTE_FOCUS_LOSS = "Muet en arrière plan"
[LANGUAGE] [LANGUAGE]
LANGUAGE = "LANGUE" 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] [LOBBIES]
PUBLIC_LOBBIES = "PARTIES\nPUBLIQUES" PUBLIC_LOBBIES = "PARTIES\nPUBLIQUES"

View file

@ -379,6 +379,16 @@ MUTE_FOCUS_LOSS = "Stumm wenn nicht fokussiert"
[LANGUAGE] [LANGUAGE]
LANGUAGE = "SPRACHE" 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] [LOBBIES]
PUBLIC_LOBBIES = "ÖFFENTLICHE\nLOBBIES" PUBLIC_LOBBIES = "ÖFFENTLICHE\nLOBBIES"

View file

@ -377,6 +377,16 @@ MUTE_FOCUS_LOSS = "Disattiva l'audio quando la finestra non è a fuoco"
[LANGUAGE] [LANGUAGE]
LANGUAGE = "LINGUA" 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] [LOBBIES]
PUBLIC_LOBBIES = "PUBLIC LOBBIES" PUBLIC_LOBBIES = "PUBLIC LOBBIES"

404
lang/Japanese.ini Normal file
View 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"

View file

@ -379,6 +379,16 @@ MUTE_FOCUS_LOSS = "Wycisz dźwięk, gdy okno traci fokus"
[LANGUAGE] [LANGUAGE]
LANGUAGE = "JĘZYK" 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] [LOBBIES]
PUBLIC_LOBBIES = "GRY PUBLICZNE" PUBLIC_LOBBIES = "GRY PUBLICZNE"

View file

@ -379,6 +379,16 @@ MUTE_FOCUS_LOSS = "Silenciar quando a janela estiver desfocada"
[LANGUAGE] [LANGUAGE]
LANGUAGE = "IDIOMA" 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] [LOBBIES]
PUBLIC_LOBBIES = "PARTIDAS\nPUBLICAS" PUBLIC_LOBBIES = "PARTIDAS\nPUBLICAS"

View file

@ -378,6 +378,16 @@ MUTE_FOCUS_LOSS = "Выключить звук когда окно не выбр
[LANGUAGE] [LANGUAGE]
LANGUAGE = "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] [LOBBIES]
PUBLIC_LOBBIES = "PUBLIC LOBBIES" PUBLIC_LOBBIES = "PUBLIC LOBBIES"

View file

@ -379,6 +379,16 @@ MUTE_FOCUS_LOSS = "Silenciar sonido cuando la ventana está desenfocada"
[LANGUAGE] [LANGUAGE]
LANGUAGE = "IDIOMA" 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] [LOBBIES]
PUBLIC_LOBBIES = "PARTIDAS\nPÚBLICAS" PUBLIC_LOBBIES = "PARTIDAS\nPÚBLICAS"

View file

@ -12,11 +12,20 @@ static void djui_font_normal_render_char(char* c) {
if (*c == ' ') { return; } if (*c == ' ') { return; }
u32 index = djui_unicode_get_sprite_index(c); u32 index = djui_unicode_get_sprite_index(c);
u32 tx = index % 32;
u32 ty = index / 32;
extern ALIGNED8 const u8 texture_font_normal[]; if (index & 0x010000) {
djui_gfx_render_texture_tile(texture_font_normal, 256, 128, 32, tx * 8, ty * 16, 8, 16, false, true); 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) { 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; } if (*c == ' ') { return; }
u32 index = djui_unicode_get_sprite_index(c); u32 index = djui_unicode_get_sprite_index(c);
u32 tx = index % 32;
u32 ty = index / 32;
extern ALIGNED8 const u8 texture_font_aliased[]; if (index & 0x010000) {
djui_gfx_render_texture_tile(texture_font_aliased, 512, 256, 32, tx * 16, ty * 32, 16, 32, false, true); 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) { static f32 djui_font_aliased_char_width(char* c) {

View file

@ -34,6 +34,11 @@ char* djui_language_get(const char *section, const char *key) {
return value; 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) { void djui_language_replace(char* src, char* dst, int size, char key, char* value) {
char tmpChar[10] = { 0 }; char tmpChar[10] = { 0 };
char* c = src; char* c = src;

View file

@ -4,5 +4,6 @@
bool djui_language_init(char* lang); bool djui_language_init(char* lang);
/* |description|Gets a language `key` from a `section`|descriptionEnd| */ /* |description|Gets a language `key` from a `section`|descriptionEnd| */
char* djui_language_get(const char *section, const char *key); 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_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); void djui_language_replace2(char* src, char* dst, int size, char key1, char* value1, char key2, char* value2);

View file

@ -33,9 +33,13 @@ static void select_language(struct DjuiBase* caller) {
tmp->base.interactable->update_style(&tmp->base); tmp->base.interactable->update_style(&tmp->base);
child = child->next; 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)) { if (strcmp(configLanguage, langName)) {
snprintf(configLanguage, MAX_CONFIG_STRING, "%s", checkbox->text->message); snprintf(configLanguage, MAX_CONFIG_STRING, "%s", langName);
sLanguageChanged = true; sLanguageChanged = true;
smlua_call_event_hooks_string_param(HOOK_ON_LANGUAGE_CHANGED, configLanguage); 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); bool match = !strcmp(path, configLanguage);
if (match) { foundMatch = true; } 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; } if (!strcmp(path, "English")) { chkEnglish = checkbox; }
} }

View file

@ -8,7 +8,7 @@
#define SPRITE_INDEX_START_CHAR '!' #define SPRITE_INDEX_START_CHAR '!'
struct SmCodeGlyph { struct SmCodeGlyph {
char unicode[3]; char unicode[4];
char base; char base;
f32 width; f32 width;
u32 spriteIndex; u32 spriteIndex;
@ -178,6 +178,10 @@ struct SmCodeGlyph sSmCodeGlyphs[] = {
{ "ґ", 'R', 0, 0 }, { "ґ", 'R', 0, 0 },
}; };
struct SmCodeGlyph sSmCodeGlyphs_JP[] = {
#include "jp_glyphs.h"
};
struct SmCodeGlyph sSmCodeDuplicateGlyphs[] = { struct SmCodeGlyph sSmCodeDuplicateGlyphs[] = {
{ "А", 'A', 0, 0 }, { "А", 'A', 0, 0 },
{ "В", 'B', 0, 0 }, { "В", 'B', 0, 0 },
@ -222,7 +226,6 @@ static u64 convert_unicode_char_to_u64(char* text) {
value <<= 8; value <<= 8;
value |= (u8)*(++text); value |= (u8)*(++text);
bytes--; bytes--;
text++;
} }
return value; return value;
} }
@ -241,6 +244,18 @@ void djui_unicode_init(void) {
assert(key > 127); assert(key > 127);
hmap_put(sCharMap, key, glyph); 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 // add duplicate glyphs
size_t dupCount = sizeof(sSmCodeDuplicateGlyphs) / sizeof(sSmCodeDuplicateGlyphs[0]); size_t dupCount = sizeof(sSmCodeDuplicateGlyphs) / sizeof(sSmCodeDuplicateGlyphs[0]);

2676
src/pc/djui/jp_glyphs.h Normal file

File diff suppressed because it is too large Load diff

View file

@ -219,6 +219,38 @@ void ini_free(ini_t *ini) {
free(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. * Gets value by specified key and section.
* @return string with the key. * @return string with the key.

View file

@ -21,5 +21,6 @@ ini_t* ini_load(const char *filename);
void ini_free(ini_t *ini); void ini_free(ini_t *ini);
const char* ini_get(ini_t *ini, const char *section, const char *key); 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); 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 #endif

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 183 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

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