LogoPixi’VN

国际化

本文介绍如何借助i18next为你的Pixi'VN游戏添加多语言支持,涵盖界面与剧情文本的翻译策略。 视觉小说该如何做多语言适配?

在视觉小说及同类游戏中,让玩家自由选择母语是非常常见的需求。

对于Pixi'VN项目,我们建议使用外部库来管理翻译内容。 这样你就可以灵活选用最契合项目需求的实现方案。

Templates

所有模板均已预装并配置好i18next。 你可以直接开始翻译游戏内容。

目前生态中最流行、兼容性最好的方案就是i18next

i18next-h2

i18next

什么是 i18next?i18next是一个面向JavaScript的国际化框架。 使用前,需要先安装并初始化它。 具体可查阅i18next官网

翻译内容以多个JSON文件存储(每种语言一个),采用键 - 值对形式。 键是文本的唯一标识符,值是对应语言的翻译结果。

import i18n from 'i18next';
import LanguageDetector from 'i18next-browser-languagedetector';
import { initReactI18next } from 'react-i18next';
import strings_en from '../src/values/translations/strings_en.json';
import strings_es from '../src/values/translations/strings_es.json';

const getUserLang = (): string => {
    let userLang: string = navigator.language || "en";
    return userLang?.toLocaleLowerCase()?.split("-")[0];
}

export const useI18n = () => {
    if (!i18n.isInitialized) {
        i18n
            .use(LanguageDetector)
            .use(initReactI18next)
            .init({
                debug: false,
                fallbackLng: 'en',
                lng: getUserLang(),
                interpolation: {
                    escapeValue: false,
                },
                resources: {
                    en: strings_en,
                    es: strings_es,
                    // Add more languages here
                }
            });
    }
}

创建存档

ink

如果你采用 Ink 编写剧情,可以自动提取文本用于翻译。 具体方法见

翻译用的JSON文件需手动创建。 推荐将内容分为两大区块(参考strings_es.json):

  • UI文本 :界面相关文本,如菜单、设置项、快捷按钮等非剧情内容。
  • 叙事文本:剧情相关文本,如角色对话、选项分支等。
{
    "ui": {
        "text_speed": "Velocidad del texto",
        // ...
    },
    "narration": {
        "Hello, my name is {{name}}": "Hola, mi nombre es {{name}}"
        // ...
    }
}

On this page