From a7e208fc237fdbfdbb690ccbe955d0c165d91e6c Mon Sep 17 00:00:00 2001 From: Mike Date: Thu, 19 Dec 2024 20:21:36 -0600 Subject: [PATCH] japanese language support --- .gitignore | 4 - data/dynos_mgr_builtin_tex.cpp | 4 +- lang/Czech.ini | 10 + lang/Dutch.ini | 10 + lang/English.ini | 10 + lang/French.ini | 10 + lang/German.ini | 10 + lang/Italian.ini | 10 + lang/Japanese.ini | 394 ++++++++++++++++++++++++++++++ lang/Polish.ini | 10 + lang/Portuguese.ini | 10 + lang/Russian.ini | 10 + lang/Spanish.ini | 10 + src/pc/djui/djui_font.c | 4 +- src/pc/djui/djui_language.c | 5 + src/pc/djui/djui_language.h | 3 +- src/pc/djui/djui_panel_language.c | 22 +- src/pc/djui/djui_unicode.c | 358 ++++++++++++++++++++++++++- src/pc/ini.c | 32 +++ src/pc/ini.h | 1 + 20 files changed, 913 insertions(+), 14 deletions(-) create mode 100644 lang/Japanese.ini diff --git a/.gitignore b/.gitignore index a9dcb7d01..89a02f18a 100644 --- a/.gitignore +++ b/.gitignore @@ -91,8 +91,4 @@ todo-old.txt tools/ido5.3_compiler/usr/lib/libc.so.1 /.vs - -buildInfo.txt -tools/custom/** -fonts/** *.db diff --git a/data/dynos_mgr_builtin_tex.cpp b/data/dynos_mgr_builtin_tex.cpp index 59450aeaf..f71c73e25 100644 --- a/data/dynos_mgr_builtin_tex.cpp +++ b/data/dynos_mgr_builtin_tex.cpp @@ -1139,8 +1139,8 @@ static const struct BuiltinTexInfo sDynosBuiltinTexs[] = { 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_normal, "textures/custom_font/custom_font_normal.rgba32.png", 256, 512, 32), + define_builtin_tex(texture_font_aliased, "textures/custom_font/custom_font_aliased.rgba32.png", 512, 1024, 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), diff --git a/lang/Czech.ini b/lang/Czech.ini index fdfdb1f3f..997622b41 100644 --- a/lang/Czech.ini +++ b/lang/Czech.ini @@ -376,6 +376,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" diff --git a/lang/Dutch.ini b/lang/Dutch.ini index 04d013b92..8a6506b27 100644 --- a/lang/Dutch.ini +++ b/lang/Dutch.ini @@ -376,6 +376,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" diff --git a/lang/English.ini b/lang/English.ini index 4d227aeb9..3735a5dde 100644 --- a/lang/English.ini +++ b/lang/English.ini @@ -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" diff --git a/lang/French.ini b/lang/French.ini index ccc124962..15c3c5e59 100644 --- a/lang/French.ini +++ b/lang/French.ini @@ -376,6 +376,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" diff --git a/lang/German.ini b/lang/German.ini index bb187017e..e421896f0 100644 --- a/lang/German.ini +++ b/lang/German.ini @@ -376,6 +376,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" diff --git a/lang/Italian.ini b/lang/Italian.ini index 37fae537d..87b1e0e77 100644 --- a/lang/Italian.ini +++ b/lang/Italian.ini @@ -374,6 +374,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" diff --git a/lang/Japanese.ini b/lang/Japanese.ini new file mode 100644 index 000000000..e8b333597 --- /dev/null +++ b/lang/Japanese.ini @@ -0,0 +1,394 @@ +[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\\ バンされた" +DISCONNECT_REJOIN = "\\#ffa0a0\\抜けた:\\#dcdcdc\\ 再接続…" +DISCONNECT_CLOSED = "\\#ffa0a0\\抜けた:\\#dcdcdc\\ ホストが接続を切断した" +DISCONNECT_BIG_MOD = "サーバーが大きいすぎるモッドがあった。\n終了中。" +DIED = "@は死んだ" +DEBUG_FLY = "@はデバッグの自由フライトのモードに入った" +IMPORT_MOD_SUCCESS = "'@'\n\\#a0ffa0\\モッドを読み込んだ\\#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 = "'@'久バンされている!" +SERVER_ONLY = "サーバーだけがこのコマンドを実行できる。" +PERM_BANNING = "'@'が永久バンされている!" +ADD_MODERATOR = "'@'がモデレータに追加されている!" +PLAYERS = "プレイヤー" +NO_PERMS = "このコマンドを実行する許可がありません。" +PLAYER_NOT_FOUND = "プレイヤーが見つからない。" +NAMETAGS_MISSING_PARAMETERS = "引数がない: [OPTION]" +SELF_KICK = "あなたは強制退させられない。" +SELF_BAN = "あなたはバンさせられない。" +SELF_MOD = "あなたはモデレータになれない。" +KICK_CONFIRM = "本当に'@'を強制退出しますか?\n強制退出するには'\\#a0ffa0\\/confirm\\#fff982\\'と入力してください。" +BAN_CONFIRM = "本当に'@'をバンしますか?\nバンするには'\\#a0ffa0\\/confirm\\#fff982\\'と入力してください。" +PERM_BAN_CONFIRM = "本当に'@'を永久バンしますか?\nバンするには'\\#a0ffa0\\/confirm\\#fff982\\'と入力してください。" +MOD_CONFIRM = "本当に'@'をモデレータにしますか?\n'\\#a0ffa0\\/confirm\\#fff982\\'と入力してください。" +PLAYERS_DESC = "/players - プレイヤーの名前とIDのリストを表示する" +KICK_DESC = "/kick [NAME|ID] - このプレイヤーをゲームから強制退出する。" +BAN_DESC = "/ban [NAME|ID] - このプレイヤーをゲームからバンする。" +PERM_BAN_DESC = "/permban [NAME|ID] - このプレイヤーをあなたのすべてのゲームからバンする。" +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] +ROMHACKS = "ROMHACKS" +MODS = "MODS" +WARNING = "\\#ffffa0\\<注意>\\#dcdcdc\\ モッド数が10以上なので、ラグや不安定さをふせぐためにいくつか無効にしてください" + +[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 = "ノックバックの強さ" +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 = "モッド & ゲームモード" +ROMHACKS = "Rom-Hacks" +APPLY = "OK" +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. いかなるエッチのコンテンツは禁止。" +SUBJECT_TO_CHANGE = "このルールは新アップデートで変更される可能性がある。" +NOTICE = "CoopNetに接続すると、公開ロビーでこのルールを守ることに同意します。" +RULES = "ルール" + +[MAIN] +QUIT_TITLE = "QUIT" +QUIT_CONFIRM = "本当に終了しますか?" +HOST = "ホスト" +JOIN = "参加" +OPTIONS = "オプション" +QUIT = "終了" + +[MENU_OPTIONS] +MENU_TITLE = "MENU" +LEVEL = "レベル" +STAFF_ROLL = "スタッフロール" +MUSIC = "音楽" +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_MENU_TITLE = "MOD MENU" + +[PLAYER] +PLAYER_TITLE = "PLAYER" +OVERALLS = "オーバーオール" +SHIRT = "シャツ" +GLOVES = "手袋" +SHOES = "くつ" +HAIR = "ヘア" +SKIN = "はだ" +CAP = "帽子" +EMBLEM = "エンブレム" +PALETTE = "PALETTE" +PART = "部分" +HEX_CODE = "十六進のコード" +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 = "音楽の音量" +SFX_VOLUME = "音響の音量" +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 LOBBIES" +PRIVATE_LOBBIES = "PRIVATE LOBBIES" +REFRESH = "リフレッシュ" +REFRESHING = "リフレッシュ中…" +ENTER_PASSWORD = "非公開のロビーのパスを入力してください:" +SEARCH = "サーチ" +NONE_FOUND = "ロビーが見つかりません" + +[CHANGELOG] +CHANGELOG_TITLE = "CHANGELOG" \ No newline at end of file diff --git a/lang/Polish.ini b/lang/Polish.ini index fa3edafee..9a9eb7e18 100644 --- a/lang/Polish.ini +++ b/lang/Polish.ini @@ -376,6 +376,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" diff --git a/lang/Portuguese.ini b/lang/Portuguese.ini index 8e90a3dc8..28c690be7 100644 --- a/lang/Portuguese.ini +++ b/lang/Portuguese.ini @@ -367,6 +367,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" diff --git a/lang/Russian.ini b/lang/Russian.ini index 2ade05797..fa36682a5 100644 --- a/lang/Russian.ini +++ b/lang/Russian.ini @@ -375,6 +375,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" diff --git a/lang/Spanish.ini b/lang/Spanish.ini index 6f1ae0134..266904d99 100644 --- a/lang/Spanish.ini +++ b/lang/Spanish.ini @@ -376,6 +376,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" diff --git a/src/pc/djui/djui_font.c b/src/pc/djui/djui_font.c index 5ed6c50a5..1e6a37ddd 100644 --- a/src/pc/djui/djui_font.c +++ b/src/pc/djui/djui_font.c @@ -16,7 +16,7 @@ static void djui_font_normal_render_char(char* c) { 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); + djui_gfx_render_texture_tile(texture_font_normal, 256, 512, 32, tx * 8, ty * 16, 8, 16, false); } static f32 djui_font_normal_char_width(char* c) { @@ -147,7 +147,7 @@ static void djui_font_aliased_render_char(char* c) { 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); + djui_gfx_render_texture_tile(texture_font_aliased, 512, 1024, 32, tx * 16, ty * 32, 16, 32, false); } static f32 djui_font_aliased_char_width(char* c) { diff --git a/src/pc/djui/djui_language.c b/src/pc/djui/djui_language.c index e4fe6f59a..d97360514 100644 --- a/src/pc/djui/djui_language.c +++ b/src/pc/djui/djui_language.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 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; diff --git a/src/pc/djui/djui_language.h b/src/pc/djui/djui_language.h index 31e5c7bfb..ebd6785e9 100644 --- a/src/pc/djui/djui_language.h +++ b/src/pc/djui/djui_language.h @@ -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); +void djui_language_replace2(char* src, char* dst, int size, char key1, char* value1, char key2, char* value2); \ No newline at end of file diff --git a/src/pc/djui/djui_panel_language.c b/src/pc/djui/djui_panel_language.c index 1e72c5ef9..d3b2f9081 100644 --- a/src/pc/djui/djui_panel_language.c +++ b/src/pc/djui/djui_panel_language.c @@ -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; } } diff --git a/src/pc/djui/djui_unicode.c b/src/pc/djui/djui_unicode.c index 0e663023b..670b581cb 100644 --- a/src/pc/djui/djui_unicode.c +++ b/src/pc/djui/djui_unicode.c @@ -8,7 +8,7 @@ #define SPRITE_INDEX_START_CHAR '!' struct SmCodeGlyph { - char unicode[3]; + char unicode[4]; char base; f32 width; u32 spriteIndex; @@ -176,6 +176,361 @@ struct SmCodeGlyph sSmCodeGlyphs[] = { { "ї", 'l', 0, 0 }, { "Ґ", 'R', 0, 0 }, { "ґ", 'R', 0, 0 }, + + { "…", 8, 18, 0 }, + { "、", 8, 18, 0 }, + { "。", 8, 18, 0 }, + { "『", 8, 18, 0 }, + { "』", 8, 18, 0 }, + { "ぁ", 8, 18, 0 }, + { "あ", 8, 18, 0 }, + { "ぃ", 8, 18, 0 }, + { "い", 8, 18, 0 }, + { "ぅ", 8, 18, 0 }, + { "う", 8, 18, 0 }, + { "ぇ", 8, 18, 0 }, + { "え", 8, 18, 0 }, + { "ぉ", 8, 18, 0 }, + { "お", 8, 18, 0 }, + { "か", 8, 18, 0 }, + { "が", 8, 18, 0 }, + { "き", 8, 18, 0 }, + { "ぎ", 8, 18, 0 }, + { "く", 8, 18, 0 }, + { "ぐ", 8, 18, 0 }, + { "け", 8, 18, 0 }, + { "げ", 8, 18, 0 }, + { "こ", 8, 18, 0 }, + { "ご", 8, 18, 0 }, + { "さ", 8, 18, 0 }, + { "ざ", 8, 18, 0 }, + { "し", 8, 18, 0 }, + { "じ", 8, 18, 0 }, + { "す", 8, 18, 0 }, + { "ず", 8, 18, 0 }, + { "せ", 8, 18, 0 }, + { "ぜ", 8, 18, 0 }, + { "そ", 8, 18, 0 }, + { "ぞ", 8, 18, 0 }, + { "た", 8, 18, 0 }, + { "だ", 8, 18, 0 }, + { "ち", 8, 18, 0 }, + { "ぢ", 8, 18, 0 }, + { "っ", 8, 18, 0 }, + { "つ", 8, 18, 0 }, + { "づ", 8, 18, 0 }, + { "て", 8, 18, 0 }, + { "で", 8, 18, 0 }, + { "と", 8, 18, 0 }, + { "ど", 8, 18, 0 }, + { "な", 8, 18, 0 }, + { "に", 8, 18, 0 }, + { "ぬ", 8, 18, 0 }, + { "ね", 8, 18, 0 }, + { "の", 8, 18, 0 }, + { "は", 8, 18, 0 }, + { "ば", 8, 18, 0 }, + { "ぱ", 8, 18, 0 }, + { "ひ", 8, 18, 0 }, + { "び", 8, 18, 0 }, + { "ぴ", 8, 18, 0 }, + { "ふ", 8, 18, 0 }, + { "ぶ", 8, 18, 0 }, + { "ぷ", 8, 18, 0 }, + { "へ", 8, 18, 0 }, + { "べ", 8, 18, 0 }, + { "ぺ", 8, 18, 0 }, + { "ほ", 8, 18, 0 }, + { "ぼ", 8, 18, 0 }, + { "ぽ", 8, 18, 0 }, + { "ま", 8, 18, 0 }, + { "み", 8, 18, 0 }, + { "む", 8, 18, 0 }, + { "め", 8, 18, 0 }, + { "も", 8, 18, 0 }, + { "ゃ", 8, 18, 0 }, + { "や", 8, 18, 0 }, + { "ゅ", 8, 18, 0 }, + { "ゆ", 8, 18, 0 }, + { "ょ", 8, 18, 0 }, + { "よ", 8, 18, 0 }, + { "ら", 8, 18, 0 }, + { "り", 8, 18, 0 }, + { "る", 8, 18, 0 }, + { "れ", 8, 18, 0 }, + { "ろ", 8, 18, 0 }, + { "わ", 8, 18, 0 }, + { "を", 8, 18, 0 }, + { "ん", 8, 18, 0 }, + { "ァ", 8, 18, 0 }, + { "ア", 8, 18, 0 }, + { "ィ", 8, 18, 0 }, + { "イ", 8, 18, 0 }, + { "ゥ", 8, 18, 0 }, + { "ウ", 8, 18, 0 }, + { "ェ", 8, 18, 0 }, + { "エ", 8, 18, 0 }, + { "ォ", 8, 18, 0 }, + { "オ", 8, 18, 0 }, + { "カ", 8, 18, 0 }, + { "ガ", 8, 18, 0 }, + { "キ", 8, 18, 0 }, + { "ギ", 8, 18, 0 }, + { "ク", 8, 18, 0 }, + { "グ", 8, 18, 0 }, + { "ケ", 8, 18, 0 }, + { "ゲ", 8, 18, 0 }, + { "コ", 8, 18, 0 }, + { "ゴ", 8, 18, 0 }, + { "サ", 8, 18, 0 }, + { "ザ", 8, 18, 0 }, + { "シ", 8, 18, 0 }, + { "ジ", 8, 18, 0 }, + { "ス", 8, 18, 0 }, + { "ズ", 8, 18, 0 }, + { "セ", 8, 18, 0 }, + { "ゼ", 8, 18, 0 }, + { "ソ", 8, 18, 0 }, + { "ゾ", 8, 18, 0 }, + { "タ", 8, 18, 0 }, + { "ダ", 8, 18, 0 }, + { "チ", 8, 18, 0 }, + { "ヂ", 8, 18, 0 }, + { "ッ", 8, 18, 0 }, + { "ツ", 8, 18, 0 }, + { "ヅ", 8, 18, 0 }, + { "テ", 8, 18, 0 }, + { "デ", 8, 18, 0 }, + { "ト", 8, 18, 0 }, + { "ド", 8, 18, 0 }, + { "ナ", 8, 18, 0 }, + { "ニ", 8, 18, 0 }, + { "ヌ", 8, 18, 0 }, + { "ネ", 8, 18, 0 }, + { "ノ", 8, 18, 0 }, + { "ハ", 8, 18, 0 }, + { "バ", 8, 18, 0 }, + { "パ", 8, 18, 0 }, + { "ヒ", 8, 18, 0 }, + { "ビ", 8, 18, 0 }, + { "ピ", 8, 18, 0 }, + { "フ", 8, 18, 0 }, + { "ブ", 8, 18, 0 }, + { "プ", 8, 18, 0 }, + { "ヘ", 8, 18, 0 }, + { "ベ", 8, 18, 0 }, + { "ペ", 8, 18, 0 }, + { "ホ", 8, 18, 0 }, + { "ボ", 8, 18, 0 }, + { "ポ", 8, 18, 0 }, + { "マ", 8, 18, 0 }, + { "ミ", 8, 18, 0 }, + { "ム", 8, 18, 0 }, + { "メ", 8, 18, 0 }, + { "モ", 8, 18, 0 }, + { "ャ", 8, 18, 0 }, + { "ヤ", 8, 18, 0 }, + { "ュ", 8, 18, 0 }, + { "ユ", 8, 18, 0 }, + { "ョ", 8, 18, 0 }, + { "ヨ", 8, 18, 0 }, + { "ラ", 8, 18, 0 }, + { "リ", 8, 18, 0 }, + { "ル", 8, 18, 0 }, + { "レ", 8, 18, 0 }, + { "ロ", 8, 18, 0 }, + { "ワ", 8, 18, 0 }, + { "ヲ", 8, 18, 0 }, + { "ン", 8, 18, 0 }, + { "ヴ", 8, 18, 0 }, + { "・", 8, 18, 0 }, + { "ー", 8, 18, 0 }, + { "一", 8, 18, 0 }, + { "上", 8, 18, 0 }, + { "下", 8, 18, 0 }, + { "不", 8, 18, 0 }, + { "中", 8, 18, 0 }, + { "久", 8, 18, 0 }, + { "了", 8, 18, 0 }, + { "交", 8, 18, 0 }, + { "付", 8, 18, 0 }, + { "以", 8, 18, 0 }, + { "体", 8, 18, 0 }, + { "作", 8, 18, 0 }, + { "使", 8, 18, 0 }, + { "信", 8, 18, 0 }, + { "修", 8, 18, 0 }, + { "停", 8, 18, 0 }, + { "傷", 8, 18, 0 }, + { "入", 8, 18, 0 }, + { "全", 8, 18, 0 }, + { "公", 8, 18, 0 }, + { "六", 8, 18, 0 }, + { "再", 8, 18, 0 }, + { "出", 8, 18, 0 }, + { "分", 8, 18, 0 }, + { "切", 8, 18, 0 }, + { "初", 8, 18, 0 }, + { "判", 8, 18, 0 }, + { "別", 8, 18, 0 }, + { "利", 8, 18, 0 }, + { "制", 8, 18, 0 }, + { "前", 8, 18, 0 }, + { "力", 8, 18, 0 }, + { "加", 8, 18, 0 }, + { "効", 8, 18, 0 }, + { "動", 8, 18, 0 }, + { "化", 8, 18, 0 }, + { "十", 8, 18, 0 }, + { "去", 8, 18, 0 }, + { "参", 8, 18, 0 }, + { "受", 8, 18, 0 }, + { "可", 8, 18, 0 }, + { "右", 8, 18, 0 }, + { "同", 8, 18, 0 }, + { "名", 8, 18, 0 }, + { "吐", 8, 18, 0 }, + { "員", 8, 18, 0 }, + { "在", 8, 18, 0 }, + { "報", 8, 18, 0 }, + { "境", 8, 18, 0 }, + { "士", 8, 18, 0 }, + { "変", 8, 18, 0 }, + { "外", 8, 18, 0 }, + { "大", 8, 18, 0 }, + { "失", 8, 18, 0 }, + { "始", 8, 18, 0 }, + { "子", 8, 18, 0 }, + { "字", 8, 18, 0 }, + { "存", 8, 18, 0 }, + { "守", 8, 18, 0 }, + { "安", 8, 18, 0 }, + { "定", 8, 18, 0 }, + { "実", 8, 18, 0 }, + { "対", 8, 18, 0 }, + { "左", 8, 18, 0 }, + { "帽", 8, 18, 0 }, + { "度", 8, 18, 0 }, + { "引", 8, 18, 0 }, + { "弱", 8, 18, 0 }, + { "強", 8, 18, 0 }, + { "当", 8, 18, 0 }, + { "心", 8, 18, 0 }, + { "必", 8, 18, 0 }, + { "応", 8, 18, 0 }, + { "性", 8, 18, 0 }, + { "情", 8, 18, 0 }, + { "意", 8, 18, 0 }, + { "感", 8, 18, 0 }, + { "戻", 8, 18, 0 }, + { "手", 8, 18, 0 }, + { "抜", 8, 18, 0 }, + { "択", 8, 18, 0 }, + { "接", 8, 18, 0 }, + { "描", 8, 18, 0 }, + { "撃", 8, 18, 0 }, + { "撮", 8, 18, 0 }, + { "操", 8, 18, 0 }, + { "改", 8, 18, 0 }, + { "攻", 8, 18, 0 }, + { "放", 8, 18, 0 }, + { "敗", 8, 18, 0 }, + { "数", 8, 18, 0 }, + { "断", 8, 18, 0 }, + { "新", 8, 18, 0 }, + { "日", 8, 18, 0 }, + { "早", 8, 18, 0 }, + { "時", 8, 18, 0 }, + { "更", 8, 18, 0 }, + { "替", 8, 18, 0 }, + { "最", 8, 18, 0 }, + { "期", 8, 18, 0 }, + { "未", 8, 18, 0 }, + { "本", 8, 18, 0 }, + { "検", 8, 18, 0 }, + { "楽", 8, 18, 0 }, + { "次", 8, 18, 0 }, + { "止", 8, 18, 0 }, + { "正", 8, 18, 0 }, + { "歳", 8, 18, 0 }, + { "死", 8, 18, 0 }, + { "永", 8, 18, 0 }, + { "注", 8, 18, 0 }, + { "流", 8, 18, 0 }, + { "消", 8, 18, 0 }, + { "満", 8, 18, 0 }, + { "無", 8, 18, 0 }, + { "版", 8, 18, 0 }, + { "環", 8, 18, 0 }, + { "生", 8, 18, 0 }, + { "用", 8, 18, 0 }, + { "由", 8, 18, 0 }, + { "画", 8, 18, 0 }, + { "界", 8, 18, 0 }, + { "番", 8, 18, 0 }, + { "的", 8, 18, 0 }, + { "直", 8, 18, 0 }, + { "知", 8, 18, 0 }, + { "確", 8, 18, 0 }, + { "示", 8, 18, 0 }, + { "禁", 8, 18, 0 }, + { "突", 8, 18, 0 }, + { "終", 8, 18, 0 }, + { "続", 8, 18, 0 }, + { "緑", 8, 18, 0 }, + { "緩", 8, 18, 0 }, + { "者", 8, 18, 0 }, + { "能", 8, 18, 0 }, + { "自", 8, 18, 0 }, + { "英", 8, 18, 0 }, + { "葉", 8, 18, 0 }, + { "行", 8, 18, 0 }, + { "衝", 8, 18, 0 }, + { "表", 8, 18, 0 }, + { "袋", 8, 18, 0 }, + { "補", 8, 18, 0 }, + { "要", 8, 18, 0 }, + { "見", 8, 18, 0 }, + { "言", 8, 18, 0 }, + { "討", 8, 18, 0 }, + { "設", 8, 18, 0 }, + { "許", 8, 18, 0 }, + { "認", 8, 18, 0 }, + { "語", 8, 18, 0 }, + { "読", 8, 18, 0 }, + { "赤", 8, 18, 0 }, + { "起", 8, 18, 0 }, + { "距", 8, 18, 0 }, + { "転", 8, 18, 0 }, + { "込", 8, 18, 0 }, + { "追", 8, 18, 0 }, + { "退", 8, 18, 0 }, + { "送", 8, 18, 0 }, + { "逆", 8, 18, 0 }, + { "造", 8, 18, 0 }, + { "進", 8, 18, 0 }, + { "違", 8, 18, 0 }, + { "遠", 8, 18, 0 }, + { "適", 8, 18, 0 }, + { "選", 8, 18, 0 }, + { "部", 8, 18, 0 }, + { "量", 8, 18, 0 }, + { "開", 8, 18, 0 }, + { "間", 8, 18, 0 }, + { "限", 8, 18, 0 }, + { "離", 8, 18, 0 }, + { "青", 8, 18, 0 }, + { "非", 8, 18, 0 }, + { "面", 8, 18, 0 }, + { "音", 8, 18, 0 }, + { "響", 8, 18, 0 }, + { "!", 8, 18, 0 }, + { "(", 8, 18, 0 }, + { ")", 8, 18, 0 }, + { "<", 8, 18, 0 }, + { ">", 8, 18, 0 }, + { "?", 8, 18, 0 }, + { "~", 8, 18, 0 }, }; struct SmCodeGlyph sSmCodeDuplicateGlyphs[] = { @@ -222,7 +577,6 @@ static u64 convert_unicode_char_to_u64(char* text) { value <<= 8; value |= (u8)*(++text); bytes--; - text++; } return value; } diff --git a/src/pc/ini.c b/src/pc/ini.c index e8f1aecf8..91927cbba 100644 --- a/src/pc/ini.c +++ b/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. diff --git a/src/pc/ini.h b/src/pc/ini.h index ca5b89bbd..b14138ebd 100644 --- a/src/pc/ini.h +++ b/src/pc/ini.h @@ -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 \ No newline at end of file