commit
15df026d04
|
@ -7,7 +7,7 @@ doc-build/
|
||||||
|
|
||||||
# Generated source files
|
# Generated source files
|
||||||
src/common/scm_rev.cpp
|
src/common/scm_rev.cpp
|
||||||
.travis.descriptor.json
|
dist/english_plurals/generated_en.ts
|
||||||
|
|
||||||
# Project/editor files
|
# Project/editor files
|
||||||
*.swp
|
*.swp
|
||||||
|
|
|
@ -2,7 +2,8 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||||
Comment: It is best to use this file to record copyright information about
|
Comment: It is best to use this file to record copyright information about
|
||||||
generated, binary and third party files
|
generated, binary and third party files
|
||||||
|
|
||||||
Files: dist/icons/controller/*.png
|
Files: dist/english_plurals/*
|
||||||
|
dist/icons/controller/*.png
|
||||||
dist/icons/overlay/*.png
|
dist/icons/overlay/*.png
|
||||||
dist/languages/*
|
dist/languages/*
|
||||||
dist/qt_themes/*/icons/index.theme
|
dist/qt_themes/*/icons/index.theme
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
# English Plurals
|
||||||
|
|
||||||
|
Qt has "Translation Rules for Plurals", small example
|
||||||
|
|
||||||
|
// Take a source line like
|
||||||
|
tr("Building: %n shader(s)", "", i)
|
||||||
|
|
||||||
|
// i = 1:
|
||||||
|
Building: 1 shader
|
||||||
|
// i = 2:
|
||||||
|
Building: 2 shaders
|
||||||
|
|
||||||
|
For yuzu the source language used is English, for all other languages handling of plurals is handled by Qt and the translation collaboration site. Handling plurals in the source language (English) requires special consideration.
|
||||||
|
|
||||||
|
With CMake flag GENERATE_QT_TRANSLATION a generated_en.ts file is created from the source. It ignored by git (`.gitignore` in the project root). It is placed in this directory so that the relative refrences with the source code is correct.
|
||||||
|
|
||||||
|
Having the plurals look nice isn't critical, and automation to use translation collaboration sites may require specifing the project language as "Pirate English", so this has been done manually.
|
||||||
|
|
||||||
|
The en.ts in this directory is taken from a build, edited in Qt Linguist and then committed. As the code is in XML, using the tool is not strictly required.
|
|
@ -0,0 +1,67 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
|
<TS version="2.1" language="en_US" sourcelanguage="en_US">
|
||||||
|
<context>
|
||||||
|
<name>GMainWindow</name>
|
||||||
|
<message numerus="yes">
|
||||||
|
<location filename="../../src/yuzu/main.cpp" line="2322"/>
|
||||||
|
<source>%n file(s) remaining</source>
|
||||||
|
<translation>
|
||||||
|
<numerusform>%n file remaining</numerusform>
|
||||||
|
<numerusform>%n files remaining</numerusform>
|
||||||
|
</translation>
|
||||||
|
</message>
|
||||||
|
<message numerus="yes">
|
||||||
|
<location filename="../../src/yuzu/main.cpp" line="2377"/>
|
||||||
|
<source>%n file(s) were newly installed
|
||||||
|
</source>
|
||||||
|
<translation>
|
||||||
|
<numerusform>%n file was newly installed
|
||||||
|
</numerusform>
|
||||||
|
<numerusform>%n files were newly installed
|
||||||
|
</numerusform>
|
||||||
|
</translation>
|
||||||
|
</message>
|
||||||
|
<message numerus="yes">
|
||||||
|
<location filename="../../src/yuzu/main.cpp" line="2380"/>
|
||||||
|
<source>%n file(s) were overwritten
|
||||||
|
</source>
|
||||||
|
<translation>
|
||||||
|
<numerusform>%n file was overwritten
|
||||||
|
</numerusform>
|
||||||
|
<numerusform>%n were overwritten
|
||||||
|
</numerusform>
|
||||||
|
</translation>
|
||||||
|
</message>
|
||||||
|
<message numerus="yes">
|
||||||
|
<location filename="../../src/yuzu/main.cpp" line="2382"/>
|
||||||
|
<source>%n file(s) failed to install
|
||||||
|
</source>
|
||||||
|
<translation>
|
||||||
|
<numerusform>%n file failed to install
|
||||||
|
</numerusform>
|
||||||
|
<numerusform>%n files failed to install
|
||||||
|
</numerusform>
|
||||||
|
</translation>
|
||||||
|
</message>
|
||||||
|
<message numerus="yes">
|
||||||
|
<location filename="../../src/yuzu/main.cpp" line="3264"/>
|
||||||
|
<source>Building: %n shader(s)</source>
|
||||||
|
<translation>
|
||||||
|
<numerusform>Building: %n shader</numerusform>
|
||||||
|
<numerusform>Building: %n shaders</numerusform>
|
||||||
|
</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>GameListSearchField</name>
|
||||||
|
<message numerus="yes">
|
||||||
|
<location filename="../../src/yuzu/game_list.cpp" line="87"/>
|
||||||
|
<source>%1 of %n result(s)</source>
|
||||||
|
<translation>
|
||||||
|
<numerusform>%1 of %n result</numerusform>
|
||||||
|
<numerusform>%1 of %n results</numerusform>
|
||||||
|
</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
</TS>
|
|
@ -221,6 +221,9 @@ if (ENABLE_QT_TRANSLATION)
|
||||||
# Update source TS file if enabled
|
# Update source TS file if enabled
|
||||||
if (GENERATE_QT_TRANSLATION)
|
if (GENERATE_QT_TRANSLATION)
|
||||||
get_target_property(SRCS yuzu SOURCES)
|
get_target_property(SRCS yuzu SOURCES)
|
||||||
|
# these calls to qt_create_translation also creates a rule to generate en.qm which conflicts with providing english plurals
|
||||||
|
# so we have to set a OUTPUT_LOCATION so that we don't have multiple rules to generate en.qm
|
||||||
|
set_source_files_properties(${YUZU_QT_LANGUAGES}/en.ts PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/translations")
|
||||||
qt_create_translation(QM_FILES
|
qt_create_translation(QM_FILES
|
||||||
${SRCS}
|
${SRCS}
|
||||||
${UIS}
|
${UIS}
|
||||||
|
@ -229,7 +232,13 @@ if (ENABLE_QT_TRANSLATION)
|
||||||
-source-language en_US
|
-source-language en_US
|
||||||
-target-language en_US
|
-target-language en_US
|
||||||
)
|
)
|
||||||
add_custom_target(translation ALL DEPENDS ${YUZU_QT_LANGUAGES}/en.ts)
|
|
||||||
|
# Generate plurals into dist/english_plurals/generated_en.ts so it can be used to revise dist/english_plurals/en.ts
|
||||||
|
set(GENERATED_PLURALS_FILE ${PROJECT_SOURCE_DIR}/dist/english_plurals/generated_en.ts)
|
||||||
|
set_source_files_properties(${GENERATED_PLURALS_FILE} PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/plurals")
|
||||||
|
qt_create_translation(QM_FILES ${SRCS} ${UIS} ${GENERATED_PLURALS_FILE} OPTIONS -pluralonly -source-language en_US -target-language en_US)
|
||||||
|
|
||||||
|
add_custom_target(translation ALL DEPENDS ${YUZU_QT_LANGUAGES}/en.ts ${GENERATED_PLURALS_FILE})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Find all TS files except en.ts
|
# Find all TS files except en.ts
|
||||||
|
@ -239,6 +248,9 @@ if (ENABLE_QT_TRANSLATION)
|
||||||
# Compile TS files to QM files
|
# Compile TS files to QM files
|
||||||
qt_add_translation(LANGUAGES_QM ${LANGUAGES_TS})
|
qt_add_translation(LANGUAGES_QM ${LANGUAGES_TS})
|
||||||
|
|
||||||
|
# Compile english plurals TS file to en.qm
|
||||||
|
qt_add_translation(LANGUAGES_QM ${PROJECT_SOURCE_DIR}/dist/english_plurals/en.ts)
|
||||||
|
|
||||||
# Build a QRC file from the QM file list
|
# Build a QRC file from the QM file list
|
||||||
set(LANGUAGES_QRC ${CMAKE_CURRENT_BINARY_DIR}/languages.qrc)
|
set(LANGUAGES_QRC ${CMAKE_CURRENT_BINARY_DIR}/languages.qrc)
|
||||||
file(WRITE ${LANGUAGES_QRC} "<RCC><qresource prefix=\"languages\">\n")
|
file(WRITE ${LANGUAGES_QRC} "<RCC><qresource prefix=\"languages\">\n")
|
||||||
|
|
|
@ -219,6 +219,7 @@ void ConfigureUi::InitializeLanguageComboBox() {
|
||||||
for (const auto& lang : languages) {
|
for (const auto& lang : languages) {
|
||||||
if (QString::fromLatin1(lang.id) == QStringLiteral("en")) {
|
if (QString::fromLatin1(lang.id) == QStringLiteral("en")) {
|
||||||
ui->language_combobox->addItem(lang.name, QStringLiteral("en"));
|
ui->language_combobox->addItem(lang.name, QStringLiteral("en"));
|
||||||
|
language_files.removeOne(QStringLiteral("en.qm"));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < language_files.size(); ++i) {
|
for (int i = 0; i < language_files.size(); ++i) {
|
||||||
|
|
|
@ -3980,11 +3980,6 @@ void GMainWindow::UpdateUITheme() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void GMainWindow::LoadTranslation() {
|
void GMainWindow::LoadTranslation() {
|
||||||
// If the selected language is English, no need to install any translation
|
|
||||||
if (UISettings::values.language == QStringLiteral("en")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool loaded;
|
bool loaded;
|
||||||
|
|
||||||
if (UISettings::values.language.isEmpty()) {
|
if (UISettings::values.language.isEmpty()) {
|
||||||
|
|
Reference in New Issue