ostranauts吧 关注:590贴子:1,865
  • 7回复贴,共1页

【转载】找到汉化大佬positivebuff放在Steam讨论区翻译汉化教程

只看楼主收藏回复

http去掉s://steamcommunity.com/app/1022980/discussions/1/2948125678376617488/
这是贴吧汉化大佬positivebuff 发在官方Steam讨论区的[翻译]教程 :: Ostranauts 一般讨论
大佬已经快半年没汉化了,谁能看懂这个教程,接手汉化一下吧,我英语太菜


IP属地:上海1楼2025-06-05 13:42回复
    [翻译]教程
    作者:positivebuff
    嘿,你好。我想为那些想要将 Ostranauts 翻译成母语并在他们的朋友和其他游戏玩家中传播 Ostranauts 的人写一个翻译教程。NEO scavenger 是一款很棒的游戏,但真的很难翻译它,因为它是建立在与其他非拉丁语言不太兼容的引擎之上的。许多人对 NEO scavenger 感兴趣,但被单语言支持所阻止,或者玩它但不知道一个叫 Philip Kindred 的人的精彩故事;忽略了这些刊登在 Diaster 之前的 Newss 上的精彩背景八卦......
    幸运的是,Ostranauts 是使用 Unity 开发的,并且本质上支持 Unicode 字符。因此,将其翻译成我们使用的大多数语言应该是可能的,甚至是简单的。我认为值得一试,现在我已经完成了大约 50% 的整个翻译。这真的是可行的。
    我希望本教程可以通过避免我处理过的问题来节省翻译的时间和精力,并最终产生让世界上更多的人可以更早地享受 Ostranauts 梦幻般的近未来世界的效果,并给开发者更多的反馈和支持,鼓励他们把这个游戏做得更好。
    本教程应该对初学者友好,因为一周前我决定翻译 Ostranauts 时我还是一个完全的新手。但是你可能需要一点编程经验,这样你就可以让 computer 为你做一些琐碎的文本处理工作。
    [目录]
    1. 导入到字体(技术部分)
    2. 翻译(文书工作部分)
    3. 维护/其他问题


    IP属地:上海2楼2025-06-05 13:45
    回复
      2026-11-08 12:45:01
      广告
      不感兴趣
      开通SVIP免广告
      1. 导入字体
      翻译的第一步是将字体放入(或实际上覆盖)到 Ostranauts 中。这里的字体正在告诉 Ostranauts 这些 unicode 字符是什么样子的,这样它就可以把这些小图表打印成你在屏幕中看到的 “字符”。在原版 Ostranauts 中,大多数文本只能包含拉丁字符和一些标点符号。因此,我们可能需要更大的字体来使 Ostranauts 能够显示其他 unicode 字符。
      1.1 检查是否必须导入字体。
      启动 Ostranauts,开始新游戏,使用水槽打开个人界面。如果您可以自由输入母语的所有 Unicode 字符作为您的船长的名字,那么恭喜!您可以直接跳到 2.1 步骤开始实际翻译。但是,如果您发现 Ostranauts 由于角色没有出现在屏幕上而没有提供任何反馈,请按照下一步作。
      1.2 使用 Unity - TextMeshPro - Font Asset Creator 在空的 Unity 项目中创建字体资源。(您还需要字体的 .ttf 文件和一个包含您需要的所有字符的 Unicode .txt文件)
      - 准备工作 -
      所以现在你需要在计算机中安装一个 Unity 来创建一个 Unity 字体资源以导入到 Ostranauts 中 - 当开发人员使用 Unity 开发 Ostranauts 时,我们还需要使用 Unity 来组织我们的字体数据,以便 Ostranauts 知道如何处理它。您实际上需要一个带有插件“TextMeshPro”的 Unity 来生成字体资源。
      开发人员使用 5.6 版的 Unity 和 TextMeshPro 存在问题,但从 Unity 官方网站下载带有 TextMeshPro 的 Unity 5.6 或在拥有 Unity 5.6 之后安装 TextMeshPro 可能很困难(起初 TextMeshPro 是 AssetsStore 中的非官方插件,但从大约...2017 或 2018 年,它已从 AssetsStore 中删除,因为它已集成到 Unity 主程序中。不幸的是,Unity 5.6 是旧版本,它不包括 TextMeshPro)。所以我最终下载了 Unity 2018.4.27,因为 TextMeshPro 已经在这个版本中了,但这会导致步骤 1.5 中提到的额外问题。
      无论如何,回到我们生成字体资源的目标。因此,您应该从计算机 (Windows/Fonts) 或 Internet 上找到.ttf字体。我使用 Noto Sans CJK(或也称为 Source Han Sans),因为它是一种常见且免费使用的字体。您还需要一个 Unicode .txt文件,其中包含母语中的所有(或至少大部分)字符、拉丁字符、标点符号等。这个 .txt 文件应该很容易在 Internet 上找到,因为所有 Unity 游戏开发人员都需要它来生成字体资源,就像我们一样。我发现一个.txt总共包含大约 7000 个字符,包括最常用的汉字和其他常见字符。根据我的经验,如果您使用关键字“TextMeshPro”+ 您的语言,可能会更容易找到一个。
      - 字体资源创建 -
      打开你的 Unity,创建一个空项目。将 .ttf 和 .txt 文件复制到 project/Assets 文件夹中。选择“窗口”->“TextMeshPro”->“字体资源创建器”,打开字体资源创建器界面。
      将“源字体文件”设置为.ttf文件。
      将 “Character Set” 设置为 .txt 文件。
      根据文件中的字符数,将 “Atlas Resolution” 设置为适当的值.txt:“Atlas Resolution” 可以计算为 50 * sqrt(字符数).例如,我使用包含大约 7000 个字符的.txt,结果是 50*sqrt(7000) = 50 * 大约 85 = 大约 4,000 像素。所以我应该将“Atlas Resolution(图集分辨率)”设置为 4096x4096。使用 50 的原因是,一般来说 50x50 像素可以清楚地显示一个字符。
      然后最后单击 “Generate Font Atlas” 按钮。等待程序完成(对我来说需要几分钟,因为它应该会生成一个 16MB 的 png),然后将字体资源保存在 project/Assets 文件夹中。
      - 构建并运行 Unity 项目 -
      选择“GameObject” -> “3D Object” -> “Text - TextMeshPro” 以将文本对象添加到场景中。单击文本对象,选择右侧的 “Inspector” 并找到 “TextMeshPro” 部分。将 “Font Asset” 设置为您刚才生成的字体资源。然后在 “Text” 框中键入 .txt 文件中的一些字符。
      保存场景和工程。
      选择 “File” -> “Building Settings...”,确保我们的场景位于 “Scenes In Build” 中,并且将被构建。然后单击 “Build and Run”。
      如果您看到文本在弹出程序中正确显示,则可以关闭该程序和 unity。
      1.3 使用 UABE 从 unity 项目的 “sharedassets0.assets” 文件中导出字体资源的 Texture2D 文件和 MonoBehaviour 文件。
      虽然我们现在有了字体资源,但我们实际上需要它的 “打包” 形式,即表单可以直接从游戏的 .assets 文件中导入/导出。Unity Assets Bundle Extractor (UABE) 是我用于此目的的工具。您可以从 github 获取它。
      因此,启动 UABE,打开 project/New Unity Project_Data 文件夹中的“sharedassets0.assets”文件。您应该找到一个 Texture2D 文件和一个与字体关联的 MonoBehaviour 文件(它们的名称应类似于“Noto Sans CJK SDF Atlas”和“MonoBehaviour Noto Sans CJK SDF”)。
      选择 Texture2D 文件,单击“Export Raw”将此 Texture2D 文件输出为二进制数据。
      选择 MonoBehaviour 文件,单击“导出转储”以将此 MonoBehaviour 文件输出为 .json 文件(在导出过程中,您需要帮助 UABE 在 project/New Unity Project_Data/Managed 文件夹中找到TextMeshPro.dll,其他 dll 可以忽略)。
      1.4 手动重写 MonoBehaviour 文件,使其中的 pathid、guid、hashcode 与原始 MonoBehaviour 文件 (pathid = 203) 完全相同。
      使用 UABE 打开 Ostranauts/Ostranauts_Data 文件夹中的 “sharedassets0.assets”。您将找到一个名为“MonoBehaviour robotocondensedb SDF”的 MonoBehaviour 文件,其文件 ID = 0,路径 ID = 203。将其导出为 .json 文件(同样,您需要在 Ostranauts/Ostranauts_Data/Managed 文件夹中找到TextMeshPro-5.6-Runtime.dll)。
      将以下路径 ID、哈希码从 roboto 的 MonoBehaviour 文件复制到字体的 MonoBehaviour 文件中:
      m_FileID = 0, m_PathID = 0 (of m_GameObject)
      m_FileID = 1, m_PathID = 70 (of m_Script)
      hashCode = 162931143
      m_FileID = 0, m_PathID = 21 (material)materialHashCode
      = -1295981332
      m_FileID = 0, m_PathID = 85 (atlas)
      在此步骤中,您应该注意 Unity 的 MonoBehaviour 文件和 Ostranauts 的 MonoBehaviour 文件之间是否存在格式差异。如果没有差异,您可以跳至步骤 1.6。
      1,5(如果您的 Unity&TextMeshPro 版本不是 5.6)手动重写 texture2d 和 monobehaviour 文件,使其符合 TextMeshPro 5.6 的标准,并且可以被 Ostranauts 正确识别。
      格式差异可能会有所不同,因为您使用不同版本的 Unity 或 TextMeshPro 来生成字体的 Texture2D 和 MonoBehaviour 文件。
      我使用的是 Unity 2018.4.27,因此如果您使用的是其他版本的 Unity,则以下作可能对您没有用处。
      -Texture2D -
      我需要删除字体的 Texture2D 文件头部部分的一些数据。我点击 UABE 的“查看数据”按钮,观察两个 Texture2D 文件的格式差异,发现 Unity 2018.4.27 中的 Texture2D 文件比 Ostranauts 的 Texture2D 文件多了 4 个 int 和 2 个 bool 数据。Sublime Text、010 Editor 或任何其他常见的文本或数据编辑器可用于编辑二进制数据。
      对我来说,二进制数据如下所示:
      ...(< - 文件的名称)
      [04 00 00 00 00 00 00 00 00 00 00 00 00 10 00
      00 00 00 00 01 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00
      00 00 00 00 00 00 02 00 00 00 00 01 00
      00 00 00 01 00
      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 000 00 00 00 01
      ...(2D 像素数据>)
      我从我的 Noto Sans CJK Texture2D 文件中删除了所有 [...] 数据。现在,这个 Texture2D 文件应该能够被 Ostranauts 使用。
      -MonoBehaviour -
      两个 MonoBehaviour 文件的头部和尾部的大部分差异可以通过 ctrl+c、ctrl+v、...但是在如何存储字形数据方面有两个主要区别。
      首先,在 Unity 2018 中,字形的数据由“m_Index”标记,而不是其字符的 unicode id。我需要通过搜索“字符数据”来获取它的 unicode id,例如:
      for char in data[“m_CharacterTable”],如果 char[“m_GlyphIndex”] == m_Index,real_id = char[“m_Unicode”],则断开
      其次,y 坐标颠倒。所以我需要计算字形的正确 y 值,例如:
      real_y = 4096 - y - height
      无论如何,通过点击屏幕上的键盘来制作一个文本处理程序,让计算机完成这项工作:)1.6
      导入 Texture2D 和 Monobehaviour 文件,以使用 UABE 覆盖 Ostranauts 的 sharedassets0.assets 文件中的原始 Texture2D 文件(pathid = 85)和原始 Monobehaviour 文件(pathid = 203)。Save 以获取新的 sharedassets0.assets 文件。
      1.7 测试新的 sharedassets0.assets 文件,检查是否可以在游戏中使用角色。
      因此,请覆盖 Ostranauts/Ostranauts_Data 文件夹中的原始 sharedassets0.assets,然后启动游戏。看看你现在是否可以用你的语言重命名你的船长。如果有问题,emmm,可能是时候休息一下,稍后再试了。如果它运行良好,那么您应该备份此 sharedassets0 文件。休息一下,庆祝你的胜利!


      IP属地:上海3楼2025-06-05 13:45
      回复
        2. 翻译
        解决字体问题后,您就可以开始进行真正的翻译了。您需要从这里和那里收集文本文件,然后制作一个程序从这些文件中提取“纯文本”并制作翻译表,以提高您的翻译效率。完成翻译后,制作一个反向程序,用翻译的文本替换原始文本。最后,将这些修改后的文件放回原处,在游戏中进行测试。
        2.1 在游戏中找到文本的位置:一些.json文件在.../Ostranauts_Data/StreamingAssets/data中,level0和level1文件在.../Ostranauts_Data中。复制或导出它们。
        -.json -
        数据文件夹中的所有 20 个.json文件,其中包含文本:
        广告、职业、条件、conditions_simple、condowners、cooverlays、guipropmaps、headlines、homeworlds、interactions2、interactionsSocialCombat、names_first、names_last、names_ship、names_ship_genadj、names_ship_gennoun、personspecs、字符串、computerentries
        “strNameFriendly”、“strTitle”、“strDesc”、“strColonyName”等。通常后跟显示文本。
        警告!游戏引擎使用 “strName” 后面的文本来链接数据,因此这些文本永远不应更改!
        -level0/1 -
        使用 UABE 导出 level0/1 文件中的所有 “UnityEngine.UI.Text”、“MonoBehaviour:TMPro.TextMeshProUGUI” 和 “MonoBehaviour:TMPro.TextMeshPro” 类型的文本资源。“m_text” 包含显示文本。
        2.2 编写一些小的文本处理程序来处理所有这些原始文件。程序应该输出几个干净的 .txt 或 .json 甚至 .xlsx 文件,其中只包含 “纯文本” 和相应的空槽。
        2.3 对纯文本文件进行翻译。
        2.4 编写并运行反向程序以覆盖原始文件。
        2.5 使用一些图片软件翻译几个带有文本的 GUI。
        2.6 在游戏中测试翻译。
        在测试时,您可能会注意到清单窗口中的“Status:”和“Traits:”。这些文本目前在游戏程序中是硬编码的,不是游戏“资产”的一部分。虽然现在可以更改这些文本,但我认为最好等待开发人员将这些碎片化的文本放入strings.json。然后我们可以轻松翻译这些文本。


        IP属地:上海4楼2025-06-05 13:46
        回复
          3. 维护/其他问题
          3.1 如果 Ostranauts 更新新版本怎么办?
          因此,您可能需要重做步骤 1.6、1.7、2.4 和 2.5 才能使您的翻译在新版本中正常工作。请务必检查是否有新的文本需要翻译。
          3.2 如何发现翻译中的错误?
          自行检查,或者您可以打电话给您的朋友尝试 Ostranauts 并检查您的翻译。
          3.3 我发现一个名词/名称,但我不知道它是什么/是谁。
          访问 BBG 的官方网站。有一个 Ostranauts 的设置页面。它包含 Locations、People、Product、Companies 等的上下文。此页面将真正帮助您了解 Ostranauts 世界。
          希望这个教程可以帮助一些翻译的人
          ------


          IP属地:上海5楼2025-06-05 13:46
          回复
            "解决字体问题后,您就可以开始进行真正的翻译了。您需要从这里和那里收集文本文件,然后制作一个程序从这些文件中提取“纯文本”并制作翻译表,以提高您的翻译效率。完成翻译后,制作一个反向程序,用翻译的文本替换原始文本。最后,将这些修改后的文件放回原处,在游戏中进行测试。"
            重要的就是这一步。可以看出大佬之前已经制作了提取文本的程序,以及把翻译好的文本导回去的程序。如果能编出,或者拿到这两个程序,我很乐意完成人工翻译的环节。


            IP属地:安徽6楼2025-06-08 11:16
            收起回复