~jeremywootten/pantheon-files/vala-icon-renderer

« back to all changes in this revision

Viewing changes to cmake/Translations.cmake

  • Committer: Jeremy Wootten
  • Date: 2016-09-18 15:48:52 UTC
  • mfrom: (2229.1.2 vala-clipboard-manager)
  • Revision ID: jeremy@elementaryos.org-20160918154852-3bga4wv1ohijir6z
Merge updates from vala-clipboard-manager

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# Translations.cmake, CMake macros written for Marlin, feel free to re-use them
 
2
include(CMakeParseArguments)
2
3
 
3
 
macro(add_translations_directory NLS_PACKAGE)
 
4
macro (add_translations_directory NLS_PACKAGE)
4
5
    add_custom_target (i18n ALL COMMENT “Building i18n messages.”)
5
6
    find_program (MSGFMT_EXECUTABLE msgfmt)
6
7
    # be sure that all languages are present
7
 
    set (LANGUAGES_NEEDED af am ar ast az be bg bn bs ca ckb cs da de el en_AU en_CA en_GB eo es et eu fa fi fr fr_CA gl he hi hr hu hy id it ja ka ko ky lb lo lt lv ml mr ms nb nl nn pl pt pt_BR ro ru rue si sk sl sma sq sr sv sw ta te th tr uk vi zh_CN zh_HK zh_TW)
 
8
    # Using all usual languages code from https://www.gnu.org/software/gettext/manual/html_node/Language-Codes.html#Language-Codes
 
9
    # Rare language codes should be added on-demand.
 
10
    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)
8
11
    foreach (LANGUAGE_NEEDED ${LANGUAGES_NEEDED})
9
 
        if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LANGUAGE_NEEDED}.po)
10
 
            file (APPEND ${CMAKE_CURRENT_SOURCE_DIR}/${LANGUAGE_NEEDED}.po "msgid \"\"\n")
11
 
            file (APPEND ${CMAKE_CURRENT_SOURCE_DIR}/${LANGUAGE_NEEDED}.po "msgstr \"\"\n")
12
 
            file (APPEND ${CMAKE_CURRENT_SOURCE_DIR}/${LANGUAGE_NEEDED}.po "\"MIME-Version: 1.0\\n\"\n")
13
 
            file (APPEND ${CMAKE_CURRENT_SOURCE_DIR}/${LANGUAGE_NEEDED}.po "\"Content-Type: text/plain; charset=UTF-8\\n\"\n")
14
 
        endif ()
 
12
        create_po_file (${LANGUAGE_NEEDED})
15
13
    endforeach (LANGUAGE_NEEDED ${LANGUAGES_NEEDED})
16
14
    # generate .mo from .po
17
15
    file (GLOB PO_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.po)
24
22
            share/locale/${PO_INPUT_BASE}/LC_MESSAGES
25
23
            RENAME ${NLS_PACKAGE}.mo)
26
24
    endforeach (PO_INPUT ${PO_FILES})
27
 
endmacro(add_translations_directory)
28
 
 
29
 
macro(add_translations_catalog NLS_PACKAGE)
 
25
endmacro (add_translations_directory)
 
26
 
 
27
# Apply the right default template.
 
28
macro (create_po_file LANGUAGE_NEEDED)
 
29
    set (FILE ${CMAKE_CURRENT_SOURCE_DIR}/${LANGUAGE_NEEDED}.po)
 
30
    if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${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})
30
111
    add_custom_target (pot COMMENT “Building translation catalog.”)
31
112
    find_program (XGETTEXT_EXECUTABLE xgettext)
 
113
    find_program (INTLTOOL_EXTRACT_EXECUTABLE intltool-extract)
 
114
 
 
115
    set(EXTRA_PO_DIR ${CMAKE_CURRENT_SOURCE_DIR}/extra)
32
116
 
33
117
    set(C_SOURCE "")
34
118
    set(VALA_SOURCE "")
35
119
    set(GLADE_SOURCE "")
36
120
 
37
121
    foreach(FILES_INPUT ${ARGN})
38
 
        set(BASE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${FILES_INPUT})
 
122
        if((${FILES_INPUT} MATCHES ${CMAKE_SOURCE_DIR}) OR (${FILES_INPUT} MATCHES ${CMAKE_BINARY_DIR}))
 
123
            set(BASE_DIRECTORY ${FILES_INPUT})
 
124
        else ()
 
125
            set(BASE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${FILES_INPUT})
 
126
        endif ()
39
127
 
40
128
        file (GLOB_RECURSE SOURCE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/ ${BASE_DIRECTORY}/*.c)
41
129
        foreach(C_FILE ${SOURCE_FILES})
43
131
        endforeach()
44
132
 
45
133
        file (GLOB_RECURSE SOURCE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/ ${BASE_DIRECTORY}/*.vala)
46
 
        foreach(VALA_C_FILE ${SOURCE_FILES})
47
 
            set(VALA_SOURCE ${VALA_SOURCE} ${VALA_C_FILE})
 
134
        foreach(VALA_FILE ${SOURCE_FILES})
 
135
            set(VALA_SOURCE ${VALA_SOURCE} ${VALA_FILE})
48
136
        endforeach()
49
137
 
50
138
        file (GLOB_RECURSE SOURCE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/ ${BASE_DIRECTORY}/*.ui)
51
 
        foreach(GLADE_C_FILE ${SOURCE_FILES})
52
 
            set(GLADE_SOURCE ${GLADE_SOURCE} ${GLADE_C_FILE})
 
139
        foreach(GLADE_FILE ${SOURCE_FILES})
 
140
            set(GLADE_SOURCE ${GLADE_SOURCE} ${GLADE_FILE})
53
141
        endforeach()
54
142
    endforeach()
55
143
 
 
144
    set (XGETTEXT_C_ARGS --add-comments="/" --keyword="_" --keyword="N_" --keyword="C_:1c,2" --keyword="NC_:1c,2" --keyword="ngettext:1,2" --keyword="Q_:1g")
56
145
    set(BASE_XGETTEXT_COMMAND
57
146
        ${XGETTEXT_EXECUTABLE} -d ${NLS_PACKAGE}
58
147
        -o ${CMAKE_CURRENT_SOURCE_DIR}/${NLS_PACKAGE}.pot
59
 
        --add-comments="/" --keyword="_" --keyword="N_" --keyword="C_:1c,2" --keyword="NC_:1c,2" --keyword="ngettext:1,2" --keyword="Q_:1g" --from-code=UTF-8)
60
 
 
61
 
   set(CONTINUE_FLAG "")
 
148
        ${XGETTEXT_C_ARGS} --from-code=UTF-8)
 
149
 
 
150
    set(EXTRA_XGETTEXT_COMMAND
 
151
        ${XGETTEXT_EXECUTABLE} -d extra
 
152
        -o ${EXTRA_PO_DIR}/extra.pot --no-location --from-code=UTF-8)
 
153
 
 
154
    set (INTLTOOL_EXTRACT_COMMAND
 
155
        ${INTLTOOL_EXTRACT_EXECUTABLE} --local --srcdir=/)
 
156
 
 
157
    set(CONTINUE_FLAG "")
62
158
 
63
159
    IF(NOT "${C_SOURCE}" STREQUAL "")
64
160
        add_custom_command(TARGET pot WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${BASE_XGETTEXT_COMMAND} ${C_SOURCE})
72
168
 
73
169
    IF(NOT "${GLADE_SOURCE}" STREQUAL "")
74
170
        add_custom_command (TARGET pot WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${BASE_XGETTEXT_COMMAND} ${CONTINUE_FLAG} -LGlade ${GLADE_SOURCE})
75
 
    ENDIF()  
76
 
endmacro()
 
 
b'\\ No newline at end of file'
 
171
    ENDIF()
 
172
 
 
173
    # We need to create the directory if one extra content exists.
 
174
    IF((NOT "${ARGS_DESKTOP_FILES}" STREQUAL "") OR (NOT "${ARGS_APPDATA_SOURCE}" STREQUAL "") OR (NOT "${ARGS_SCHEMA_SOURCE}" STREQUAL ""))
 
175
        file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/extra/)
 
176
    ENDIF()
 
177
 
 
178
    set(CONTINUE_FLAG "")
 
179
 
 
180
    foreach(DESKTOP_SOURCE ${ARGS_DESKTOP_FILES})
 
181
        get_filename_component(DESKTOP_SOURCE ${DESKTOP_SOURCE} ABSOLUTE)
 
182
        add_custom_command(TARGET pot WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${INTLTOOL_EXTRACT_COMMAND} --type=gettext/keys ${DESKTOP_SOURCE})
 
183
        get_filename_component(DESKTOP_SOURCE_NAME ${DESKTOP_SOURCE} NAME)
 
184
        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)
 
185
        set(CONTINUE_FLAG "-j")
 
186
    endforeach()
 
187
 
 
188
    foreach(APPDATA_SOURCE ${ARGS_APPDATA_FILES})
 
189
        get_filename_component(APPDATA_SOURCE ${APPDATA_SOURCE} ABSOLUTE)
 
190
        add_custom_command(TARGET pot WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${INTLTOOL_EXTRACT_COMMAND} --type=gettext/xml ${APPDATA_SOURCE})
 
191
        get_filename_component(APPDATA_SOURCE_NAME ${APPDATA_SOURCE} NAME)
 
192
        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)
 
193
        set(CONTINUE_FLAG "-j")
 
194
    endforeach()
 
195
 
 
196
    foreach(SCHEMA_SOURCE ${ARGS_SCHEMA_FILES})
 
197
        get_filename_component(SCHEMA_SOURCE ${SCHEMA_SOURCE} ABSOLUTE)
 
198
        add_custom_command(TARGET pot WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${INTLTOOL_EXTRACT_COMMAND} --type=gettext/schemas ${SCHEMA_SOURCE})
 
199
        get_filename_component(SCHEMA_SOURCE_NAME ${SCHEMA_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/${SCHEMA_SOURCE_NAME}.h)
 
201
        set(CONTINUE_FLAG "-j")
 
202
    endforeach()
 
203
endmacro ()