mirror of
https://github.com/HIllya51/LunaTranslator.git
synced 2024-12-26 15:14:13 +08:00
.
This commit is contained in:
parent
7812e10585
commit
54670ea45c
52
.github/scripts/build_lunatranslator.py
vendored
52
.github/scripts/build_lunatranslator.py
vendored
@ -90,15 +90,21 @@ def downloadlr():
|
|||||||
subprocess.run(f"curl -LO {LocaleRe}")
|
subprocess.run(f"curl -LO {LocaleRe}")
|
||||||
subprocess.run(f"7z x {LocaleRe.split('/')[-1]} -oLR")
|
subprocess.run(f"7z x {LocaleRe.split('/')[-1]} -oLR")
|
||||||
os.makedirs(
|
os.makedirs(
|
||||||
f"{rootDir}/files/plugins/Locale_Remulator",
|
rf"{rootDir}\files\plugins\Locale\Locale_Remulator.1.5.4",
|
||||||
exist_ok=True,
|
exist_ok=True,
|
||||||
)
|
)
|
||||||
for _dir, _, _fs in os.walk("LR"):
|
for _dir, _, _fs in os.walk("LR"):
|
||||||
for f in _fs:
|
for f in _fs:
|
||||||
if f in ["LRHookx64.dll", "LRHookx32.dll"]:
|
if f in [
|
||||||
|
"LRHookx64.dll",
|
||||||
|
"LRHookx32.dll",
|
||||||
|
"LRConfig.xml",
|
||||||
|
"LRProc.exe",
|
||||||
|
"LRSubMenus.dll",
|
||||||
|
]:
|
||||||
shutil.move(
|
shutil.move(
|
||||||
os.path.join(_dir, f),
|
os.path.join(_dir, f),
|
||||||
f"{rootDir}/files/plugins/Locale_Remulator",
|
rf"{rootDir}\files\plugins\Locale\Locale_Remulator.1.5.4",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -123,12 +129,15 @@ def downloadmecab():
|
|||||||
subprocess.run(f"curl -LO {mylinks['mecab.zip']}")
|
subprocess.run(f"curl -LO {mylinks['mecab.zip']}")
|
||||||
subprocess.run(f"7z x mecab.zip -oALL")
|
subprocess.run(f"7z x mecab.zip -oALL")
|
||||||
move_directory_contents("ALL/ALL", f"{rootDir}/files/plugins")
|
move_directory_contents("ALL/ALL", f"{rootDir}/files/plugins")
|
||||||
|
|
||||||
|
|
||||||
def downloadmecabxp():
|
def downloadmecabxp():
|
||||||
os.chdir(rootDir + "\\temp")
|
os.chdir(rootDir + "\\temp")
|
||||||
subprocess.run(f"curl -LO {mylinks['mecab_xp.zip']}")
|
subprocess.run(f"curl -LO {mylinks['mecab_xp.zip']}")
|
||||||
subprocess.run(f"7z x mecab_xp.zip -oALL")
|
subprocess.run(f"7z x mecab_xp.zip -oALL")
|
||||||
move_directory_contents("ALL/ALL", f"{rootDir}/files/plugins")
|
move_directory_contents("ALL/ALL", f"{rootDir}/files/plugins")
|
||||||
|
|
||||||
|
|
||||||
def downloadmapie():
|
def downloadmapie():
|
||||||
os.chdir(rootDir + "\\temp")
|
os.chdir(rootDir + "\\temp")
|
||||||
subprocess.run(f"curl -LO {mylinks['magpie.zip']}")
|
subprocess.run(f"curl -LO {mylinks['magpie.zip']}")
|
||||||
@ -140,28 +149,37 @@ def downloadLocaleEmulator():
|
|||||||
os.chdir(rootDir + "\\temp")
|
os.chdir(rootDir + "\\temp")
|
||||||
subprocess.run(f"curl -LO {localeEmulatorFile}")
|
subprocess.run(f"curl -LO {localeEmulatorFile}")
|
||||||
subprocess.run(f"7z x {localeEmulatorFile.split('/')[-1]} -oLocaleEmulator")
|
subprocess.run(f"7z x {localeEmulatorFile.split('/')[-1]} -oLocaleEmulator")
|
||||||
shutil.move(
|
|
||||||
"LocaleEmulator/LoaderDll.dll",
|
os.makedirs(
|
||||||
f"{rootDir}/files/plugins/LoaderDll.dll",
|
rf"{rootDir}\files\plugins\Locale\Locale.Emulator.2.5.0.1",
|
||||||
)
|
exist_ok=True,
|
||||||
shutil.move(
|
|
||||||
"LocaleEmulator/LocaleEmulator.dll",
|
|
||||||
f"{rootDir}/files/plugins/LocaleEmulator.dll",
|
|
||||||
)
|
)
|
||||||
|
for _dir, _, _fs in os.walk("LocaleEmulator"):
|
||||||
|
for f in _fs:
|
||||||
|
if f in [
|
||||||
|
"LoaderDll.dll",
|
||||||
|
"LocaleEmulator.dll",
|
||||||
|
"LEProc.exe",
|
||||||
|
"LEConfig.xml",
|
||||||
|
"LECommonLibrary.dll",
|
||||||
|
]:
|
||||||
|
shutil.move(
|
||||||
|
os.path.join(_dir, f),
|
||||||
|
rf"{rootDir}\files\plugins\Locale\Locale.Emulator.2.5.0.1",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def downloadNtlea():
|
def downloadNtlea():
|
||||||
os.chdir(rootDir + "\\temp")
|
os.chdir(rootDir + "\\temp")
|
||||||
subprocess.run(f"curl -LO {ntleaFile}")
|
subprocess.run(f"curl -LO {ntleaFile}")
|
||||||
subprocess.run(f"7z x {ntleaFile.split('/')[-1]} -ontlea")
|
subprocess.run(f"7z x {ntleaFile.split('/')[-1]} -ontlea")
|
||||||
shutil.move(
|
|
||||||
"ntlea/x86/ntleai.dll",
|
os.makedirs(
|
||||||
f"{rootDir}/files/plugins/NTLEAS/ntleai.dll",
|
rf"{rootDir}\files\plugins\Locale\ntleas046_x64",
|
||||||
)
|
exist_ok=True,
|
||||||
shutil.move(
|
|
||||||
"ntlea/x64/ntleak.dll",
|
|
||||||
f"{rootDir}/files/plugins/NTLEAS/ntleak.dll",
|
|
||||||
)
|
)
|
||||||
|
shutil.copytree("ntlea/x86", rf"{rootDir}\files\plugins\Locale\ntleas046_x64\x86")
|
||||||
|
shutil.copytree("ntlea/x64", rf"{rootDir}\files\plugins\Locale\ntleas046_x64\x64")
|
||||||
|
|
||||||
|
|
||||||
def downloadCurl():
|
def downloadCurl():
|
||||||
|
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -10,9 +10,6 @@
|
|||||||
[submodule "src/plugins/libs/tinymp3"]
|
[submodule "src/plugins/libs/tinymp3"]
|
||||||
path = cpp/libs/tinymp3
|
path = cpp/libs/tinymp3
|
||||||
url = https://github.com/HIllya51/tinymp3
|
url = https://github.com/HIllya51/tinymp3
|
||||||
[submodule "src/plugins/libs/Detours"]
|
|
||||||
path = cpp/libs/Detours
|
|
||||||
url = https://github.com/microsoft/Detours
|
|
||||||
[submodule "src/plugins/libs/Clipper2"]
|
[submodule "src/plugins/libs/Clipper2"]
|
||||||
path = cpp/libs/Clipper2
|
path = cpp/libs/Clipper2
|
||||||
url = https://github.com/AngusJohnson/Clipper2
|
url = https://github.com/AngusJohnson/Clipper2
|
||||||
|
@ -1 +0,0 @@
|
|||||||
Subproject commit e4bfd6b03e50de46b47abfbd1e46b384f0c5f833
|
|
@ -6,8 +6,8 @@ option(IS_LUNAHOOK "IS_LUNAHOOK" OFF)
|
|||||||
if(IS_LUNAHOOK)
|
if(IS_LUNAHOOK)
|
||||||
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/minhook ${CMAKE_BINARY_DIR}/minhook)
|
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/minhook ${CMAKE_BINARY_DIR}/minhook)
|
||||||
else()
|
else()
|
||||||
add_library(Detours ${CMAKE_CURRENT_LIST_DIR}/Detours/src/creatwth.cpp ${CMAKE_CURRENT_LIST_DIR}/Detours/src/detours.cpp ${CMAKE_CURRENT_LIST_DIR}/Detours/src/modules.cpp ${CMAKE_CURRENT_LIST_DIR}/Detours/src/disasm.cpp)
|
# add_library(Detours ${CMAKE_CURRENT_LIST_DIR}/Detours/src/creatwth.cpp ${CMAKE_CURRENT_LIST_DIR}/Detours/src/detours.cpp ${CMAKE_CURRENT_LIST_DIR}/Detours/src/modules.cpp ${CMAKE_CURRENT_LIST_DIR}/Detours/src/disasm.cpp)
|
||||||
target_include_directories(Detours PUBLIC ${CMAKE_CURRENT_LIST_DIR}/Detours/src)
|
# target_include_directories(Detours PUBLIC ${CMAKE_CURRENT_LIST_DIR}/Detours/src)
|
||||||
|
|
||||||
add_library(wil INTERFACE)
|
add_library(wil INTERFACE)
|
||||||
target_include_directories(wil INTERFACE ${CMAKE_CURRENT_LIST_DIR}/wil/include)
|
target_include_directories(wil INTERFACE ${CMAKE_CURRENT_LIST_DIR}/wil/include)
|
||||||
|
@ -11,13 +11,13 @@ generate_product_version(
|
|||||||
VERSION_PATCH ${VERSION_PATCH}
|
VERSION_PATCH ${VERSION_PATCH}
|
||||||
)
|
)
|
||||||
|
|
||||||
set(shareddllproxy_common shareddllproxy.cpp dllinject.cpp ntleas.cpp aspatch.cpp update.cpp ${versioninfo})
|
set(shareddllproxy_common shareddllproxy.cpp dllinject.cpp aspatch.cpp update.cpp ${versioninfo})
|
||||||
|
|
||||||
if(${CMAKE_SIZEOF_VOID_P} EQUAL 8)
|
if(${CMAKE_SIZEOF_VOID_P} EQUAL 8)
|
||||||
add_executable(shareddllproxy ${shareddllproxy_common})
|
add_executable(shareddllproxy ${shareddllproxy_common})
|
||||||
|
|
||||||
else()
|
else()
|
||||||
add_executable(shareddllproxy ${shareddllproxy_common} Atlas.cpp eztrans.cpp dreye.cpp jbj7.cpp kingsoft.cpp le.cpp neospeech.cpp ../implsapi.cpp LR.cpp)
|
add_executable(shareddllproxy ${shareddllproxy_common} Atlas.cpp eztrans.cpp dreye.cpp jbj7.cpp kingsoft.cpp neospeech.cpp ../implsapi.cpp)
|
||||||
add_subdirectory(voiceroid2)
|
add_subdirectory(voiceroid2)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@ -28,6 +28,6 @@ if(${CMAKE_SIZEOF_VOID_P} EQUAL 8)
|
|||||||
set_target_properties(shareddllproxy PROPERTIES OUTPUT_NAME "shareddllproxy64")
|
set_target_properties(shareddllproxy PROPERTIES OUTPUT_NAME "shareddllproxy64")
|
||||||
else()
|
else()
|
||||||
target_precompile_headers(voiceroid2 REUSE_FROM pch)
|
target_precompile_headers(voiceroid2 REUSE_FROM pch)
|
||||||
target_link_libraries(shareddllproxy nlohmann Mfplat mfuuid voiceroid2 Detours)
|
target_link_libraries(shareddllproxy nlohmann Mfplat mfuuid voiceroid2)
|
||||||
set_target_properties(shareddllproxy PROPERTIES OUTPUT_NAME "shareddllproxy32")
|
set_target_properties(shareddllproxy PROPERTIES OUTPUT_NAME "shareddllproxy32")
|
||||||
endif()
|
endif()
|
@ -1,17 +1,14 @@
|
|||||||
#pragma comment(linker, "/subsystem:windows /entry:wmainCRTStartup")
|
#pragma comment(linker, "/subsystem:windows /entry:wmainCRTStartup")
|
||||||
|
|
||||||
int dllinjectwmain(int argc, wchar_t *argv[]);
|
int dllinjectwmain(int argc, wchar_t *argv[]);
|
||||||
int ntleaswmain(int argc, wchar_t *wargv[]);
|
|
||||||
int updatewmain(int argc, wchar_t *wargv[]);
|
int updatewmain(int argc, wchar_t *wargv[]);
|
||||||
bool checkisapatch();
|
bool checkisapatch();
|
||||||
#ifndef _WIN64
|
#ifndef _WIN64
|
||||||
// int mainmp3(int argc, wchar_t *argv[]);
|
// int mainmp3(int argc, wchar_t *argv[]);
|
||||||
int LRwmain(int argc, wchar_t *argv[]);
|
|
||||||
int jbjwmain(int argc, wchar_t *argv[]);
|
int jbjwmain(int argc, wchar_t *argv[]);
|
||||||
int dreyewmain(int argc, wchar_t *argv[]);
|
int dreyewmain(int argc, wchar_t *argv[]);
|
||||||
int kingsoftwmain(int argc, wchar_t *argv[]);
|
int kingsoftwmain(int argc, wchar_t *argv[]);
|
||||||
int voiceroid2wmain(int argc, wchar_t *argv[]);
|
int voiceroid2wmain(int argc, wchar_t *argv[]);
|
||||||
int lewmain(int argc, wchar_t *argv[]);
|
|
||||||
int neospeech(int argc, wchar_t *argv[]);
|
int neospeech(int argc, wchar_t *argv[]);
|
||||||
int neospeechlist(int argc, wchar_t *argv[]);
|
int neospeechlist(int argc, wchar_t *argv[]);
|
||||||
int eztrans(int argc, wchar_t *argv[]);
|
int eztrans(int argc, wchar_t *argv[]);
|
||||||
@ -62,13 +59,10 @@ int wmain(int argc, wchar_t *argv[])
|
|||||||
typedef int (*wmaint)(int, wchar_t **);
|
typedef int (*wmaint)(int, wchar_t **);
|
||||||
std::map<std::wstring, wmaint> fm = {
|
std::map<std::wstring, wmaint> fm = {
|
||||||
{L"dllinject", dllinjectwmain},
|
{L"dllinject", dllinjectwmain},
|
||||||
{L"ntleas", ntleaswmain},
|
|
||||||
{L"listpm", listprocessmodule},
|
{L"listpm", listprocessmodule},
|
||||||
{L"update", updatewmain},
|
{L"update", updatewmain},
|
||||||
#ifndef _WIN64
|
#ifndef _WIN64
|
||||||
// {L"mainmp3", mainmp3},
|
// {L"mainmp3", mainmp3},
|
||||||
{L"LR", LRwmain},
|
|
||||||
{L"le", lewmain},
|
|
||||||
{L"jbj7", jbjwmain},
|
{L"jbj7", jbjwmain},
|
||||||
{L"dreye", dreyewmain},
|
{L"dreye", dreyewmain},
|
||||||
{L"kingsoft", kingsoftwmain},
|
{L"kingsoft", kingsoftwmain},
|
||||||
|
@ -1,18 +1,9 @@
|
|||||||
import windows, os, winsharedutils, re, functools
|
import windows, os, winsharedutils, re, functools
|
||||||
from qtsymbols import *
|
from qtsymbols import *
|
||||||
from myutils.config import savehook_new_data, get_launchpath, globalconfig, get_platform
|
from myutils.config import savehook_new_data, get_launchpath, globalconfig, get_platform
|
||||||
from gui.usefulwidget import (
|
from gui.usefulwidget import getlineedit, getsimplecombobox, getsimplepatheditor
|
||||||
getlineedit,
|
from traceback import print_exc
|
||||||
getsimplecombobox,
|
import xml.etree.ElementTree as ET
|
||||||
getspinbox,
|
|
||||||
getsimpleswitch,
|
|
||||||
SuperCombo,
|
|
||||||
getspinbox,
|
|
||||||
SplitLine,
|
|
||||||
getsimplepatheditor,
|
|
||||||
clearlayout,
|
|
||||||
)
|
|
||||||
from gui.dynalang import LFormLayout
|
|
||||||
|
|
||||||
|
|
||||||
class Launcher:
|
class Launcher:
|
||||||
@ -52,107 +43,90 @@ class LEbase(Launcher):
|
|||||||
self.runX(execheck3264, usearg, dirpath, config)
|
self.runX(execheck3264, usearg, dirpath, config)
|
||||||
|
|
||||||
|
|
||||||
class settingxx:
|
class le_internal(LEbase):
|
||||||
use_which = ...
|
|
||||||
|
|
||||||
def switchidx(self, lay1, lay2, call1, call2, config, idx):
|
|
||||||
clearlayout(lay1)
|
|
||||||
clearlayout(lay2)
|
|
||||||
config[self.use_which] = idx
|
|
||||||
(call1, call2)[1 - idx](lay1, config)
|
|
||||||
|
|
||||||
def settingxx(self, layout, config, call1, call2):
|
|
||||||
|
|
||||||
switch = SuperCombo()
|
|
||||||
switch.addItems(["外部", "内置"])
|
|
||||||
lay1 = LFormLayout()
|
|
||||||
lay2 = LFormLayout()
|
|
||||||
layout.addRow("优先使用", switch)
|
|
||||||
layout.addRow(SplitLine())
|
|
||||||
layout.addRow(lay1)
|
|
||||||
layout.addRow(lay2)
|
|
||||||
|
|
||||||
switch.setCurrentIndex(config.get(self.use_which, 0))
|
|
||||||
switch.currentIndexChanged.connect(
|
|
||||||
functools.partial(self.switchidx, lay1, lay2, call1, call2, config)
|
|
||||||
)
|
|
||||||
switch.currentIndexChanged.emit(switch.currentIndex())
|
|
||||||
|
|
||||||
|
|
||||||
class le_internal(LEbase, settingxx):
|
|
||||||
name = "Locale Emulator"
|
name = "Locale Emulator"
|
||||||
id = "le"
|
id = "le"
|
||||||
use_which = "le_use_which"
|
|
||||||
default = dict(
|
default = dict(
|
||||||
LCID=0x11, CodePage=932, RedirectRegistry=False, HookUILanguageAPI=False
|
LCID=0x11, CodePage=932, RedirectRegistry=False, HookUILanguageAPI=False
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def getlrpath(self):
|
||||||
|
LEProc = globalconfig.get("le_extra_path", "")
|
||||||
|
if not (LEProc and os.path.exists(LEProc)):
|
||||||
|
LEProc = os.path.abspath(
|
||||||
|
"files/plugins/Locale/Locale.Emulator.2.5.0.1/LEProc.exe"
|
||||||
|
)
|
||||||
|
return LEProc
|
||||||
|
|
||||||
def profiles(self, config):
|
def profiles(self, config):
|
||||||
_Names = []
|
_Names = []
|
||||||
_Guids = []
|
_Guids = []
|
||||||
|
_run_as_admins = []
|
||||||
exe = config.get("gamepath", None)
|
exe = config.get("gamepath", None)
|
||||||
|
|
||||||
def parseone(xmlpath):
|
def parseone(xmlpath):
|
||||||
Names, Guids = [], []
|
Names, Guids, run_as_admins = [], [], []
|
||||||
with open(xmlpath, "r", encoding="utf8") as ff:
|
with open(xmlpath, "r", encoding="utf8") as ff:
|
||||||
for Name, Guid in re.findall('Name="(.*?)" Guid="(.*?)"', ff.read()):
|
root = ET.fromstring(ff.read())
|
||||||
Names.append(Name)
|
profiles = root.find("Profiles").findall("Profile")
|
||||||
Guids.append(Guid)
|
|
||||||
return Names, Guids
|
|
||||||
|
|
||||||
finds = [
|
for profile in profiles:
|
||||||
os.path.join(
|
Names.append(profile.attrib.get("Name"))
|
||||||
os.path.dirname(globalconfig.get("le_extra_path", "")), "LEConfig.xml"
|
Guids.append(profile.attrib.get("Guid"))
|
||||||
)
|
run_as_admins.append(
|
||||||
]
|
profile.find("RunAsAdmin").text.lower() == "true"
|
||||||
|
)
|
||||||
|
|
||||||
|
return Names, Guids, run_as_admins
|
||||||
|
|
||||||
|
finds = [os.path.join(os.path.dirname(self.getlrpath()), "LEConfig.xml")]
|
||||||
if exe:
|
if exe:
|
||||||
finds.append(exe + ".le.config")
|
finds.append(exe + ".le.config")
|
||||||
for f in finds:
|
for f in finds:
|
||||||
try:
|
try:
|
||||||
Names, Guids = parseone(f)
|
Names, Guids, run_as_admins = parseone(f)
|
||||||
_Guids += Guids
|
_Guids += Guids
|
||||||
_Names += Names
|
_Names += Names
|
||||||
|
_run_as_admins += run_as_admins
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
return _Names, _Guids
|
return _Names, _Guids, _run_as_admins
|
||||||
|
|
||||||
def runXX(self, exe, usearg, dirpath, config):
|
def runX(self, exe, usearg, dirpath, config):
|
||||||
LEProc = globalconfig.get("le_extra_path", "")
|
LEProc = self.getlrpath()
|
||||||
if not LEProc:
|
prof = self.profiles(config)
|
||||||
return
|
prof_ = self.profiles({})
|
||||||
guids = self.profiles(config)[1]
|
|
||||||
guids_ = self.profiles({})[1]
|
|
||||||
guid = config.get("leguid", None)
|
guid = config.get("leguid", None)
|
||||||
if guid not in guids:
|
if guid not in prof[1]:
|
||||||
guid = guids[0]
|
guid = prof[1][0]
|
||||||
if guid in guids_:
|
if guid in prof_[1]:
|
||||||
arg = '"{}" -runas {} {}'.format(LEProc, guid, usearg)
|
idx = prof_[1].index(guid)
|
||||||
|
admin = prof_[2][idx]
|
||||||
|
arg = "-runas {} {}".format(guid, usearg)
|
||||||
else:
|
else:
|
||||||
# 程序的配置运行
|
# 程序的配置运行
|
||||||
arg = '"{}" -run {}'.format(LEProc, usearg)
|
arg = "-run {}".format(usearg)
|
||||||
windows.CreateProcess(
|
admin = False
|
||||||
|
windows.ShellExecute(
|
||||||
None,
|
None,
|
||||||
|
"runas" if admin else "open",
|
||||||
|
LEProc,
|
||||||
arg,
|
arg,
|
||||||
None,
|
|
||||||
None,
|
|
||||||
False,
|
|
||||||
0,
|
|
||||||
None,
|
|
||||||
dirpath,
|
dirpath,
|
||||||
windows.STARTUPINFO(),
|
windows.SW_SHOWNORMAL,
|
||||||
)
|
)
|
||||||
|
|
||||||
def reselect(self, config, Guids, path):
|
def reselect(self, config, Guids, path):
|
||||||
globalconfig["le_extra_path"] = path
|
globalconfig["le_extra_path"] = path
|
||||||
Names, _Guids = self.profiles(config)
|
Names, _Guids, _ = self.profiles(config)
|
||||||
self.__profiles.clear()
|
self.__profiles.clear()
|
||||||
self.__profiles.addItems(Names)
|
self.__profiles.addItems(Names)
|
||||||
Guids.clear()
|
Guids.clear()
|
||||||
Guids.extend(_Guids)
|
Guids.extend(_Guids)
|
||||||
|
|
||||||
def settingX(self, layout, config):
|
def setting(self, layout, config):
|
||||||
Names, Guids = self.profiles(config)
|
Names, Guids, _ = self.profiles(config)
|
||||||
self.__profiles = getsimplecombobox(Names, config, "leguid", internal=Guids)
|
self.__profiles = getsimplecombobox(Names, config, "leguid", internal=Guids)
|
||||||
layout.addRow(
|
layout.addRow(
|
||||||
"路径",
|
"路径",
|
||||||
@ -176,59 +150,12 @@ class le_internal(LEbase, settingxx):
|
|||||||
continue
|
continue
|
||||||
config[k] = v
|
config[k] = v
|
||||||
|
|
||||||
def runX(self, exe, usearg, dirpath, config):
|
|
||||||
if config.get(self.use_which, 0) == 0:
|
|
||||||
|
|
||||||
valid = os.path.exists(globalconfig.get("le_extra_path", ""))
|
class NTLEAS64(LEbase):
|
||||||
if valid:
|
|
||||||
return self.runXX(exe, usearg, dirpath, config)
|
|
||||||
shareddllproxy = os.path.abspath("./files/plugins/shareddllproxy32")
|
|
||||||
|
|
||||||
def _get(k):
|
|
||||||
return config.get("LE_" + k, self.default[k])
|
|
||||||
|
|
||||||
param = '{ANSICodePage} {OEMCodePage} {LCID} "{dirname}" {RedirectRegistry} {HookUILanguageAPI}'.format(
|
|
||||||
LCID=_get("LCID"),
|
|
||||||
OEMCodePage=_get("CodePage"),
|
|
||||||
ANSICodePage=_get("CodePage"),
|
|
||||||
dirname=dirpath,
|
|
||||||
RedirectRegistry=int(_get("RedirectRegistry")),
|
|
||||||
HookUILanguageAPI=int(_get("HookUILanguageAPI")),
|
|
||||||
)
|
|
||||||
windows.CreateProcess(
|
|
||||||
None,
|
|
||||||
'"{}" {} {} {}'.format(shareddllproxy, "le", param, usearg),
|
|
||||||
None,
|
|
||||||
None,
|
|
||||||
False,
|
|
||||||
0,
|
|
||||||
None,
|
|
||||||
dirpath,
|
|
||||||
windows.STARTUPINFO(),
|
|
||||||
)
|
|
||||||
|
|
||||||
def setting(self, layout, config):
|
|
||||||
self.settingxx(layout, config, self.setting1, self.settingX)
|
|
||||||
|
|
||||||
def setting1(self, layout, config):
|
|
||||||
|
|
||||||
self.loaddf(config)
|
|
||||||
layout.addRow("LCID", getspinbox(0, 0xFFFFF, config, "LE_LCID"))
|
|
||||||
layout.addRow("CodePage", getspinbox(0, 0xFFFFF, config, "LE_CodePage"))
|
|
||||||
layout.addRow(
|
|
||||||
"RedirectRegistry", getsimpleswitch(config, "LE_RedirectRegistry")
|
|
||||||
)
|
|
||||||
layout.addRow(
|
|
||||||
"HookUILanguageAPI", getsimpleswitch(config, "LE_HookUILanguageAPI")
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class NTLEAS64(LEbase, settingxx):
|
|
||||||
name = "Ntleas"
|
name = "Ntleas"
|
||||||
id = "ntleas"
|
id = "ntleas"
|
||||||
bit = 6
|
bit = 6
|
||||||
bit64 = True
|
bit64 = True
|
||||||
use_which = "ntleas_use_which"
|
|
||||||
default = dict(LCID=0x411, CodePage=932, TimeZone=540)
|
default = dict(LCID=0x411, CodePage=932, TimeZone=540)
|
||||||
|
|
||||||
def loaddf(self, config):
|
def loaddf(self, config):
|
||||||
@ -238,82 +165,40 @@ class NTLEAS64(LEbase, settingxx):
|
|||||||
continue
|
continue
|
||||||
config[k] = v
|
config[k] = v
|
||||||
|
|
||||||
|
def getlrpath(self):
|
||||||
|
LEProc = globalconfig.get("ntleas_extra_path", "")
|
||||||
|
if not (LEProc and os.path.exists(LEProc)):
|
||||||
|
LEProc = os.path.abspath(
|
||||||
|
"files/plugins/Locale/ntleas046_x64/_no_use_for_dir"
|
||||||
|
)
|
||||||
|
return LEProc
|
||||||
|
|
||||||
def runX(self, exe, usearg, dirpath, config):
|
def runX(self, exe, usearg, dirpath, config):
|
||||||
if config.get(self.use_which, 0) == 0:
|
LEProc = os.path.join(
|
||||||
|
os.path.dirname(self.getlrpath()),
|
||||||
valid = os.path.exists(self.__path())
|
|
||||||
if valid:
|
|
||||||
return self.runXX(exe, usearg, dirpath, config)
|
|
||||||
shareddllproxy = os.path.abspath(
|
|
||||||
("./files/plugins/shareddllproxy32", "./files/plugins/shareddllproxy64")[
|
|
||||||
self.bit == 6
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
def _get(k):
|
|
||||||
return config.get("NT_" + k, self.default[k])
|
|
||||||
|
|
||||||
param = "{dwCompOption} {dwCodePage} {dwLCID} {dwTimeZone}".format(
|
|
||||||
dwCompOption=0,
|
|
||||||
dwCodePage=_get("CodePage"),
|
|
||||||
dwLCID=_get("LCID"),
|
|
||||||
dwTimeZone=-_get("TimeZone"),
|
|
||||||
)
|
|
||||||
windows.CreateProcess(
|
|
||||||
None,
|
|
||||||
'"{}" {} {} {}'.format(shareddllproxy, "ntleas", param, usearg),
|
|
||||||
None,
|
|
||||||
None,
|
|
||||||
False,
|
|
||||||
0,
|
|
||||||
None,
|
|
||||||
dirpath,
|
|
||||||
windows.STARTUPINFO(),
|
|
||||||
)
|
|
||||||
|
|
||||||
def setting1(self, layout, config):
|
|
||||||
self.loaddf(config)
|
|
||||||
|
|
||||||
layout.addRow("LCID", getspinbox(0, 0xFFFFF, config, "NT_LCID"))
|
|
||||||
layout.addRow("CodePage", getspinbox(0, 0xFFFFF, config, "NT_CodePage"))
|
|
||||||
layout.addRow("TimeZone", getspinbox(0, 0xFFFFF, config, "NT_TimeZone"))
|
|
||||||
|
|
||||||
def setting(self, layout, config):
|
|
||||||
self.settingxx(layout, config, self.setting1, self.settingX)
|
|
||||||
|
|
||||||
def __path(self):
|
|
||||||
return os.path.join(
|
|
||||||
os.path.dirname(globalconfig.get("ntleas_extra_path", "")),
|
|
||||||
["x86", "x64"][self.bit64],
|
["x86", "x64"][self.bit64],
|
||||||
"ntleas.exe",
|
"ntleas.exe",
|
||||||
)
|
)
|
||||||
|
|
||||||
def runXX(self, exe, usearg, dirpath, config):
|
|
||||||
LEProc = self.__path()
|
|
||||||
if not LEProc:
|
if not LEProc:
|
||||||
return
|
return
|
||||||
|
|
||||||
arg = '"{}" {} {}'.format(
|
arg = "{} {}".format(
|
||||||
LEProc,
|
|
||||||
usearg,
|
usearg,
|
||||||
config.get("ntleasparam", '"C932" "L1041" "FMS PGothic" "P4"'),
|
config.get("ntleasparam", '"C932" "L1041" "FMS PGothic" "P4"'),
|
||||||
)
|
)
|
||||||
windows.CreateProcess(
|
windows.ShellExecute(
|
||||||
None,
|
None,
|
||||||
|
"open",
|
||||||
|
LEProc,
|
||||||
arg,
|
arg,
|
||||||
None,
|
|
||||||
None,
|
|
||||||
False,
|
|
||||||
0,
|
|
||||||
None,
|
|
||||||
dirpath,
|
dirpath,
|
||||||
windows.STARTUPINFO(),
|
windows.SW_SHOWNORMAL,
|
||||||
)
|
)
|
||||||
|
|
||||||
def reselect(self, path):
|
def reselect(self, path):
|
||||||
globalconfig["ntleas_extra_path"] = path
|
globalconfig["ntleas_extra_path"] = path
|
||||||
|
|
||||||
def settingX(self, layout, config):
|
def setting(self, layout, config):
|
||||||
if "ntleasparam" not in config:
|
if "ntleasparam" not in config:
|
||||||
config["ntleasparam"] = '"C932" "L1041" "FMS PGothic" "P4"'
|
config["ntleasparam"] = '"C932" "L1041" "FMS PGothic" "P4"'
|
||||||
layout.addRow(
|
layout.addRow(
|
||||||
@ -337,10 +222,9 @@ class NTLEAS32(NTLEAS64):
|
|||||||
bit64 = False
|
bit64 = False
|
||||||
|
|
||||||
|
|
||||||
class lr_internal(LEbase, settingxx):
|
class lr_internal(LEbase):
|
||||||
name = "Locale Remulator"
|
name = "Locale Remulator"
|
||||||
id = "lr"
|
id = "lr"
|
||||||
use_which = "lr_use_which"
|
|
||||||
default = dict(LCID=0x411, CodePage=932, TimeZone=540, HookIME=False, HookLCID=True)
|
default = dict(LCID=0x411, CodePage=932, TimeZone=540, HookIME=False, HookLCID=True)
|
||||||
|
|
||||||
def loaddf(self, config):
|
def loaddf(self, config):
|
||||||
@ -350,100 +234,69 @@ class lr_internal(LEbase, settingxx):
|
|||||||
continue
|
continue
|
||||||
config[k] = v
|
config[k] = v
|
||||||
|
|
||||||
def runX(self, exe, usearg, dirpath, config):
|
|
||||||
if config.get(self.use_which, 0) == 0:
|
|
||||||
|
|
||||||
valid = os.path.exists(globalconfig.get("lr_extra_path", ""))
|
|
||||||
if valid:
|
|
||||||
return self.runXX(exe, usearg, dirpath, config)
|
|
||||||
|
|
||||||
shareddllproxy = os.path.abspath("./files/plugins/shareddllproxy32")
|
|
||||||
|
|
||||||
def _get(k):
|
|
||||||
return config.get("LR_" + k, self.default[k])
|
|
||||||
|
|
||||||
param = "{CodePage} {LCID} {Bias} {HookIME} {HookLCID}".format(
|
|
||||||
LCID=_get("LCID"),
|
|
||||||
CodePage=_get("CodePage"),
|
|
||||||
Bias=_get("TimeZone"),
|
|
||||||
HookIME=int(_get("HookIME")),
|
|
||||||
HookLCID=int(_get("HookLCID")),
|
|
||||||
)
|
|
||||||
windows.CreateProcess(
|
|
||||||
None,
|
|
||||||
'"{}" {} {} {}'.format(shareddllproxy, "LR", param, usearg),
|
|
||||||
None,
|
|
||||||
None,
|
|
||||||
False,
|
|
||||||
0,
|
|
||||||
None,
|
|
||||||
dirpath,
|
|
||||||
windows.STARTUPINFO(),
|
|
||||||
)
|
|
||||||
|
|
||||||
def setting(self, layout, config):
|
|
||||||
self.settingxx(layout, config, self.setting1, self.settingX)
|
|
||||||
|
|
||||||
def setting1(self, layout, config):
|
|
||||||
self.loaddf(config)
|
|
||||||
|
|
||||||
layout.addRow("LCID", getspinbox(0, 0xFFFFF, config, "LR_LCID"))
|
|
||||||
layout.addRow("CodePage", getspinbox(0, 0xFFFFF, config, "LR_CodePage"))
|
|
||||||
layout.addRow("TimeZone", getspinbox(0, 0xFFFFF, config, "LR_TimeZone"))
|
|
||||||
layout.addRow("HookIME", getsimpleswitch(config, "LR_HookIME"))
|
|
||||||
layout.addRow("HookLCID", getsimpleswitch(config, "LR_HookLCID"))
|
|
||||||
|
|
||||||
def profiles(self, config):
|
def profiles(self, config):
|
||||||
|
|
||||||
Names, Guids = [], []
|
Names, Guids = [], []
|
||||||
|
run_as_admins = []
|
||||||
try:
|
try:
|
||||||
|
|
||||||
with open(
|
with open(
|
||||||
os.path.join(
|
os.path.join(
|
||||||
os.path.dirname(globalconfig.get("lr_extra_path", "")),
|
os.path.dirname(self.getlrpath()),
|
||||||
"LRConfig.xml",
|
"LRConfig.xml",
|
||||||
),
|
),
|
||||||
"r",
|
"r",
|
||||||
encoding="utf8",
|
encoding="utf8",
|
||||||
) as ff:
|
) as ff:
|
||||||
for Name, Guid in re.findall('Name="(.*?)" Guid="(.*?)"', ff.read()):
|
root = ET.fromstring(ff.read())
|
||||||
Names.append(Name)
|
profiles = root.find("Profiles").findall("Profile")
|
||||||
Guids.append(Guid)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
return Names, Guids
|
|
||||||
|
|
||||||
def runXX(self, exe, usearg, dirpath, config):
|
for profile in profiles:
|
||||||
|
Names.append(profile.attrib.get("Name"))
|
||||||
|
Guids.append(profile.attrib.get("Guid"))
|
||||||
|
run_as_admins.append(
|
||||||
|
profile.find("RunAsAdmin").text.lower() == "true"
|
||||||
|
)
|
||||||
|
except:
|
||||||
|
print_exc()
|
||||||
|
return Names, Guids, run_as_admins
|
||||||
|
|
||||||
|
def getlrpath(self):
|
||||||
LEProc = globalconfig.get("lr_extra_path", "")
|
LEProc = globalconfig.get("lr_extra_path", "")
|
||||||
if not LEProc:
|
if not (LEProc and os.path.exists(LEProc)):
|
||||||
return
|
LEProc = os.path.abspath(
|
||||||
guids = self.profiles(config)[1]
|
"files/plugins/Locale/Locale_Remulator.1.5.4/LRProc.exe"
|
||||||
|
)
|
||||||
|
return LEProc
|
||||||
|
|
||||||
|
def runX(self, exe, usearg, dirpath, config):
|
||||||
|
|
||||||
|
LEProc = self.getlrpath()
|
||||||
|
prof = self.profiles(config)
|
||||||
guid = config.get("lrguid", None)
|
guid = config.get("lrguid", None)
|
||||||
if guid not in guids:
|
if guid not in prof[1]:
|
||||||
guid = guids[0]
|
guid = prof[1][0]
|
||||||
arg = '"{}" {} {}'.format(LEProc, guid, usearg)
|
idx = prof[1].index(guid)
|
||||||
windows.CreateProcess(
|
admin = prof[2][idx]
|
||||||
None,
|
windows.ShellExecute(
|
||||||
arg,
|
|
||||||
None,
|
|
||||||
None,
|
|
||||||
False,
|
|
||||||
0,
|
|
||||||
None,
|
None,
|
||||||
|
"runas" if admin else "open",
|
||||||
|
LEProc,
|
||||||
|
"{} {}".format(guid, usearg),
|
||||||
dirpath,
|
dirpath,
|
||||||
windows.STARTUPINFO(),
|
windows.SW_SHOWNORMAL,
|
||||||
)
|
)
|
||||||
|
|
||||||
def reselect(self, config, Guids, path):
|
def reselect(self, config, Guids, path):
|
||||||
globalconfig["lr_extra_path"] = path
|
globalconfig["lr_extra_path"] = path
|
||||||
Names, _Guids = self.profiles(config)
|
Names, _Guids, _ = self.profiles(config)
|
||||||
self.__profiles.clear()
|
self.__profiles.clear()
|
||||||
self.__profiles.addItems(Names)
|
self.__profiles.addItems(Names)
|
||||||
Guids.clear()
|
Guids.clear()
|
||||||
Guids.extend(_Guids)
|
Guids.extend(_Guids)
|
||||||
|
|
||||||
def settingX(self, layout, config):
|
def setting(self, layout, config):
|
||||||
Names, Guids = self.profiles(config)
|
Names, Guids, _ = self.profiles(config)
|
||||||
self.__profiles = getsimplecombobox(Names, config, "lrguid", internal=Guids)
|
self.__profiles = getsimplecombobox(Names, config, "lrguid", internal=Guids)
|
||||||
layout.addRow(
|
layout.addRow(
|
||||||
"路径",
|
"路径",
|
||||||
|
@ -1448,14 +1448,8 @@
|
|||||||
"shared": [
|
"shared": [
|
||||||
"./files/plugins/shareddllproxy32.exe",
|
"./files/plugins/shareddllproxy32.exe",
|
||||||
"./files/plugins/shareddllproxy64.exe",
|
"./files/plugins/shareddllproxy64.exe",
|
||||||
"./files/plugins/LoaderDll.dll",
|
|
||||||
"./files/plugins/LocaleEmulator.dll",
|
|
||||||
"./files/plugins/hookmagpie.dll",
|
"./files/plugins/hookmagpie.dll",
|
||||||
"./files/plugins/Magpie/Magpie.Core.exe",
|
"./files/plugins/Magpie/Magpie.Core.exe",
|
||||||
"./files/plugins/Locale_Remulator/LRHookx32.dll",
|
|
||||||
"./files/plugins/Locale_Remulator/LRHookx64.dll",
|
|
||||||
"./files/plugins/NTLEAS/ntleak.dll",
|
|
||||||
"./files/plugins/NTLEAS/ntleai.dll",
|
|
||||||
"./files/plugins/LunaHook/LunaHook32.dll",
|
"./files/plugins/LunaHook/LunaHook32.dll",
|
||||||
"./files/plugins/LunaHook/LunaHost32.dll",
|
"./files/plugins/LunaHook/LunaHost32.dll",
|
||||||
"./files/plugins/LunaHook/LunaHook64.dll",
|
"./files/plugins/LunaHook/LunaHook64.dll",
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"桜乃そら": "そそそ",
|
"桜乃そら": "そそそ",
|
||||||
"封面": "تغطية",
|
"封面": "تغطية",
|
||||||
"内置": "مدمجة",
|
|
||||||
"获取失败": "الحصول على فشل",
|
"获取失败": "الحصول على فشل",
|
||||||
"助動詞": "فعل مساعد",
|
"助動詞": "فعل مساعد",
|
||||||
"添加行": "إضافة صف",
|
"添加行": "إضافة صف",
|
||||||
@ -657,8 +656,6 @@
|
|||||||
"删除图片文件": "حذف ملف الصورة",
|
"删除图片文件": "حذف ملف الصورة",
|
||||||
"启动方式": "طريقة البدء",
|
"启动方式": "طريقة البدء",
|
||||||
"直接启动": "بدء التشغيل مباشرة",
|
"直接启动": "بدء التشغيل مباشرة",
|
||||||
"优先使用": "الأولوية في استخدام",
|
|
||||||
"外部": "خارجي .",
|
|
||||||
"不添加辞书": "لا إضافة القاموس",
|
"不添加辞书": "لا إضافة القاموس",
|
||||||
"识别方向": "تحديد الاتجاه",
|
"识别方向": "تحديد الاتجاه",
|
||||||
"横向": "بشكل مستعرض",
|
"横向": "بشكل مستعرض",
|
||||||
|
@ -179,7 +179,6 @@
|
|||||||
"移动": "移動",
|
"移动": "移動",
|
||||||
"显示移动按钮": "顯示移動按鈕",
|
"显示移动按钮": "顯示移動按鈕",
|
||||||
"设置Token": "設定 Token",
|
"设置Token": "設定 Token",
|
||||||
"内置": "內建",
|
|
||||||
"该功能可能会导致游戏崩溃!": "該功能可能會導致遊戲崩潰!",
|
"该功能可能会导致游戏崩溃!": "該功能可能會導致遊戲崩潰!",
|
||||||
"警告": "警告",
|
"警告": "警告",
|
||||||
"文字更新分析": "文字更新分析",
|
"文字更新分析": "文字更新分析",
|
||||||
@ -657,8 +656,6 @@
|
|||||||
"删除图片文件": "刪除圖片檔案",
|
"删除图片文件": "刪除圖片檔案",
|
||||||
"启动方式": "啟動方式",
|
"启动方式": "啟動方式",
|
||||||
"直接启动": "直接啟動",
|
"直接启动": "直接啟動",
|
||||||
"优先使用": "優先使用",
|
|
||||||
"外部": "外部",
|
|
||||||
"不添加辞书": "不新增辭書",
|
"不添加辞书": "不新增辭書",
|
||||||
"识别方向": "識別方向",
|
"识别方向": "識別方向",
|
||||||
"横向": "橫向",
|
"横向": "橫向",
|
||||||
|
@ -360,7 +360,6 @@
|
|||||||
"空白": "prázdné",
|
"空白": "prázdné",
|
||||||
"替换为": "Nahradit tím",
|
"替换为": "Nahradit tím",
|
||||||
"琴葉葵": "Qinye Kui.",
|
"琴葉葵": "Qinye Kui.",
|
||||||
"内置": "vestavěné",
|
|
||||||
"连接超时": "Časový limit připojení",
|
"连接超时": "Časový limit připojení",
|
||||||
"说明": "vysvětlit",
|
"说明": "vysvětlit",
|
||||||
"处理": "rukojeť",
|
"处理": "rukojeť",
|
||||||
@ -657,8 +656,6 @@
|
|||||||
"删除图片文件": "Smazat obrázkové soubory",
|
"删除图片文件": "Smazat obrázkové soubory",
|
||||||
"启动方式": "Metoda spuštění",
|
"启动方式": "Metoda spuštění",
|
||||||
"直接启动": "Přímo spustit",
|
"直接启动": "Přímo spustit",
|
||||||
"优先使用": "priorita použití",
|
|
||||||
"外部": "externí",
|
|
||||||
"不添加辞书": "Nepřidávat slovník",
|
"不添加辞书": "Nepřidávat slovník",
|
||||||
"识别方向": "Určit směr",
|
"识别方向": "Určit směr",
|
||||||
"横向": "příčná",
|
"横向": "příčná",
|
||||||
|
@ -360,7 +360,6 @@
|
|||||||
"空白": "blank",
|
"空白": "blank",
|
||||||
"替换为": "Ersetzen durch",
|
"替换为": "Ersetzen durch",
|
||||||
"琴葉葵": "Qinye Kui.",
|
"琴葉葵": "Qinye Kui.",
|
||||||
"内置": "eingebaut",
|
|
||||||
"连接超时": "Verbindungszeitüberschreitung",
|
"连接超时": "Verbindungszeitüberschreitung",
|
||||||
"说明": "erklären",
|
"说明": "erklären",
|
||||||
"处理": "Handle",
|
"处理": "Handle",
|
||||||
@ -657,8 +656,6 @@
|
|||||||
"删除图片文件": "Bilddateien löschen",
|
"删除图片文件": "Bilddateien löschen",
|
||||||
"启动方式": "Startmethode",
|
"启动方式": "Startmethode",
|
||||||
"直接启动": "Direkt starten",
|
"直接启动": "Direkt starten",
|
||||||
"优先使用": "Priorität der Verwendung",
|
|
||||||
"外部": "extern",
|
|
||||||
"不添加辞书": "Kein Wörterbuch hinzufügen",
|
"不添加辞书": "Kein Wörterbuch hinzufügen",
|
||||||
"识别方向": "Richtung bestimmen",
|
"识别方向": "Richtung bestimmen",
|
||||||
"横向": "quer",
|
"横向": "quer",
|
||||||
|
@ -179,7 +179,6 @@
|
|||||||
"移动": "Move",
|
"移动": "Move",
|
||||||
"显示移动按钮": "Show Move Button",
|
"显示移动按钮": "Show Move Button",
|
||||||
"设置Token": "Set Token",
|
"设置Token": "Set Token",
|
||||||
"内置": "Built-in",
|
|
||||||
"该功能可能会导致游戏崩溃!": "This feature may cause the game to crash!",
|
"该功能可能会导致游戏崩溃!": "This feature may cause the game to crash!",
|
||||||
"警告": "Warning",
|
"警告": "Warning",
|
||||||
"文字更新分析": "Text Update Analysis",
|
"文字更新分析": "Text Update Analysis",
|
||||||
@ -657,8 +656,6 @@
|
|||||||
"删除图片文件": "Delete image files",
|
"删除图片文件": "Delete image files",
|
||||||
"启动方式": "Startup method",
|
"启动方式": "Startup method",
|
||||||
"直接启动": "Directly start",
|
"直接启动": "Directly start",
|
||||||
"优先使用": "priority of use",
|
|
||||||
"外部": "external",
|
|
||||||
"不添加辞书": "Do not add a dictionary",
|
"不添加辞书": "Do not add a dictionary",
|
||||||
"识别方向": "Identify direction",
|
"识别方向": "Identify direction",
|
||||||
"横向": "transverse",
|
"横向": "transverse",
|
||||||
|
@ -179,7 +179,6 @@
|
|||||||
"移动": "Mover",
|
"移动": "Mover",
|
||||||
"显示移动按钮": "Muestra el botón mover",
|
"显示移动按钮": "Muestra el botón mover",
|
||||||
"设置Token": "Establecer Token",
|
"设置Token": "Establecer Token",
|
||||||
"内置": "Incorporado",
|
|
||||||
"该功能可能会导致游戏崩溃!": "¡¡ esta función puede causar un colapso del juego!",
|
"该功能可能会导致游戏崩溃!": "¡¡ esta función puede causar un colapso del juego!",
|
||||||
"警告": "Aviso",
|
"警告": "Aviso",
|
||||||
"文字更新分析": "Análisis de actualización de texto",
|
"文字更新分析": "Análisis de actualización de texto",
|
||||||
@ -657,8 +656,6 @@
|
|||||||
"删除图片文件": "Eliminar archivos de imagen",
|
"删除图片文件": "Eliminar archivos de imagen",
|
||||||
"启动方式": "Modo de arranque",
|
"启动方式": "Modo de arranque",
|
||||||
"直接启动": "Arranque directo",
|
"直接启动": "Arranque directo",
|
||||||
"优先使用": "Uso prioritario",
|
|
||||||
"外部": "Exterior",
|
|
||||||
"不添加辞书": "Sin agregar diccionarios",
|
"不添加辞书": "Sin agregar diccionarios",
|
||||||
"识别方向": "Identificar la dirección",
|
"识别方向": "Identificar la dirección",
|
||||||
"横向": "Horizontal",
|
"横向": "Horizontal",
|
||||||
|
@ -179,7 +179,6 @@
|
|||||||
"移动": "Mobile",
|
"移动": "Mobile",
|
||||||
"显示移动按钮": "Afficher le bouton mobile",
|
"显示移动按钮": "Afficher le bouton mobile",
|
||||||
"设置Token": "Configurer token",
|
"设置Token": "Configurer token",
|
||||||
"内置": "Intégré",
|
|
||||||
"该功能可能会导致游戏崩溃!": "Cette fonctionnalité peut provoquer un crash du jeu!",
|
"该功能可能会导致游戏崩溃!": "Cette fonctionnalité peut provoquer un crash du jeu!",
|
||||||
"警告": "Avertissement",
|
"警告": "Avertissement",
|
||||||
"文字更新分析": "Analyse des mises à jour textuelles",
|
"文字更新分析": "Analyse des mises à jour textuelles",
|
||||||
@ -657,8 +656,6 @@
|
|||||||
"删除图片文件": "Supprimer un fichier image",
|
"删除图片文件": "Supprimer un fichier image",
|
||||||
"启动方式": "Mode de démarrage",
|
"启动方式": "Mode de démarrage",
|
||||||
"直接启动": "Démarrage direct",
|
"直接启动": "Démarrage direct",
|
||||||
"优先使用": "Utilisation prioritaire",
|
|
||||||
"外部": "Extérieur",
|
|
||||||
"不添加辞书": "Pas d'ajout de discours",
|
"不添加辞书": "Pas d'ajout de discours",
|
||||||
"识别方向": "Identification des directions",
|
"识别方向": "Identification des directions",
|
||||||
"横向": "Latéralement",
|
"横向": "Latéralement",
|
||||||
|
@ -174,7 +174,6 @@
|
|||||||
"编辑": "modifica",
|
"编辑": "modifica",
|
||||||
"移动": "Sposta",
|
"移动": "Sposta",
|
||||||
"设置Token": "Imposta gettone",
|
"设置Token": "Imposta gettone",
|
||||||
"内置": "integrato",
|
|
||||||
"该功能可能会导致游戏崩溃!": "Questa funzione può causare il crash del gioco!",
|
"该功能可能会导致游戏崩溃!": "Questa funzione può causare il crash del gioco!",
|
||||||
"警告": "avviso",
|
"警告": "avviso",
|
||||||
"文字更新分析": "Analisi dell'aggiornamento del testo",
|
"文字更新分析": "Analisi dell'aggiornamento del testo",
|
||||||
@ -657,8 +656,6 @@
|
|||||||
"删除图片文件": "Elimina file immagine",
|
"删除图片文件": "Elimina file immagine",
|
||||||
"启动方式": "Metodo di avvio",
|
"启动方式": "Metodo di avvio",
|
||||||
"直接启动": "Avvia direttamente",
|
"直接启动": "Avvia direttamente",
|
||||||
"优先使用": "priorità d'uso",
|
|
||||||
"外部": "esterno",
|
|
||||||
"不添加辞书": "Non aggiungere un dizionario",
|
"不添加辞书": "Non aggiungere un dizionario",
|
||||||
"识别方向": "Identifica la direzione",
|
"识别方向": "Identifica la direzione",
|
||||||
"横向": "trasversale",
|
"横向": "trasversale",
|
||||||
|
@ -179,7 +179,6 @@
|
|||||||
"移动": "移動",
|
"移动": "移動",
|
||||||
"显示移动按钮": "移動ボタンを表示",
|
"显示移动按钮": "移動ボタンを表示",
|
||||||
"设置Token": "トークンの設定",
|
"设置Token": "トークンの設定",
|
||||||
"内置": "組み込み",
|
|
||||||
"该功能可能会导致游戏崩溃!": "この機能はゲームをクラッシュさせる可能性があります!",
|
"该功能可能会导致游戏崩溃!": "この機能はゲームをクラッシュさせる可能性があります!",
|
||||||
"警告": "に警告",
|
"警告": "に警告",
|
||||||
"文字更新分析": "テキスト更新解析",
|
"文字更新分析": "テキスト更新解析",
|
||||||
@ -657,8 +656,6 @@
|
|||||||
"删除图片文件": "画像ファイルを削除",
|
"删除图片文件": "画像ファイルを削除",
|
||||||
"启动方式": "起動モード",
|
"启动方式": "起動モード",
|
||||||
"直接启动": "ダイレクトスタート",
|
"直接启动": "ダイレクトスタート",
|
||||||
"优先使用": "優先的に使用",
|
|
||||||
"外部": "外部",
|
|
||||||
"不添加辞书": "辞書を追加しない",
|
"不添加辞书": "辞書を追加しない",
|
||||||
"识别方向": "方向を識別する",
|
"识别方向": "方向を識別する",
|
||||||
"横向": "横方向",
|
"横向": "横方向",
|
||||||
|
@ -179,7 +179,6 @@
|
|||||||
"移动": "이동",
|
"移动": "이동",
|
||||||
"显示移动按钮": "이동 버튼 표시",
|
"显示移动按钮": "이동 버튼 표시",
|
||||||
"设置Token": "Token 설정",
|
"设置Token": "Token 설정",
|
||||||
"内置": "내장형",
|
|
||||||
"该功能可能会导致游戏崩溃!": "이 기능은 게임 충돌을 일으킬 수 있습니다!",
|
"该功能可能会导致游戏崩溃!": "이 기능은 게임 충돌을 일으킬 수 있습니다!",
|
||||||
"警告": "경고",
|
"警告": "경고",
|
||||||
"文字更新分析": "텍스트 업데이트 분석",
|
"文字更新分析": "텍스트 업데이트 분석",
|
||||||
@ -657,8 +656,6 @@
|
|||||||
"删除图片文件": "그림 파일 삭제",
|
"删除图片文件": "그림 파일 삭제",
|
||||||
"启动方式": "시작 방법",
|
"启动方式": "시작 방법",
|
||||||
"直接启动": "직접 시작",
|
"直接启动": "직접 시작",
|
||||||
"优先使用": "우선 사용",
|
|
||||||
"外部": "외부",
|
|
||||||
"不添加辞书": "사서 를 넣지 않다",
|
"不添加辞书": "사서 를 넣지 않다",
|
||||||
"识别方向": "방향 식별",
|
"识别方向": "방향 식별",
|
||||||
"横向": "가로",
|
"横向": "가로",
|
||||||
|
@ -360,7 +360,6 @@
|
|||||||
"空白": "blanco",
|
"空白": "blanco",
|
||||||
"替换为": "Vervangen door",
|
"替换为": "Vervangen door",
|
||||||
"琴葉葵": "Qinye Kui.",
|
"琴葉葵": "Qinye Kui.",
|
||||||
"内置": "ingebouwd",
|
|
||||||
"连接超时": "verbinding timeout",
|
"连接超时": "verbinding timeout",
|
||||||
"说明": "uitleggen",
|
"说明": "uitleggen",
|
||||||
"处理": "handgreep",
|
"处理": "handgreep",
|
||||||
@ -657,8 +656,6 @@
|
|||||||
"删除图片文件": "Afbeeldingsbestanden verwijderen",
|
"删除图片文件": "Afbeeldingsbestanden verwijderen",
|
||||||
"启动方式": "Opstartmethode",
|
"启动方式": "Opstartmethode",
|
||||||
"直接启动": "Direct starten",
|
"直接启动": "Direct starten",
|
||||||
"优先使用": "prioriteit van het gebruik",
|
|
||||||
"外部": "extern",
|
|
||||||
"不添加辞书": "Geen woordenboek toevoegen",
|
"不添加辞书": "Geen woordenboek toevoegen",
|
||||||
"识别方向": "Identificeer richting",
|
"识别方向": "Identificeer richting",
|
||||||
"横向": "dwars",
|
"横向": "dwars",
|
||||||
|
@ -179,7 +179,6 @@
|
|||||||
"移动": "ruchy",
|
"移动": "ruchy",
|
||||||
"显示移动按钮": "Pokaż przycisk ruchu",
|
"显示移动按钮": "Pokaż przycisk ruchu",
|
||||||
"设置Token": "Ustaw token",
|
"设置Token": "Ustaw token",
|
||||||
"内置": "wbudowany",
|
|
||||||
"该功能可能会导致游戏崩溃!": "Ta funkcja może spowodować awarię gry!",
|
"该功能可能会导致游戏崩溃!": "Ta funkcja może spowodować awarię gry!",
|
||||||
"警告": "ostrzeżenie",
|
"警告": "ostrzeżenie",
|
||||||
"文字更新分析": "Analiza aktualizacji tekstu",
|
"文字更新分析": "Analiza aktualizacji tekstu",
|
||||||
@ -657,8 +656,6 @@
|
|||||||
"删除图片文件": "Usuń pliki obrazów",
|
"删除图片文件": "Usuń pliki obrazów",
|
||||||
"启动方式": "Metoda uruchomienia",
|
"启动方式": "Metoda uruchomienia",
|
||||||
"直接启动": "Bezpośredni start",
|
"直接启动": "Bezpośredni start",
|
||||||
"优先使用": "priorytet stosowania",
|
|
||||||
"外部": "zewnętrzne",
|
|
||||||
"不添加辞书": "Nie dodawaj słownika",
|
"不添加辞书": "Nie dodawaj słownika",
|
||||||
"识别方向": "Określić kierunek",
|
"识别方向": "Określić kierunek",
|
||||||
"横向": "poprzeczne",
|
"横向": "poprzeczne",
|
||||||
|
@ -360,7 +360,6 @@
|
|||||||
"空白": "em branco",
|
"空白": "em branco",
|
||||||
"替换为": "Substituir por",
|
"替换为": "Substituir por",
|
||||||
"琴葉葵": "Qinye Kui",
|
"琴葉葵": "Qinye Kui",
|
||||||
"内置": "embutido",
|
|
||||||
"连接超时": "Tempo limite da ligação",
|
"连接超时": "Tempo limite da ligação",
|
||||||
"说明": "explicar",
|
"说明": "explicar",
|
||||||
"处理": "alça",
|
"处理": "alça",
|
||||||
@ -657,8 +656,6 @@
|
|||||||
"删除图片文件": "Apagar os ficheiros de imagem",
|
"删除图片文件": "Apagar os ficheiros de imagem",
|
||||||
"启动方式": "Método de arranque",
|
"启动方式": "Método de arranque",
|
||||||
"直接启动": "Iniciar directamente",
|
"直接启动": "Iniciar directamente",
|
||||||
"优先使用": "prioridade de utilização",
|
|
||||||
"外部": "externo",
|
|
||||||
"不添加辞书": "Não adicionar um dicionário",
|
"不添加辞书": "Não adicionar um dicionário",
|
||||||
"识别方向": "Identificar a direcção",
|
"识别方向": "Identificar a direcção",
|
||||||
"横向": "transversal",
|
"横向": "transversal",
|
||||||
|
@ -179,7 +179,6 @@
|
|||||||
"移动": "Переместить",
|
"移动": "Переместить",
|
||||||
"显示移动按钮": "Показать кнопку перемещения",
|
"显示移动按钮": "Показать кнопку перемещения",
|
||||||
"设置Token": "Настройка Token",
|
"设置Token": "Настройка Token",
|
||||||
"内置": "Встроенные",
|
|
||||||
"该功能可能会导致游戏崩溃!": "Эта функция может привести к сбою игры!",
|
"该功能可能会导致游戏崩溃!": "Эта функция может привести к сбою игры!",
|
||||||
"警告": "предупреждение",
|
"警告": "предупреждение",
|
||||||
"文字更新分析": "Анализ текстовых обновлений",
|
"文字更新分析": "Анализ текстовых обновлений",
|
||||||
@ -657,8 +656,6 @@
|
|||||||
"删除图片文件": "Удалить файл изображения",
|
"删除图片文件": "Удалить файл изображения",
|
||||||
"启动方式": "Режим запуска",
|
"启动方式": "Режим запуска",
|
||||||
"直接启动": "Прямой запуск",
|
"直接启动": "Прямой запуск",
|
||||||
"优先使用": "Приоритетное использование",
|
|
||||||
"外部": "Внешний",
|
|
||||||
"不添加辞书": "Не добавлять слова",
|
"不添加辞书": "Не добавлять слова",
|
||||||
"识别方向": "Распознать направление",
|
"识别方向": "Распознать направление",
|
||||||
"横向": "Горизонтальный",
|
"横向": "Горизонтальный",
|
||||||
|
@ -360,7 +360,6 @@
|
|||||||
"空白": "tomt",
|
"空白": "tomt",
|
||||||
"替换为": "Ersätt med",
|
"替换为": "Ersätt med",
|
||||||
"琴葉葵": "Qinye Kui",
|
"琴葉葵": "Qinye Kui",
|
||||||
"内置": "inbyggd",
|
|
||||||
"连接超时": "Tidsfri anslutning",
|
"连接超时": "Tidsfri anslutning",
|
||||||
"说明": "förklara",
|
"说明": "förklara",
|
||||||
"处理": "handtag",
|
"处理": "handtag",
|
||||||
@ -657,8 +656,6 @@
|
|||||||
"删除图片文件": "Ta bort bildfiler",
|
"删除图片文件": "Ta bort bildfiler",
|
||||||
"启动方式": "Startmetod",
|
"启动方式": "Startmetod",
|
||||||
"直接启动": "Starta direkt",
|
"直接启动": "Starta direkt",
|
||||||
"优先使用": "prioritet för användning",
|
|
||||||
"外部": "extern",
|
|
||||||
"不添加辞书": "Lägg inte till en ordlista",
|
"不添加辞书": "Lägg inte till en ordlista",
|
||||||
"识别方向": "Identifiera riktning",
|
"识别方向": "Identifiera riktning",
|
||||||
"横向": "tvärgående",
|
"横向": "tvärgående",
|
||||||
|
@ -358,7 +358,6 @@
|
|||||||
"空白": "ว่างเปล่า",
|
"空白": "ว่างเปล่า",
|
||||||
"替换为": "แทนที่ด้วย",
|
"替换为": "แทนที่ด้วย",
|
||||||
"琴葉葵": "ดอกทานตะวัน",
|
"琴葉葵": "ดอกทานตะวัน",
|
||||||
"内置": "สร้างขึ้นใน",
|
|
||||||
"连接超时": "หมดเวลาการเชื่อมต่อ",
|
"连接超时": "หมดเวลาการเชื่อมต่อ",
|
||||||
"说明": "คำแนะนำ",
|
"说明": "คำแนะนำ",
|
||||||
"处理": "การประมวลผล",
|
"处理": "การประมวลผล",
|
||||||
@ -657,8 +656,6 @@
|
|||||||
"删除图片文件": "ลบไฟล์รูปภาพ",
|
"删除图片文件": "ลบไฟล์รูปภาพ",
|
||||||
"启动方式": "วิธีการเริ่มต้น",
|
"启动方式": "วิธีการเริ่มต้น",
|
||||||
"直接启动": "เริ่มต้นโดยตรง",
|
"直接启动": "เริ่มต้นโดยตรง",
|
||||||
"优先使用": "ใช้ลำดับความสำคัญ",
|
|
||||||
"外部": "ภายนอก",
|
|
||||||
"不添加辞书": "ไม่เพิ่มสำนวน",
|
"不添加辞书": "ไม่เพิ่มสำนวน",
|
||||||
"识别方向": "ระบุทิศทาง",
|
"识别方向": "ระบุทิศทาง",
|
||||||
"横向": "แนวนอน",
|
"横向": "แนวนอน",
|
||||||
|
@ -179,7 +179,6 @@
|
|||||||
"移动": "hareket et",
|
"移动": "hareket et",
|
||||||
"显示移动按钮": "Taşıma Düğmesini Göster",
|
"显示移动按钮": "Taşıma Düğmesini Göster",
|
||||||
"设置Token": "Token ayarlayın",
|
"设置Token": "Token ayarlayın",
|
||||||
"内置": "in şa edilmiş",
|
|
||||||
"该功能可能会导致游戏崩溃!": "Bu fonksiyon oyunu mahvedebilir!",
|
"该功能可能会导致游戏崩溃!": "Bu fonksiyon oyunu mahvedebilir!",
|
||||||
"警告": "uyarı",
|
"警告": "uyarı",
|
||||||
"文字更新分析": "Metin güncelleştirme analizi",
|
"文字更新分析": "Metin güncelleştirme analizi",
|
||||||
@ -657,8 +656,6 @@
|
|||||||
"删除图片文件": "Resim dosyalarını sil",
|
"删除图片文件": "Resim dosyalarını sil",
|
||||||
"启动方式": "Başlangıç yöntemi",
|
"启动方式": "Başlangıç yöntemi",
|
||||||
"直接启动": "Direkten başla",
|
"直接启动": "Direkten başla",
|
||||||
"优先使用": "kullanımın önceliği",
|
|
||||||
"外部": "dış",
|
|
||||||
"不添加辞书": "Sözlük eklemeyin",
|
"不添加辞书": "Sözlük eklemeyin",
|
||||||
"识别方向": "Doğru belirle",
|
"识别方向": "Doğru belirle",
|
||||||
"横向": "transverse",
|
"横向": "transverse",
|
||||||
|
@ -174,7 +174,6 @@
|
|||||||
"编辑": "редагувати",
|
"编辑": "редагувати",
|
||||||
"移动": "пересунути",
|
"移动": "пересунути",
|
||||||
"设置Token": "Встановити позначку",
|
"设置Token": "Встановити позначку",
|
||||||
"内置": "вбудований",
|
|
||||||
"该功能可能会导致游戏崩溃!": "Ця можливість може призвести до аварії гри!",
|
"该功能可能会导致游戏崩溃!": "Ця можливість може призвести до аварії гри!",
|
||||||
"警告": "попередження",
|
"警告": "попередження",
|
||||||
"文字更新分析": "Аналіз оновлення тексту",
|
"文字更新分析": "Аналіз оновлення тексту",
|
||||||
@ -657,8 +656,6 @@
|
|||||||
"删除图片文件": "Вилучити файли зображення",
|
"删除图片文件": "Вилучити файли зображення",
|
||||||
"启动方式": "Метод запуску",
|
"启动方式": "Метод запуску",
|
||||||
"直接启动": "Прямо запустити",
|
"直接启动": "Прямо запустити",
|
||||||
"优先使用": "пріоритет використання",
|
|
||||||
"外部": "зовнішній",
|
|
||||||
"不添加辞书": "Не додавати словник",
|
"不添加辞书": "Не додавати словник",
|
||||||
"识别方向": "Визначити напрямок",
|
"识别方向": "Визначити напрямок",
|
||||||
"横向": "transverse",
|
"横向": "transverse",
|
||||||
|
@ -179,7 +179,6 @@
|
|||||||
"移动": "Di chuyển",
|
"移动": "Di chuyển",
|
||||||
"显示移动按钮": "Hiện nút di chuyển",
|
"显示移动按钮": "Hiện nút di chuyển",
|
||||||
"设置Token": "Thiết lập Token",
|
"设置Token": "Thiết lập Token",
|
||||||
"内置": "Được xây dựng trong",
|
|
||||||
"该功能可能会导致游戏崩溃!": "Tính năng này có thể gây ra sự cố trò chơi!",
|
"该功能可能会导致游戏崩溃!": "Tính năng này có thể gây ra sự cố trò chơi!",
|
||||||
"警告": "Cảnh báo",
|
"警告": "Cảnh báo",
|
||||||
"文字更新分析": "Phân tích cập nhật văn bản",
|
"文字更新分析": "Phân tích cập nhật văn bản",
|
||||||
@ -657,8 +656,6 @@
|
|||||||
"删除图片文件": "Xoá tập tin ảnh",
|
"删除图片文件": "Xoá tập tin ảnh",
|
||||||
"启动方式": "Cách bắt đầu",
|
"启动方式": "Cách bắt đầu",
|
||||||
"直接启动": "Khởi động trực tiếp",
|
"直接启动": "Khởi động trực tiếp",
|
||||||
"优先使用": "Ưu tiên sử dụng",
|
|
||||||
"外部": "Bên ngoài",
|
|
||||||
"不添加辞书": "Không thêm từ điển",
|
"不添加辞书": "Không thêm từ điển",
|
||||||
"识别方向": "Xác định hướng",
|
"识别方向": "Xác định hướng",
|
||||||
"横向": "Phong cảnh",
|
"横向": "Phong cảnh",
|
||||||
|
@ -366,7 +366,6 @@
|
|||||||
"空白": "",
|
"空白": "",
|
||||||
"替换为": "",
|
"替换为": "",
|
||||||
"琴葉葵": "",
|
"琴葉葵": "",
|
||||||
"内置": "",
|
|
||||||
"连接超时": "",
|
"连接超时": "",
|
||||||
"起始地址": "",
|
"起始地址": "",
|
||||||
"说明": "",
|
"说明": "",
|
||||||
@ -668,8 +667,6 @@
|
|||||||
"删除图片文件": "",
|
"删除图片文件": "",
|
||||||
"启动方式": "",
|
"启动方式": "",
|
||||||
"直接启动": "",
|
"直接启动": "",
|
||||||
"优先使用": "",
|
|
||||||
"外部": "",
|
|
||||||
"不添加辞书": "",
|
"不添加辞书": "",
|
||||||
"识别方向": "",
|
"识别方向": "",
|
||||||
"横向": "",
|
"横向": "",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user