rpg maker mv 读取本地Excel文件翻译的插件
使用SheetJS读取Excel文件
使用SheetJS读取Excel文件,然后构建映射关系。
把翻译文本和待翻译文文构建称为一个对象,
重写现实文本的Game_Message.prototype.add方法,
现实前根据待翻译文本去对象取翻译文本。
代码如下
代码片
.
//=============================================================================
// Cloud - translateByExcel (v1.0.0)
//-----------------------------------------------------------------------------
//
//=============================================================================
//-----------------------------------------------------------------------------
//
/*:
@author 淡梦如烟
@plugindesc 使用sheetjs框架读取Excel文件进行翻译显示的文本内容的一个translateByExcel插件。
@help
=============================================================================
简介
=============================================================================
使用sheetjs框架读取Excel文件进行翻译显示的文本内容的一个translateByExcel插件。
默认读取的Excel文件位置需设置为data/translate.xlsx
by:淡梦如烟
=============================================================================
结束
=============================================================================
@param ora
@desc 原始文本所在列 默认第2列
@default 2
@param tran
@desc 翻译文本所在列 默认第3列
@default 3
@param showLog
@desc 是否显示调试日志 true/false
@default true
@param fastMode
@desc 是否将翻译内容加载到内存(翻译速度飞快,但是数量占用耗内存就大) 这一版只有内存模式 true
@default true
*/
var Imported = Imported || {};
var Cloud = Cloud || {};
Cloud.translateByExcel = {};
"use strict";
(function ($) {
//-----------------------------------------------------------------------------
// Setup 安装初始化
//
//获取参数
$.Parameters = $plugins.filter(
function (p) {
return p.name.contains('Cloud_mui_translate_loca');
}
)[0].parameters;
$.Param = $.Param || {};
$.Fun = $.Fun || {};
$.Data = $.Data || {};
//--------------------------------------------------------------------------------------------------------
//翻译参数
var ora = $.Parameters["ora"];
if(ora == "undefined"){
ora = "2";
}
var tran = $.Parameters["tran"];
if(tran == "undefined"){
tran = "3";
}
$.Param.fastMode = $.Parameters["fastMode"];
if($.Param.fastMode == "undefined"){
$.Param.fastMode = true;
}
//是否显示日志
$.Param.showLog = $.Parameters["showLog"];
if($.Param.showLog == "undefined"){
$.Param.showLog = true;
}
/**
* 显示日志
* @param {String} key 日志参数
*/
$.Fun.log = function log(...vars){
if($.Param.showLog=="true"){
console.info(vars);
}
}
/**
* 显示文本的地方
* 在这里翻译后显示
* @param text
*/
Game_Message.prototype.add = function(text) {
var _this = this;
try{
var trText = $.Data.Translate[text]
$.Fun.log("[信息]翻译文本", text, trText);
if(trText!=null&&trText!=undefined&&trText!=""){
_this._texts.push(trText);
}else{
//未找到翻译,显示原来的文本
_this._texts.push(text);
}
}catch(e){
console.warn("[警告]翻译失败,待翻译的文本:",text,e);
_this._texts.push(text);
}
};
//动态加载js
var loadJs = function(url,callback){
var script=document.createElement('script');
script.type="text/javascript";
script.src=url;
document.head.appendChild(script);
if(typeof(callback)!="undefined"){
if(script.readyState){
script.onreadystatechange=function(){
if(script.readyState == "loaded" || script.readyState == "complete"){
script.onreadystatechange=null;
callback();
}
}
}else{
script.onload=function(){
callback();
}
}
}else{
if(script.readyState){
script.onreadystatechange=function(){
if(script.readyState == "loaded" || script.readyState == "complete"){
script.onreadystatechange=null;
console.log("[信息]加载<script>完毕,src="+url);
}
}
}else{
script.onload=function(){
console.log("[信息]加载<script>完毕,src="+url);
}
}
}
}
//动态加载css
var loadCss = function(url){
var link = document.createElement('link');
link.rel="stylesheet";
link.href=url;
document.head.appendChild(link);
}
//加载js读取Excel核心库
loadJs("js/libs/sheetjs-master/dist/xlsx.core.min.js");
/**
* 从Execl里读取翻译资料
*/
$.Fun.getTranslateByExcel = function getTranslateByExcel() {
//读取后的回调函数
var callback1 = function (workbook) {
// $.Data.workbook = workbook;
$.Fun.log("[信息]读取的表格信息", workbook);
$.Data.Translate = {};
var sheetNames = workbook.SheetNames; // 工作表名称集合
var worksheet2 = workbook.Sheets[sheetNames[0]]; // 只能通过工作表名称来获取指定工作表
var sheetList = XLSX.utils.sheet_to_row_object_array(worksheet2);
// $.Data.TranslateList = sheetList;
for (var i = 0; i < sheetList.length; i++) {
var sheetObj1 = sheetList[i];
var j = 0;
var name = "";
var value = "";
for (key in sheetObj1) {
j++;
if(j == ora){
name = sheetObj1[key];
}else if(j == tran){
value = sheetObj1[key];
//替换文本(这里可以手动批量替换翻译的文本)
value = value.replace("\ c","\\C");
}
}
if (name != "") {
$.Data.Translate[name] = value;
}
}
}
$.Fun.readWorkbookFromRemoteFile("data/translate.xlsx",callback1);
}
$.Fun.readWorkbookFromRemoteFile = function readWorkbookFromRemoteFile(url, callback) {
$.Fun.log("[信息]开始读取加载的表格信息", url, callback);
var xhr = new XMLHttpRequest();
xhr.open('get', url, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function (e) {
$.Fun.log("[信息]加载完成", e, xhr.status, xhr);
if (xhr.status == 0 || xhr.status == 200) {
var data = new Uint8Array(xhr.response)
var workbook = XLSX.read(data, {type: 'array'});
// $.Fun.log("[信息]读取表格信息成功", workbook);
if (callback) callback(workbook);
}
};
xhr.send();
}
//执行读取翻译信息
setTimeout(function () {
$.Fun.getTranslateByExcel();
},1);
})(Cloud.translateByExcel);
Imported["translateByExcel"] = 1.0;
if (Imported["MVCommons"]) {
PluginManager.register("translateByExcel", 1.0, "读取Excel的翻译插件", {
email: "anlinxi@gmail.com",
name: "淡梦如烟",
website: "https://www.anlinxi.top:5001"
}, "12-12-2019");
}
SheetJS的下载地址:
•官方github:https://github.com/SheetJS/js-xlsx
整个插件包含Excel打包下载
链接:https://pan.baidu.com/s/1oOHZMK6oa503jX_IJWex8w
提取码:p53l