rpg maker mv 读取本地Excel文件翻译的插件

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值