blob: 1f36bb615baaa9e7cd805f5a515f36618a8deb47 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
# Translations.cmake, CMake macros written for Marlin, feel free to re-use them
macro (add_translations_directory NLS_PACKAGE)
add_custom_target (i18n ALL COMMENT “Building i18n messages.”)
find_program (MSGFMT_EXECUTABLE msgfmt)
# be sure that all languages are present
# Using all usual languages code from https://www.gnu.org/software/gettext/manual/html_node/Language-Codes.html#Language-Codes
# Rare language codes should be added on-demand.
file(STRINGS LINGUAS LANGUAGES_NEEDED)
foreach (LANGUAGE_NEEDED ${LANGUAGES_NEEDED})
create_po_file (${LANGUAGE_NEEDED})
endforeach (LANGUAGE_NEEDED ${LANGUAGES_NEEDED})
# generate .mo from .po
file (GLOB PO_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.po)
foreach (PO_INPUT ${PO_FILES})
get_filename_component (PO_INPUT_BASE ${PO_INPUT} NAME_WE)
set (MO_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PO_INPUT_BASE}.mo)
set (PO_COPY ${CMAKE_CURRENT_BINARY_DIR}/${PO_INPUT_BASE}.po)
file (COPY ${PO_INPUT} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
add_custom_command (TARGET i18n COMMAND ${MSGFMT_EXECUTABLE} -o ${MO_OUTPUT} ${PO_INPUT})
install (FILES ${MO_OUTPUT} DESTINATION
share/locale/${PO_INPUT_BASE}/LC_MESSAGES
RENAME ${NLS_PACKAGE}.mo
COMPONENT ${ARGV1})
endforeach (PO_INPUT ${PO_FILES})
endmacro (add_translations_directory)
# Apply the right default template.
macro (create_po_file LANGUAGE_NEEDED)
set (FILE ${CMAKE_CURRENT_SOURCE_DIR}/${LANGUAGE_NEEDED}.po)
if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LANGUAGE_NEEDED}.po)
file (APPEND ${FILE} "msgid \"\"\n")
file (APPEND ${FILE} "msgstr \"\"\n")
file (APPEND ${FILE} "\"MIME-Version: 1.0\\n\"\n")
file (APPEND ${FILE} "\"Content-Type: text/plain; charset=UTF-8\\n\"\n")
if ("${LANGUAGE_NEEDED}" STREQUAL "ja"
OR "${LANGUAGE_NEEDED}" STREQUAL "vi"
OR "${LANGUAGE_NEEDED}" STREQUAL "ko")
file (APPEND ${FILE} "\"Plural-Forms: nplurals=2; plural=n == 1 ? 0 : 1;\\n\"\n")
elseif ("${LANGUAGE_NEEDED}" STREQUAL "en"
OR "${LANGUAGE_NEEDED}" STREQUAL "de"
OR "${LANGUAGE_NEEDED}" STREQUAL "nl"
OR "${LANGUAGE_NEEDED}" STREQUAL "sv"
OR "${LANGUAGE_NEEDED}" STREQUAL "nb"
OR "${LANGUAGE_NEEDED}" STREQUAL "nn"
OR "${LANGUAGE_NEEDED}" STREQUAL "nb"
OR "${LANGUAGE_NEEDED}" STREQUAL "no"
OR "${LANGUAGE_NEEDED}" STREQUAL "fo"
OR "${LANGUAGE_NEEDED}" STREQUAL "es"
OR "${LANGUAGE_NEEDED}" STREQUAL "pt"
OR "${LANGUAGE_NEEDED}" STREQUAL "it"
OR "${LANGUAGE_NEEDED}" STREQUAL "bg"
OR "${LANGUAGE_NEEDED}" STREQUAL "he"
OR "${LANGUAGE_NEEDED}" STREQUAL "fi"
OR "${LANGUAGE_NEEDED}" STREQUAL "et"
OR "${LANGUAGE_NEEDED}" STREQUAL "eo"
OR "${LANGUAGE_NEEDED}" STREQUAL "hu"
OR "${LANGUAGE_NEEDED}" STREQUAL "tr"
OR "${LANGUAGE_NEEDED}" STREQUAL "es")
file (APPEND ${FILE} "\"Plural-Forms: nplurals=2; plural=n != 1;\\n\"\n")
elseif ("${LANGUAGE_NEEDED}" STREQUAL "fr"
OR "${LANGUAGE_NEEDED}" STREQUAL "fr_CA"
OR "${LANGUAGE_NEEDED}" STREQUAL "pt_BR")
file (APPEND ${FILE} "\"Plural-Forms: nplurals=2; plural=n>1;\\n\"\n")
elseif ("${LANGUAGE_NEEDED}" STREQUAL "lv")
file (APPEND ${FILE} "\"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\\n\"\n")
elseif ("${LANGUAGE_NEEDED}" STREQUAL "ro")
file (APPEND ${FILE} "\"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;\\n\"\n")
elseif ("${LANGUAGE_NEEDED}" STREQUAL "lt")
file (APPEND ${FILE} "\"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2;\\n\"\n")
elseif ("${LANGUAGE_NEEDED}" STREQUAL "ru"
OR "${LANGUAGE_NEEDED}" STREQUAL "uk"
OR "${LANGUAGE_NEEDED}" STREQUAL "be"
OR "${LANGUAGE_NEEDED}" STREQUAL "sr"
OR "${LANGUAGE_NEEDED}" STREQUAL "hr")
file (APPEND ${FILE} "\"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\\n\"\n")
elseif ("${LANGUAGE_NEEDED}" STREQUAL "cs"
OR "${LANGUAGE_NEEDED}" STREQUAL "sk")
file (APPEND ${FILE} "\"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\\n\"\n")
elseif ("${LANGUAGE_NEEDED}" STREQUAL "pl")
file (APPEND ${FILE} "\"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\\n\"\n")
elseif ("${LANGUAGE_NEEDED}" STREQUAL "sl")
file (APPEND ${FILE} "\"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\\n\"\n")
endif ()
endif ()
endmacro (create_po_file)
macro (add_translations_catalog NLS_PACKAGE)
add_custom_target (pot COMMENT “Building translation catalog.”)
find_program (XGETTEXT_EXECUTABLE xgettext)
set(C_SOURCE "")
foreach(FILES_INPUT ${ARGN})
set(BASE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${FILES_INPUT})
file (GLOB_RECURSE SOURCE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/ ${BASE_DIRECTORY}/*.c)
foreach(C_FILE ${SOURCE_FILES})
set(C_SOURCE ${C_SOURCE} ${C_FILE})
endforeach()
endforeach()
set(BASE_XGETTEXT_COMMAND
${XGETTEXT_EXECUTABLE} -d ${NLS_PACKAGE}
-o ${CMAKE_CURRENT_SOURCE_DIR}/${NLS_PACKAGE}.pot
--add-comments="/" --keyword="_" --keyword="N_" --keyword="C_:1c,2" --keyword="NC_:1c,2" --keyword="ngettext:1,2" --keyword="Q_:1g" --from-code=UTF-8)
set(CONTINUE_FLAG "")
IF(NOT "${C_SOURCE}" STREQUAL "")
add_custom_command(TARGET pot WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${BASE_XGETTEXT_COMMAND} ${C_SOURCE})
set(CONTINUE_FLAG "-j")
ENDIF()
endmacro ()
|