~enso-os/enso-desktop-settings/trunk

« back to all changes in this revision

Viewing changes to cmake/Translations.cmake

  • Committer: Nick Wilkins
  • Date: 2020-06-29 17:40:48 UTC
  • Revision ID: nickawilkins@hotmail.com-20200629174048-kju64gca53xhzspx
update to focal

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Translations.cmake, CMake macros written for Marlin, feel free to re-use them
2
 
include(CMakeParseArguments)
3
 
# be sure that all languages are present
4
 
# Using all usual languages code from https://www.gnu.org/software/gettext/manual/html_node/Language-Codes.html#Language-Codes
5
 
# Rare language codes should be added on-demand.
6
 
set (LANGUAGES_NEEDED aa ab ae af ak am an ar as ast av ay az ba be bg bh bi bm bn bo br bs ca ce ch ckb co cr cs cu cv cy da de dv dz ee el en_AU en_CA en_GB eo es et eu fa ff fi fj fo fr fr_CA fy ga gd gl gn gu gv ha he hi ho hr ht hu hy hz ia id ie ig ii ik io is it iu ja jv ka kg ki kj kk kl km kn ko kr ks ku kv kw ky la lb lg li ln lo lt lu lv mg mh mi mk ml mn mo mr ms mt my na nb nd ne ng nl nn no nr nv ny oc oj om or os pa pi pl ps pt pt_BR qu rm rn ro ru rue rw sa sc sd se sg si sk sl sm sma sn so sq sr ss st su sv sw ta te tg th ti tk tl tn to tr ts tt tw ty ug uk ur uz ve vi vo wa wo xh yi yo za zh zh_CN zh_HK zh_TW zu)
7
 
 
8
 
macro (add_translations_directory NLS_PACKAGE)
9
 
    add_custom_target (i18n ALL COMMENT “Building i18n messages.”)
10
 
    find_program (MSGFMT_EXECUTABLE msgfmt)
11
 
    foreach (LANGUAGE_NEEDED ${LANGUAGES_NEEDED})
12
 
        create_po_file (${LANGUAGE_NEEDED} ${CMAKE_CURRENT_SOURCE_DIR})
13
 
    endforeach (LANGUAGE_NEEDED ${LANGUAGES_NEEDED})
14
 
    # generate .mo from .po
15
 
    file (GLOB PO_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.po)
16
 
    foreach (PO_INPUT ${PO_FILES})
17
 
        get_filename_component (PO_INPUT_BASE ${PO_INPUT} NAME_WE)
18
 
        set (MO_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PO_INPUT_BASE}.mo)
19
 
        add_custom_command (TARGET i18n COMMAND ${MSGFMT_EXECUTABLE} -o ${MO_OUTPUT} ${PO_INPUT})
20
 
 
21
 
        install (FILES ${MO_OUTPUT} DESTINATION
22
 
            share/locale/${PO_INPUT_BASE}/LC_MESSAGES
23
 
            RENAME ${NLS_PACKAGE}.mo)
24
 
    endforeach (PO_INPUT ${PO_FILES})
25
 
endmacro (add_translations_directory)
26
 
 
27
 
# Apply the right default template.
28
 
macro (create_po_file LANGUAGE_NEEDED DIRECTORY)
29
 
    set (FILE ${DIRECTORY}/${LANGUAGE_NEEDED}.po)
30
 
    if (NOT EXISTS ${DIRECTORY}/${LANGUAGE_NEEDED}.po)
31
 
        file (APPEND ${FILE} "msgid \"\"\n")
32
 
        file (APPEND ${FILE} "msgstr \"\"\n")
33
 
        file (APPEND ${FILE} "\"MIME-Version: 1.0\\n\"\n")
34
 
        file (APPEND ${FILE} "\"Content-Type: text/plain; charset=UTF-8\\n\"\n")
35
 
 
36
 
        if ("${LANGUAGE_NEEDED}" STREQUAL "ja"
37
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "vi"
38
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "ko")
39
 
                file (APPEND ${FILE} "\"Plural-Forms: nplurals=2; plural=n == 1 ? 0 : 1;\\n\"\n")
40
 
        elseif ("${LANGUAGE_NEEDED}" STREQUAL "en"
41
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "de"
42
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "nl"
43
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "sv"
44
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "nb"
45
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "nn"
46
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "nb"
47
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "no"
48
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "fo"
49
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "es"
50
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "pt"
51
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "it"
52
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "bg"
53
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "he"
54
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "fi"
55
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "et"
56
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "eo"
57
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "hu"
58
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "tr"
59
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "es")
60
 
                file (APPEND ${FILE} "\"Plural-Forms: nplurals=2; plural=n != 1;\\n\"\n")
61
 
        elseif ("${LANGUAGE_NEEDED}" STREQUAL "fr"
62
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "fr_CA"
63
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "pt_BR")
64
 
                file (APPEND ${FILE} "\"Plural-Forms: nplurals=2; plural=n>1;\\n\"\n")
65
 
        elseif ("${LANGUAGE_NEEDED}" STREQUAL "lv")
66
 
                file (APPEND ${FILE} "\"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\\n\"\n")
67
 
        elseif ("${LANGUAGE_NEEDED}" STREQUAL "ro")
68
 
                file (APPEND ${FILE} "\"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;\\n\"\n")
69
 
        elseif ("${LANGUAGE_NEEDED}" STREQUAL "lt")
70
 
                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")
71
 
        elseif ("${LANGUAGE_NEEDED}" STREQUAL "ru"
72
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "uk"
73
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "be"
74
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "sr"
75
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "hr")
76
 
                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")
77
 
        elseif ("${LANGUAGE_NEEDED}" STREQUAL "cs"
78
 
            OR "${LANGUAGE_NEEDED}" STREQUAL "sk")
79
 
                file (APPEND ${FILE} "\"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\\n\"\n")
80
 
        elseif ("${LANGUAGE_NEEDED}" STREQUAL "pl")
81
 
                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")
82
 
        elseif ("${LANGUAGE_NEEDED}" STREQUAL "sl")
83
 
                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")
84
 
        endif ()
85
 
 
86
 
    endif ()
87
 
endmacro (create_po_file)
88
 
 
89
 
macro (configure_file_translation SOURCE RESULT PO_DIR)
90
 
    find_program (INTLTOOL_MERGE_EXECUTABLE intltool-merge)
91
 
    set(EXTRA_PO_DIR ${PO_DIR}/extra/)
92
 
    get_filename_component(EXTRA_PO_DIR ${EXTRA_PO_DIR} ABSOLUTE)
93
 
 
94
 
    # Intltool can't create a new directory.
95
 
    get_filename_component(RESULT_DIRECTORY ${RESULT} DIRECTORY)
96
 
    file(MAKE_DIRECTORY ${RESULT_DIRECTORY})
97
 
 
98
 
    set (INTLTOOL_FLAG "")
99
 
    if (${SOURCE} MATCHES ".desktop")
100
 
        set (INTLTOOL_FLAG "--desktop-style")
101
 
    elseif (${SOURCE} MATCHES ".gschema")
102
 
        set (INTLTOOL_FLAG "--schemas-style")
103
 
    elseif (${SOURCE} MATCHES ".xml")
104
 
        set (INTLTOOL_FLAG "--xml-style")
105
 
    endif ()
106
 
    execute_process (WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${INTLTOOL_MERGE_EXECUTABLE} --quiet ${INTLTOOL_FLAG} ${EXTRA_PO_DIR} ${SOURCE} ${RESULT})
107
 
endmacro ()
108
 
 
109
 
macro (add_translations_catalog NLS_PACKAGE)
110
 
    cmake_parse_arguments (ARGS "" "" "DESKTOP_FILES;APPDATA_FILES;SCHEMA_FILES" ${ARGN})
111
 
    add_custom_target (pot COMMENT “Building translation catalog.”)
112
 
    find_program (XGETTEXT_EXECUTABLE xgettext)
113
 
    find_program (INTLTOOL_EXTRACT_EXECUTABLE intltool-extract)
114
 
    find_program (MSG_MERGE msgmerge)
115
 
 
116
 
    set(EXTRA_PO_DIR ${CMAKE_CURRENT_SOURCE_DIR}/extra)
117
 
 
118
 
    set(TEMPLATE ${CMAKE_CURRENT_SOURCE_DIR}/${NLS_PACKAGE}.pot)
119
 
    set(EXTRA_TEMPLATE ${EXTRA_PO_DIR}/extra.pot)
120
 
 
121
 
    set(C_SOURCE "")
122
 
    set(VALA_SOURCE "")
123
 
    set(GLADE_SOURCE "")
124
 
 
125
 
    foreach(FILES_INPUT ${ARGN})
126
 
        if((${FILES_INPUT} MATCHES ${CMAKE_SOURCE_DIR}) OR (${FILES_INPUT} MATCHES ${CMAKE_BINARY_DIR}))
127
 
            set(BASE_DIRECTORY ${FILES_INPUT})
128
 
        else ()
129
 
            set(BASE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${FILES_INPUT})
130
 
        endif ()
131
 
 
132
 
        file (GLOB_RECURSE SOURCE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/ ${BASE_DIRECTORY}/*.c)
133
 
        foreach(C_FILE ${SOURCE_FILES})
134
 
            set(C_SOURCE ${C_SOURCE} ${C_FILE})
135
 
        endforeach()
136
 
 
137
 
        file (GLOB_RECURSE SOURCE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/ ${BASE_DIRECTORY}/*.vala)
138
 
        foreach(VALA_FILE ${SOURCE_FILES})
139
 
            set(VALA_SOURCE ${VALA_SOURCE} ${VALA_FILE})
140
 
        endforeach()
141
 
 
142
 
        file (GLOB_RECURSE SOURCE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/ ${BASE_DIRECTORY}/*.ui)
143
 
        foreach(GLADE_FILE ${SOURCE_FILES})
144
 
            set(GLADE_SOURCE ${GLADE_SOURCE} ${GLADE_FILE})
145
 
        endforeach()
146
 
    endforeach()
147
 
 
148
 
    set (XGETTEXT_C_ARGS --add-comments="/" --keyword="_" --keyword="N_" --keyword="C_:1c,2" --keyword="NC_:1c,2" --keyword="ngettext:1,2" --keyword="Q_:1g")
149
 
    set(BASE_XGETTEXT_COMMAND
150
 
        ${XGETTEXT_EXECUTABLE} -d ${NLS_PACKAGE}
151
 
        -o ${TEMPLATE}
152
 
        ${XGETTEXT_C_ARGS} --from-code=UTF-8)
153
 
 
154
 
    set(EXTRA_XGETTEXT_COMMAND
155
 
        ${XGETTEXT_EXECUTABLE} -d extra
156
 
        -o ${EXTRA_TEMPLATE} --no-location --from-code=UTF-8)
157
 
 
158
 
    set (INTLTOOL_EXTRACT_COMMAND
159
 
        ${INTLTOOL_EXTRACT_EXECUTABLE} --local --srcdir=/)
160
 
 
161
 
    set(CONTINUE_FLAG "")
162
 
 
163
 
    IF(NOT "${C_SOURCE}" STREQUAL "")
164
 
        add_custom_command(TARGET pot WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${BASE_XGETTEXT_COMMAND} ${C_SOURCE})
165
 
        set(CONTINUE_FLAG "-j")
166
 
    ENDIF()
167
 
 
168
 
    IF(NOT "${VALA_SOURCE}" STREQUAL "")
169
 
        add_custom_command(TARGET pot WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${BASE_XGETTEXT_COMMAND} ${CONTINUE_FLAG} -LC\# ${VALA_SOURCE})
170
 
        set(CONTINUE_FLAG "-j")
171
 
    ENDIF()
172
 
 
173
 
    IF(NOT "${GLADE_SOURCE}" STREQUAL "")
174
 
        add_custom_command (TARGET pot WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${BASE_XGETTEXT_COMMAND} ${CONTINUE_FLAG} -LGlade ${GLADE_SOURCE})
175
 
    ENDIF()
176
 
    # Then we have to update all the .po files
177
 
    add_custom_target (po COMMENT “Syncing translation files.”)
178
 
    add_dependencies (po pot)
179
 
    file (GLOB PO_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.po)
180
 
    foreach (PO_INPUT ${PO_FILES})
181
 
        get_filename_component (PO_INPUT_BASE ${PO_INPUT} NAME)
182
 
        add_custom_command (TARGET po WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${MSG_MERGE} --update ${PO_INPUT_BASE} ${TEMPLATE} --force-po)
183
 
    endforeach (PO_INPUT ${PO_FILES})
184
 
    
185
 
 
186
 
    # We need to create the directory if one extra content exists.
187
 
    IF((NOT "${ARGS_DESKTOP_FILES}" STREQUAL "") OR (NOT "${ARGS_APPDATA_SOURCE}" STREQUAL "") OR (NOT "${ARGS_SCHEMA_SOURCE}" STREQUAL ""))
188
 
        file(MAKE_DIRECTORY ${EXTRA_PO_DIR})
189
 
        foreach (LANGUAGE_NEEDED ${LANGUAGES_NEEDED})
190
 
            create_po_file (${LANGUAGE_NEEDED} ${EXTRA_PO_DIR})
191
 
        endforeach (LANGUAGE_NEEDED ${LANGUAGES_NEEDED})
192
 
    ENDIF()
193
 
 
194
 
    set(CONTINUE_FLAG "")
195
 
 
196
 
    foreach(DESKTOP_SOURCE ${ARGS_DESKTOP_FILES})
197
 
        get_filename_component(DESKTOP_SOURCE ${DESKTOP_SOURCE} ABSOLUTE)
198
 
        add_custom_command(TARGET pot WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${INTLTOOL_EXTRACT_COMMAND} --type=gettext/keys ${DESKTOP_SOURCE})
199
 
        get_filename_component(DESKTOP_SOURCE_NAME ${DESKTOP_SOURCE} NAME)
200
 
        add_custom_command(TARGET pot WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${EXTRA_XGETTEXT_COMMAND} ${CONTINUE_FLAG} ${XGETTEXT_C_ARGS} ${CMAKE_CURRENT_BINARY_DIR}/tmp/${DESKTOP_SOURCE_NAME}.h)
201
 
        set(CONTINUE_FLAG "-j")
202
 
    endforeach()
203
 
 
204
 
    foreach(APPDATA_SOURCE ${ARGS_APPDATA_FILES})
205
 
        get_filename_component(APPDATA_SOURCE ${APPDATA_SOURCE} ABSOLUTE)
206
 
        add_custom_command(TARGET pot WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${INTLTOOL_EXTRACT_COMMAND} --type=gettext/xml ${APPDATA_SOURCE})
207
 
        get_filename_component(APPDATA_SOURCE_NAME ${APPDATA_SOURCE} NAME)
208
 
        add_custom_command(TARGET pot WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${EXTRA_XGETTEXT_COMMAND} ${CONTINUE_FLAG} ${XGETTEXT_C_ARGS} ${CMAKE_CURRENT_BINARY_DIR}/tmp/${APPDATA_SOURCE_NAME}.h)
209
 
        set(CONTINUE_FLAG "-j")
210
 
    endforeach()
211
 
 
212
 
    foreach(SCHEMA_SOURCE ${ARGS_SCHEMA_FILES})
213
 
        get_filename_component(SCHEMA_SOURCE ${SCHEMA_SOURCE} ABSOLUTE)
214
 
        add_custom_command(TARGET pot WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${INTLTOOL_EXTRACT_COMMAND} --type=gettext/schemas ${SCHEMA_SOURCE})
215
 
        get_filename_component(SCHEMA_SOURCE_NAME ${SCHEMA_SOURCE} NAME)
216
 
        add_custom_command(TARGET pot WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${EXTRA_XGETTEXT_COMMAND} ${CONTINUE_FLAG} ${XGETTEXT_C_ARGS} ${CMAKE_CURRENT_BINARY_DIR}/tmp/${SCHEMA_SOURCE_NAME}.h)
217
 
        set(CONTINUE_FLAG "-j")
218
 
    endforeach()
219
 
 
220
 
    file (GLOB PO_FILES ${EXTRA_PO_DIR}/*.po)
221
 
    foreach (PO_INPUT ${PO_FILES})
222
 
        get_filename_component (PO_INPUT_BASE ${PO_INPUT} NAME)
223
 
        add_custom_command (TARGET po COMMAND WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ${MSG_MERGE} --update ${PO_INPUT_BASE} ${EXTRA_TEMPLATE})
224
 
    endforeach (PO_INPUT ${PO_FILES})
225
 
endmacro ()