refine translations

This commit is contained in:
Le Tan 2024-04-30 22:07:00 +08:00
parent 3b755287e7
commit a04968913c
14 changed files with 29 additions and 15818 deletions

View File

@ -28,8 +28,23 @@ set_source_files_properties(${VX_APP_ICON_MACOS} PROPERTIES
# Translations
set(VX_TS_FILES data/core/translations/vnote_zh_CN.ts
data/core/translations/vnote_ja.ts)
set_source_files_properties(${VX_TS_FILES} PROPERTIES OUTPUT_LOCATION "data/core/translations")
if((QT_DEFAULT_MAJOR_VERSION GREATER 5))
qt_add_lupdate(vnote TS_FILES ${VX_TS_FILES})
endif()
# Generate .qm files from .ts files (lrelease)
qt_add_translation(VX_QM_FILES ${VX_TS_FILES})
add_custom_target(lrelease DEPENDS ${VX_QM_FILES})
# TODO: VTextEdit translations
list(APPEND VX_QM_FILES
data/core/translations/qdialogbuttonbox_zh_CN.qm
data/core/translations/qtbase_ja.qm
data/core/translations/qtbase_zh_CN.qm
data/core/translations/qtv_ja.qm
data/core/translations/qtv_zh_CN.qm
data/core/translations/qwebengine_zh_CN.qm
)
install(FILES ${VX_QM_FILES} DESTINATION "${CMAKE_INSTALL_BINDIR}/translations" OPTIONAL)
# Resources
set(VX_RESOURCE_FILES data/core/core.qrc)

View File

@ -2,11 +2,13 @@
find_package(Qt${QT_DEFAULT_MAJOR_VERSION} REQUIRED COMPONENTS Core)
get_target_property(QMAKE_EXECUTABLE Qt::qmake IMPORTED_LOCATION)
get_target_property(QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION)
get_filename_component(QT_BIN_DIR "${QMAKE_EXECUTABLE}" DIRECTORY)
execute_process(COMMAND ${QMAKE_EXECUTABLE} -query QT_VERSION OUTPUT_VARIABLE QT_VERSION)
find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${QT_BIN_DIR}")
# To use the specific version of Qt
set(WINDEPLOYQT_EXECUTABLE "${QT_BIN_DIR}/windeployqt")
find_program(LINUXDEPLOY_EXECUTABLE linuxdeploy linuxdeploy-x86_64.AppImage HINTS "${QT_BIN_DIR}")
find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${QT_BIN_DIR}")
find_program(MACDEPLOYQTFIX_EXECUTABLE macdeployqtfix.py HINTS "${QT_BIN_DIR}")
@ -43,7 +45,9 @@ function(windeployqt target)
DEPENDS vnote
)
install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/winqt/" DESTINATION ${CMAKE_INSTALL_BINDIR})
add_dependencies(deploy lrelease)
install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/winqt/" DESTINATION "${CMAKE_INSTALL_BINDIR}" OPTIONAL)
set(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)
include(InstallRequiredSystemLibraries)
endfunction()

View File

@ -95,15 +95,5 @@
<file>logo/vnote.png</file>
<file>logo/256x256/vnote.png</file>
<file>logo/vnote_mono.png</file>
<file>translations/qdialogbuttonbox_zh_CN.qm</file>
<file>translations/qwebengine_zh_CN.qm</file>
<file>translations/qt_zh_CN.qm</file>
<file>translations/vnote_zh_CN.qm</file>
<file>translations/qtbase_zh_CN.qm</file>
<file>translations/vtextedit_zh_CN.qm</file>
<file>translations/qt_ja.qm</file>
<file>translations/vnote_ja.qm</file>
<file>translations/qtbase_ja.qm</file>
<file>translations/vtextedit_ja.qm</file>
</qresource>
</RCC>

View File

@ -1,79 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN">
<context>
<name>QPlatformTheme</name>
<message>
<source>OK</source>
<translation></translation>
</message>
<message>
<source>Save</source>
<translation></translation>
</message>
<message>
<source>Save All</source>
<translation></translation>
</message>
<message>
<source>Open</source>
<translation></translation>
</message>
<message>
<source>&amp;Yes</source>
<translation>(&amp;Y)</translation>
</message>
<message>
<source>Yes to &amp;All</source>
<translation>(&amp;A)</translation>
</message>
<message>
<source>&amp;No</source>
<translation>(&amp;N)</translation>
</message>
<message>
<source>N&amp;o to All</source>
<translation>(&amp;O)</translation>
</message>
<message>
<source>Abort</source>
<translation></translation>
</message>
<message>
<source>Retry</source>
<translation></translation>
</message>
<message>
<source>Ignore</source>
<translation></translation>
</message>
<message>
<source>Close</source>
<translation></translation>
</message>
<message>
<source>Cancel</source>
<translation></translation>
</message>
<message>
<source>Discard</source>
<translation></translation>
</message>
<message>
<source>Help</source>
<translation></translation>
</message>
<message>
<source>Apply</source>
<translation></translation>
</message>
<message>
<source>Reset</source>
<translation></translation>
</message>
<message>
<source>Restore Defaults</source>
<translation></translation>
</message>
</context>
</TS>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,193 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN">
<!--QWebEngineView uses different sources for its standard context menu.-->
<!--https://code.woboq.org/qt5/qtwebengine/src/core/render_view_context_menu_qt.cpp.html-->
<!--https://code.woboq.org/qt5/qtwebengine/src/webenginewidgets/api/qwebenginepage.cpp.html-->
<context>
<name>RenderViewContextMenuQt</name>
<message>
<source>Back</source>
<translation>退</translation>
</message>
<message>
<source>Forward</source>
<translation></translation>
</message>
<message>
<source>Reload</source>
<translation></translation>
</message>
<message>
<source>Cut</source>
<translation></translation>
</message>
<message>
<source>Copy</source>
<translation></translation>
</message>
<message>
<source>Paste</source>
<translation></translation>
</message>
<message>
<source>Undo</source>
<translation></translation>
</message>
<message>
<source>Redo</source>
<translation></translation>
</message>
<message>
<source>Select all</source>
<translation></translation>
</message>
<message>
<source>Paste and match style</source>
<translation></translation>
</message>
<message>
<source>Open link in new window</source>
<translation></translation>
</message>
<message>
<source>Open link in new tab</source>
<translation></translation>
</message>
<message>
<source>Copy link address</source>
<translation></translation>
</message>
<message>
<source>Save link</source>
<translation></translation>
</message>
<message>
<source>Copy image</source>
<translation></translation>
</message>
<message>
<source>Copy image address</source>
<translation></translation>
</message>
<message>
<source>Save image</source>
<translation></translation>
</message>
<message>
<source>Copy media address</source>
<translation></translation>
</message>
<message>
<source>Show controls</source>
<translation></translation>
</message>
<message>
<source>Loop</source>
<translation></translation>
</message>
<message>
<source>Save media</source>
<translation></translation>
</message>
<message>
<source>Inspect</source>
<translation></translation>
</message>
<message>
<source>Exit full screen</source>
<translation>退</translation>
</message>
<message>
<source>Save page</source>
<translation></translation>
</message>
<message>
<source>View page source</source>
<translation></translation>
</message>
</context>
<context>
<name>QWebEnginePage</name>
<message>
<source>Stop</source>
<translation></translation>
</message>
<message>
<source>Reload and Bypass Cache</source>
<translation></translation>
</message>
<message>
<source>Open link in this window</source>
<translation></translation>
</message>
<message>
<source>Open link in new background tab</source>
<translation></translation>
</message>
<message>
<source>Toggle Play/Pause</source>
<translation>/</translation>
</message>
<message>
<source>Toggle Mute</source>
<translation></translation>
</message>
<message>
<source>Close Page</source>
<translation></translation>
</message>
<message>
<source>Unselect</source>
<translation></translation>
</message>
<message>
<source>&amp;Bold</source>
<translation>(&amp;B)</translation>
</message>
<message>
<source>&amp;Italic</source>
<translation>(&amp;I)</translation>
</message>
<message>
<source>&amp;Underline</source>
<translation>线(&amp;U)</translation>
</message>
<message>
<source>&amp;Strikethrough</source>
<translation>线(&amp;S)</translation>
</message>
<message>
<source>Align &amp;Left</source>
<translation>(&amp;L)</translation>
</message>
<message>
<source>Align &amp;Center</source>
<translation>(&amp;C)</translation>
</message>
<message>
<source>Align &amp;Right</source>
<translation>(&amp;R)</translation>
</message>
<message>
<source>Align &amp;Justified</source>
<translation>(&amp;J)</translation>
</message>
<message>
<source>&amp;Indent</source>
<translation>(&amp;I)</translation>
</message>
<message>
<source>&amp;Outdent</source>
<translation>(&amp;O)</translation>
</message>
<message>
<source>Insert &amp;Ordered List</source>
<translation>(&amp;O)</translation>
</message>
<message>
<source>Insert &amp;Unordered List</source>
<translation>(&amp;U)</translation>
</message>
</context>
</TS>

View File

@ -204,47 +204,42 @@ void loadTranslators(QApplication &p_app)
QLocale locale;
qInfo() << "locale:" << locale.name();
const QString resourceTranslationFolder(QStringLiteral(":/vnotex/data/core/translations"));
const QString envTranslationFolder(QStringLiteral("translations"));
// For QTextEdit/QTextBrowser and other basic widgets.
QScopedPointer<QTranslator> qtbaseTranslator(new QTranslator(&p_app));
if (qtbaseTranslator->load(locale, "qtbase", "_", resourceTranslationFolder)) {
if (qtbaseTranslator->load(locale, "qtbase", "_", envTranslationFolder)) {
p_app.installTranslator(qtbaseTranslator.take());
}
// qt_zh_CN.ts does not cover the real QDialogButtonBox which uses QPlatformTheme.
QScopedPointer<QTranslator> dialogButtonBoxTranslator(new QTranslator(&p_app));
if (dialogButtonBoxTranslator->load(locale, "qdialogbuttonbox", "_", resourceTranslationFolder)) {
if (dialogButtonBoxTranslator->load(locale, "qdialogbuttonbox", "_", envTranslationFolder)) {
p_app.installTranslator(dialogButtonBoxTranslator.take());
}
QScopedPointer<QTranslator> webengineTranslator(new QTranslator(&p_app));
if (webengineTranslator->load(locale, "qwebengine", "_", resourceTranslationFolder)) {
if (webengineTranslator->load(locale, "qwebengine", "_", envTranslationFolder)) {
p_app.installTranslator(webengineTranslator.take());
}
// Load translation for Qt from resource.
QScopedPointer<QTranslator> qtTranslator(new QTranslator(&p_app));
if (qtTranslator->load(locale, "qt", "_", resourceTranslationFolder)) {
if (qtTranslator->load(locale, "qtv", "_", envTranslationFolder)) {
p_app.installTranslator(qtTranslator.take());
}
// Load translation for Qt from env.
QScopedPointer<QTranslator> qtEnvTranslator(new QTranslator(&p_app));
if (qtEnvTranslator->load(locale, "qt", "_", envTranslationFolder)) {
p_app.installTranslator(qtEnvTranslator.take());
}
// Load translation for vnote from resource.
QScopedPointer<QTranslator> vnoteTranslator(new QTranslator(&p_app));
if (vnoteTranslator->load(locale, "vnote", "_", resourceTranslationFolder)) {
if (vnoteTranslator->load(locale, "vnote", "_", envTranslationFolder)) {
p_app.installTranslator(vnoteTranslator.take());
}
// Load translation for vtextedit from resource.
QScopedPointer<QTranslator> vtexteditTranslator(new QTranslator(&p_app));
if (vtexteditTranslator->load(locale, "vtextedit", "_", resourceTranslationFolder)) {
if (vtexteditTranslator->load(locale, "vtextedit", "_", envTranslationFolder)) {
p_app.installTranslator(vtexteditTranslator.take());
}
}