[evolution-data-server/tintou/no-intltools] M!78: Remove dependency on intltools




commit d0b00a3db0f87cdf35d71305e3dbc176c3718104
Author: Corentin Noël <corentin noel collabora com>
Date:   Mon Sep 20 17:01:49 2021 +0200

    M!78: Remove dependency on intltools
    
    Add the I18n CMake module to merge files.
    
    Signed-off-by: Corentin Noël <corentin noel collabora com>
    
    Closes https://gitlab.gnome.org/GNOME/evolution-data-server/-/merge_requests/78

 CMakeLists.txt                                     |   3 +-
 cmake/modules/FindIntltool.cmake                   | 214 ---------------------
 cmake/modules/I18n.cmake                           |  26 +++
 data/CMakeLists.txt                                |   4 +-
 .../org.gnome.Evolution-alarm-notify.desktop.in.in |   4 +-
 ...volution-data-server.addressbook.gschema.xml.in |   2 +-
 ...e.evolution-data-server.calendar.gschema.xml.in |  46 ++---
 .../org.gnome.evolution-data-server.gschema.xml.in |  60 +++---
 ...e.evolution.shell.network-config.gschema.xml.in |  52 ++---
 po/CMakeLists.txt                                  |  72 ++++++-
 po/LINGUAS                                         |  88 +++++++++
 po/POTFILES.in                                     |  19 --
 po/POTFILES.source.in                              |  18 ++
 .../evolution-source-registry/CMakeLists.txt       |   7 +-
 .../builtin/birthdays.source.in                    |   2 +-
 .../builtin/caldav-stub.source.in                  |   2 +-
 .../builtin/carddav-stub.source.in                 |   2 +-
 .../builtin/contacts-stub.source.in                |   2 +-
 .../builtin/google-stub.source.in                  |   2 +-
 .../builtin/ldap-stub.source.in                    |   2 +-
 .../builtin/local-stub.source.in                   |   2 +-
 .../builtin/local.source.in                        |   2 +-
 .../builtin/sendmail.source.in                     |   2 +-
 .../builtin/system-address-book.source.in          |   2 +-
 .../builtin/system-calendar.source.in              |   2 +-
 .../builtin/system-memo-list.source.in             |   2 +-
 .../builtin/system-proxy.source.in                 |   2 +-
 .../builtin/system-task-list.source.in             |   2 +-
 .../builtin/vfolder.source.in                      |   2 +-
 .../builtin/weather-stub.source.in                 |   2 +-
 .../builtin/webcal-stub.source.in                  |   2 +-
 .../builtin/webdav-notes-stub.source.in            |   2 +-
 32 files changed, 313 insertions(+), 338 deletions(-)
---
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0946d7371..6358035bf 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -274,7 +274,8 @@ include(PkgConfigEx)
 include(SetupBuildFlags)
 include(UninstallTarget)
 
-include(FindIntltool)
+include(FindGettext)
+include(I18n)
 include(FindKRB5)
 include(FindLDAP)
 include(FindPhonenumber)
diff --git a/cmake/modules/I18n.cmake b/cmake/modules/I18n.cmake
new file mode 100644
index 000000000..ae9d5a9af
--- /dev/null
+++ b/cmake/modules/I18n.cmake
@@ -0,0 +1,26 @@
+# I18n.cmake
+#
+# Macros to easily use Gettext translations capabilities
+#
+
+include(FindGettext)
+include(CMakeParseArguments)
+
+macro(i18n_merge_file _source _target _po_dir)
+       cmake_parse_arguments(_I18N "" "TYPE" "EXTRA_ARGS" ${ARGN})
+       if (NOT DEFINED _I18N_TYPE)
+               set(_I18N_TYPE "desktop")
+       elseif(NOT ((${_I18N_TYPE} STREQUAL "desktop") OR (${_I18N_TYPE} STREQUAL "xml")))
+               message(FATAL_ERROR "Wrong type supplied, only 'desktop' and 'xml' are allowed, given: 
'${_I18N_TYPE}'")
+       endif()
+       add_custom_command(
+               OUTPUT ${_target}
+               DEPENDS ${_source}
+               COMMAND ${GETTEXT_MSGFMT_EXECUTABLE}
+                       --${_I18N_TYPE}
+                       --template=${_source}
+                       -d ${_po_dir}
+                       -o ${_target}
+                       ${_I18N_EXTRA_ARGS}
+       )
+endmacro(i18n_merge_file)
diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt
index a366a9568..de24e1946 100644
--- a/data/CMakeLists.txt
+++ b/data/CMakeLists.txt
@@ -10,7 +10,7 @@ configure_file(org.gnome.Evolution-alarm-notify.desktop.in.in
        @ONLY
 )
 
-intltool_merge(${CMAKE_CURRENT_BINARY_DIR}/org.gnome.Evolution-alarm-notify.desktop.in 
org.gnome.Evolution-alarm-notify.desktop --desktop-style --utf8)
+i18n_merge_file(${CMAKE_CURRENT_BINARY_DIR}/org.gnome.Evolution-alarm-notify.desktop.in 
org.gnome.Evolution-alarm-notify.desktop ${CMAKE_SOURCE_DIR}/po)
 
 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/org.gnome.Evolution-alarm-notify.desktop
        DESTINATION ${autostartdir}
@@ -36,7 +36,7 @@ set(SCHEMAS
 
 set(BUILT_SCHEMAS)
 foreach(_schema IN LISTS SCHEMAS)
-       intltool_merge(${_schema}.in ${_schema} --no-translations --xml-style --utf8)
+       configure_file(${_schema}.in ${_schema} COPYONLY)
        list(APPEND BUILT_SCHEMAS ${CMAKE_CURRENT_BINARY_DIR}/${_schema})
 endforeach(_schema)
 
diff --git a/data/org.gnome.Evolution-alarm-notify.desktop.in.in 
b/data/org.gnome.Evolution-alarm-notify.desktop.in.in
index e49d037fd..e83d2f67e 100644
--- a/data/org.gnome.Evolution-alarm-notify.desktop.in.in
+++ b/data/org.gnome.Evolution-alarm-notify.desktop.in.in
@@ -1,7 +1,7 @@
 [Desktop Entry]
 Type=Application
-_Name=Evolution Alarm Notify
-_Comment=Calendar event notifications
+Name=Evolution Alarm Notify
+Comment=Calendar event notifications
 Icon=appointment-soon
 Exec=@privlibexecdir@/evolution-alarm-notify
 Terminal=false
diff --git a/data/org.gnome.evolution-data-server.addressbook.gschema.xml.in 
b/data/org.gnome.evolution-data-server.addressbook.gschema.xml.in
index f010d318e..0aa5bb048 100644
--- a/data/org.gnome.evolution-data-server.addressbook.gschema.xml.in
+++ b/data/org.gnome.evolution-data-server.addressbook.gschema.xml.in
@@ -2,7 +2,7 @@
   <schema gettext-domain="evolution-data-server" id="org.gnome.evolution-data-server.addressbook" 
path="/org/gnome/evolution-data-server/addressbook/">
     <key name="self-contact-uid" type="s">
       <default>''</default>
-      <_summary>Contact UID of a user</_summary>
+      <summary>Contact UID of a user</summary>
     </key>
   </schema>
 </schemalist>
diff --git a/data/org.gnome.evolution-data-server.calendar.gschema.xml.in 
b/data/org.gnome.evolution-data-server.calendar.gschema.xml.in
index f6c9ecd66..ee153d5a5 100644
--- a/data/org.gnome.evolution-data-server.calendar.gschema.xml.in
+++ b/data/org.gnome.evolution-data-server.calendar.gschema.xml.in
@@ -10,79 +10,79 @@
 
     <key name="contacts-reminder-enabled" type="b">
       <default>false</default>
-      <_summary>Birthday and anniversary reminder</_summary>
-      <_description>Whether to set a reminder for birthdays and anniversaries</_description>
+      <summary>Birthday and anniversary reminder</summary>
+      <description>Whether to set a reminder for birthdays and anniversaries</description>
     </key>
     <key name="contacts-reminder-interval" type="i">
       <default>15</default>
-      <_summary>Birthday and anniversary reminder value</_summary>
-      <_description>Number of units for determining a birthday or anniversary reminder</_description>
+      <summary>Birthday and anniversary reminder value</summary>
+      <description>Number of units for determining a birthday or anniversary reminder</description>
     </key>
     <key name="contacts-reminder-units" enum='org.gnome.evolution-data-server.calendar.Duration'>
       <default>'minutes'</default>
-      <_summary>Birthday and anniversary reminder units</_summary>
-      <_description>Units for a birthday or anniversary reminder, “minutes”, “hours” or “days”</_description>
+      <summary>Birthday and anniversary reminder units</summary>
+      <description>Units for a birthday or anniversary reminder, “minutes”, “hours” or “days”</description>
     </key>
 
     <key name="reminders-past" type="as">
       <default>['']</default>
-      <_summary>Past reminders for EReminderWatcher</_summary>
+      <summary>Past reminders for EReminderWatcher</summary>
     </key>
     <key name="reminders-snoozed" type="as">
       <default>['']</default>
-      <_summary>Snoozed reminders for EReminderWatcher</_summary>
+      <summary>Snoozed reminders for EReminderWatcher</summary>
     </key>
 
     <key name="notify-programs" type="as">
       <default>[]</default>
-      <_summary>Reminder programs</_summary>
-      <_description>Programs that are allowed to be run by reminders</_description>
+      <summary>Reminder programs</summary>
+      <description>Programs that are allowed to be run by reminders</description>
     </key>
     <key name="notify-with-tray" type="b">
       <default>true</default>
-      <_summary>Show reminders in notification tray only</_summary>
-      <_description>When set to true, the reminders are shown only in the notification tray, otherwise the 
reminders dialog is shown immediately</_description>
+      <summary>Show reminders in notification tray only</summary>
+      <description>When set to true, the reminders are shown only in the notification tray, otherwise the 
reminders dialog is shown immediately</description>
     </key>
     <key name="notify-window-on-top" type="b">
       <default>true</default>
-      <_summary>Show reminder notification dialog always on top</_summary>
-      <_description>Whether or not to show reminder notification dialog always on top. Note this works only 
as a hint for the window manager, which may or may not obey it.</_description>
+      <summary>Show reminder notification dialog always on top</summary>
+      <description>Whether or not to show reminder notification dialog always on top. Note this works only 
as a hint for the window manager, which may or may not obey it.</description>
     </key>
     <key name="notify-window-x" type="i">
       <default>-1</default>
-      <_summary>X position of the reminder notification dialog</_summary>
+      <summary>X position of the reminder notification dialog</summary>
     </key>
     <key name="notify-window-y" type="i">
       <default>-1</default>
-      <_summary>Y position of the reminder notification dialog</_summary>
+      <summary>Y position of the reminder notification dialog</summary>
     </key>
     <key name="notify-window-width" type="i">
       <default>-1</default>
-      <_summary>Width of the reminder notification dialog</_summary>
+      <summary>Width of the reminder notification dialog</summary>
     </key>
     <key name="notify-window-height" type="i">
       <default>-1</default>
-      <_summary>Height of the reminder notification dialog</_summary>
+      <summary>Height of the reminder notification dialog</summary>
     </key>
     <key name="notify-window-paned-position" type="i">
       <default>-1</default>
-      <_summary>Size in pixels of the event list in the reminder notification dialog</_summary>
+      <summary>Size in pixels of the event list in the reminder notification dialog</summary>
     </key>
     <key name="notify-completed-tasks" type="b">
       <default>true</default>
-      <_summary>Show reminder notification for completed tasks</_summary>
+      <summary>Show reminder notification for completed tasks</summary>
     </key>
     <key name="notify-past-events" type="b">
       <default>false</default>
-      <_summary>Show reminder notification for past events</_summary>
+      <summary>Show reminder notification for past events</summary>
     </key>
     <key name="notify-last-snooze-minutes" type="i">
       <default>5</default>
-      <_summary>The last used snooze time, in minutes</_summary>
+      <summary>The last used snooze time, in minutes</summary>
     </key>
     <key name="notify-custom-snooze-minutes" type="ai">
       <default>[]</default>
-      <_summary>User-defined snooze times, in minutes</_summary>
+      <summary>User-defined snooze times, in minutes</summary>
     </key>
   </schema>
 </schemalist>
diff --git a/data/org.gnome.evolution-data-server.gschema.xml.in 
b/data/org.gnome.evolution-data-server.gschema.xml.in
index b6a0cbea8..bc630332a 100644
--- a/data/org.gnome.evolution-data-server.gschema.xml.in
+++ b/data/org.gnome.evolution-data-server.gschema.xml.in
@@ -2,47 +2,47 @@
   <schema gettext-domain="evolution-data-server" id="org.gnome.evolution-data-server" 
path="/org/gnome/evolution-data-server/">
     <key name="migrated" type="b">
       <default>false</default>
-      <_summary>Whether the migration of old setting was already done</_summary>
+      <summary>Whether the migration of old setting was already done</summary>
     </key>
     <key name="camel-gpg-binary" type="s">
       <default>''</default>
-      <_summary>An absolute path where the gpg (or gpg2) binary is</_summary>
-      <_description>An example is “/usr/bin/gpg”; when it is left empty, or an incorrect value is set, then 
it will be searched for. Change requires restart of the application.</_description>
+      <summary>An absolute path where the gpg (or gpg2) binary is</summary>
+      <description>An example is “/usr/bin/gpg”; when it is left empty, or an incorrect value is set, then 
it will be searched for. Change requires restart of the application.</description>
     </key>
     <key name="camel-cipher-load-photos" type="b">
       <default>true</default>
-      <_summary>Whether to load photos of signers/encrypters</_summary>
-      <_description>When set to “true”, tries to load also photo of the signers/encrypters, if available in 
the key/certificate.</_description>
+      <summary>Whether to load photos of signers/encrypters</summary>
+      <description>When set to “true”, tries to load also photo of the signers/encrypters, if available in 
the key/certificate.</description>
     </key>
     <key name="camel-smtp-helo-argument" type="s">
       <default>''</default>
-      <_summary>Override SMTP HELO/EHLO argument</_summary>
-      <_description>When not empty, it's used as the SMTP HELO/EHLO argument, instead of the local host 
name/IP.</_description>
+      <summary>Override SMTP HELO/EHLO argument</summary>
+      <description>When not empty, it's used as the SMTP HELO/EHLO argument, instead of the local host 
name/IP.</description>
     </key>
     <key name="camel-message-info-user-headers" type="as">
       <default>[]</default>
-      <_summary>Array of user header names</_summary>
-      <_description>These headers can be stored in the folder summary, possibly being visible in the GUI. 
The value can contain a pipe character ('|'), which delimits the display name from the header name. Example: 
'Spam Score|X-Spam-Score'</_description>
+      <summary>Array of user header names</summary>
+      <description>These headers can be stored in the folder summary, possibly being visible in the GUI. The 
value can contain a pipe character ('|'), which delimits the display name from the header name. Example: 
'Spam Score|X-Spam-Score'</description>
     </key>
     <key name="network-monitor-gio-name" type="s">
       <default>''</default>
-      <_summary>GIO name of the GNetworkMonitor to use for an ENetworkMonitor instance</_summary>
-      <_description>When set to an unknown value, then the default GNetworkMonitor is used in the 
background. A special value “always-online” is used for no network monitoring.</_description>
+      <summary>GIO name of the GNetworkMonitor to use for an ENetworkMonitor instance</summary>
+      <description>When set to an unknown value, then the default GNetworkMonitor is used in the background. 
A special value “always-online” is used for no network monitoring.</description>
     </key>
     <key name="autoconfig-directory" type="s">
       <default>''</default>
-      <_summary>A full path to a directory where .source files with preconfigured options can be 
stored</_summary>
-      <_description>This directory, if filled with an existing path, is checked additionally to XDG 
configure directories.</_description>
+      <summary>A full path to a directory where .source files with preconfigured options can be 
stored</summary>
+      <description>This directory, if filled with an existing path, is checked additionally to XDG configure 
directories.</description>
     </key>
     <key name="autoconfig-variables" type="as">
       <default>['']</default>
-      <_summary>A list of variables which can be part of the autoconfig .source files</_summary>
-      <_description>Each item of the array is expected to be of the form: name=value. These variables are 
checked before environment variables, but after the predefined USER, REALNAME and HOST 
variables.</_description>
+      <summary>A list of variables which can be part of the autoconfig .source files</summary>
+      <description>Each item of the array is expected to be of the form: name=value. These variables are 
checked before environment variables, but after the predefined USER, REALNAME and HOST 
variables.</description>
     </key>
     <key name="oauth2-services-hint" type="as">
       <default>['']</default>
-      <_summary>A list of hints for OAuth2 services</_summary>
-      <_description>Users can extend the list of supported protocols and hostnames for defined OAuth2 
services, in addition to those hard-coded.
+      <summary>A list of hints for OAuth2 services</summary>
+      <description>Users can extend the list of supported protocols and hostnames for defined OAuth2 
services, in addition to those hard-coded.
       Each line can be of the form:
          servicename[-protocol]:hostname1,hostname2,...
       where “servicename” is the actual service name;
@@ -54,37 +54,37 @@
 
       Examples:
          Company:mail.company.com — enables “Company” OAuth2 authentication for “mail.company.com” host
-        Company-CalDAV:caldav.company.com — enables “Company” OAuth2 authentication for any “CalDAV” source, 
which reads data from “caldav.company.com” host</_description>
+        Company-CalDAV:caldav.company.com — enables “Company” OAuth2 authentication for any “CalDAV” source, 
which reads data from “caldav.company.com” host</description>
     </key>
     <key name="oauth2-google-client-id" type="s">
       <default>''</default>
-      <_summary>An OAuth2 client ID to use to connect to Google servers, instead of the one provided during 
build time</_summary>
-      <_description>User-specified OAuth2 client ID for Google servers. Empty string means to use the one 
provided during build time. Change of this requires restart.</_description>
+      <summary>An OAuth2 client ID to use to connect to Google servers, instead of the one provided during 
build time</summary>
+      <description>User-specified OAuth2 client ID for Google servers. Empty string means to use the one 
provided during build time. Change of this requires restart.</description>
     </key>
     <key name="oauth2-google-client-secret" type="s">
       <default>''</default>
-      <_summary>An OAuth2 client secret to use to connect to Google servers, instead of the one provided 
during build time</_summary>
-      <_description>User-specified OAuth2 client secret for Google servers. Empty string means to use the 
one provided during build time. Change of this requires restart.</_description>
+      <summary>An OAuth2 client secret to use to connect to Google servers, instead of the one provided 
during build time</summary>
+      <description>User-specified OAuth2 client secret for Google servers. Empty string means to use the one 
provided during build time. Change of this requires restart.</description>
     </key>
     <key name="oauth2-outlook-client-id" type="s">
       <default>''</default>
-      <_summary>An OAuth2 client ID to use to connect to Outlook servers, instead of the one provided during 
build time</_summary>
-      <_description>User-specified OAuth2 client ID for Outlook servers. Empty string means to use the one 
provided during build time. Change of this requires restart.</_description>
+      <summary>An OAuth2 client ID to use to connect to Outlook servers, instead of the one provided during 
build time</summary>
+      <description>User-specified OAuth2 client ID for Outlook servers. Empty string means to use the one 
provided during build time. Change of this requires restart.</description>
     </key>
     <key name="oauth2-outlook-client-secret" type="s">
       <default>''</default>
-      <_summary>An OAuth2 client secret to use to connect to Outlook servers, instead of the one provided 
during build time</_summary>
-      <_description>User-specified OAuth2 client secret for Outlook servers. Empty string means to use the 
one provided during build time. Change of this requires restart.</_description>
+      <summary>An OAuth2 client secret to use to connect to Outlook servers, instead of the one provided 
during build time</summary>
+      <description>User-specified OAuth2 client secret for Outlook servers. Empty string means to use the 
one provided during build time. Change of this requires restart.</description>
     </key>
     <key name="oauth2-yahoo-client-id" type="s">
       <default>''</default>
-      <_summary>An OAuth2 client ID to use to connect to Yahoo! servers, instead of the one provided during 
build time</_summary>
-      <_description>User-specified OAuth2 client ID for Yahoo! servers. Empty string means to use the one 
provided during build time. Change of this requires restart.</_description>
+      <summary>An OAuth2 client ID to use to connect to Yahoo! servers, instead of the one provided during 
build time</summary>
+      <description>User-specified OAuth2 client ID for Yahoo! servers. Empty string means to use the one 
provided during build time. Change of this requires restart.</description>
     </key>
     <key name="oauth2-yahoo-client-secret" type="s">
       <default>''</default>
-      <_summary>An OAuth2 client secret to use to connect to Yahoo! servers, instead of the one provided 
during build time</_summary>
-      <_description>User-specified OAuth2 client secret for Yahoo! servers. Empty string means to use the 
one provided during build time. Change of this requires restart.</_description>
+      <summary>An OAuth2 client secret to use to connect to Yahoo! servers, instead of the one provided 
during build time</summary>
+      <description>User-specified OAuth2 client secret for Yahoo! servers. Empty string means to use the one 
provided during build time. Change of this requires restart.</description>
     </key>
   </schema>
 </schemalist>
diff --git a/data/org.gnome.evolution.shell.network-config.gschema.xml.in 
b/data/org.gnome.evolution.shell.network-config.gschema.xml.in
index 9793cb95e..dee81de9b 100644
--- a/data/org.gnome.evolution.shell.network-config.gschema.xml.in
+++ b/data/org.gnome.evolution.shell.network-config.gschema.xml.in
@@ -8,68 +8,68 @@
 
     <key name="proxy-type" type="i">
       <default>0</default>
-      <_summary>(Deprecated) Proxy type to use</_summary>
-      <_description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings 
are now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</_description>
+      <summary>(Deprecated) Proxy type to use</summary>
+      <description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings are 
now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</description>
     </key>
     <key name="use-http-proxy" type="b">
       <default>false</default>
-      <_summary>(Deprecated) Whether to use http-proxy</_summary>
-      <_description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings 
are now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</_description>
+      <summary>(Deprecated) Whether to use http-proxy</summary>
+      <description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings are 
now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</description>
     </key>
     <key name="use-authentication" type="b">
       <default>false</default>
-      <_summary>(Deprecated) Whether proxy server requires authentication</_summary>
-      <_description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings 
are now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</_description>
+      <summary>(Deprecated) Whether proxy server requires authentication</summary>
+      <description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings are 
now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</description>
     </key>
     <key name="http-host" type="s">
       <default>''</default>
-      <_summary>(Deprecated) Host name for HTTP requests</_summary>
-      <_description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings 
are now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</_description>
+      <summary>(Deprecated) Host name for HTTP requests</summary>
+      <description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings are 
now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</description>
     </key>
     <key name="http-port" type="i">
       <default>0</default>
-      <_summary>(Deprecated) Port number for HTTP requests</_summary>
-      <_description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings 
are now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</_description>
+      <summary>(Deprecated) Port number for HTTP requests</summary>
+      <description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings are 
now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</description>
     </key>
     <key name="authentication-user" type="s">
       <default>''</default>
-      <_summary>(Deprecated) Proxy authentication user name</_summary>
-      <_description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings 
are now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</_description>
+      <summary>(Deprecated) Proxy authentication user name</summary>
+      <description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings are 
now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</description>
     </key>
     <key name="authentication-password" type="s">
       <default>''</default>
-      <_summary>(Deprecated) Proxy authentication password</_summary>
-      <_description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings 
are now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</_description>
+      <summary>(Deprecated) Proxy authentication password</summary>
+      <description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings are 
now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</description>
     </key>
     <key name="ignore-hosts" type="as">
       <default>[]</default>
-      <_summary>(Deprecated) List of hosts to connect to without proxy</_summary>
-      <_description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings 
are now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</_description>
+      <summary>(Deprecated) List of hosts to connect to without proxy</summary>
+      <description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings are 
now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</description>
     </key>
     <key name="secure-host" type="s">
       <default>''</default>
-      <_summary>(Deprecated) Host name for HTTPS requests</_summary>
-      <_description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings 
are now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</_description>
+      <summary>(Deprecated) Host name for HTTPS requests</summary>
+      <description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings are 
now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</description>
     </key>
     <key name="secure-port" type="i">
       <default>0</default>
-      <_summary>(Deprecated) Port number for HTTPS requests</_summary>
-      <_description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings 
are now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</_description>
+      <summary>(Deprecated) Port number for HTTPS requests</summary>
+      <description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings are 
now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</description>
     </key>
     <key name="socks-host" type="s">
       <default>''</default>
-      <_summary>(Deprecated) Host name for SOCKS requests</_summary>
-      <_description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings 
are now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</_description>
+      <summary>(Deprecated) Host name for SOCKS requests</summary>
+      <description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings are 
now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</description>
     </key>
     <key name="socks-port" type="i">
       <default>0</default>
-      <_summary>(Deprecated) Port number for SOCKS requests</_summary>
-      <_description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings 
are now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</_description>
+      <summary>(Deprecated) Port number for SOCKS requests</summary>
+      <description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings are 
now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</description>
     </key>
     <key name="autoconfig-url" type="s">
       <default>''</default>
-      <_summary>(Deprecated) Automatic proxy configuration URL</_summary>
-      <_description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings 
are now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</_description>
+      <summary>(Deprecated) Automatic proxy configuration URL</summary>
+      <description>This key was deprecated in version 3.12 and should no longer be used.  Proxy settings are 
now integrated into Evolution-Data-Server’s account system.  See the ESourceProxy API documentation for 
details.</description>
     </key>
   </schema>
 </schemalist>
diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt
index 9e81642a7..4edf9f5a9 100644
--- a/po/CMakeLists.txt
+++ b/po/CMakeLists.txt
@@ -1 +1,71 @@
-intltool_setup_po_dir()
+find_program(GETTEXT_XGETTEXT_EXECUTABLE xgettext)
+
+set(DOMAIN ${FULL_PROJECT_NAME})
+set(POT_FILE ${GETTEXT_PACKAGE}.pot)
+
+# Creates the .pot file containing the translations template
+add_custom_command(
+    COMMENT "Generating translation template"
+    COMMAND ${GETTEXT_XGETTEXT_EXECUTABLE} -o ${POT_FILE}
+        -D ${CMAKE_SOURCE_DIR}
+        -D ${CMAKE_BINARY_DIR}
+        --package-name=${GETTEXT_PACKAGE}
+        --files-from=${CMAKE_CURRENT_SOURCE_DIR}/POTFILES.in
+        --from-code=UTF-8
+        --add-comments
+        --keyword=_
+        --keyword=N_
+        --keyword=C_:1c,2
+        --keyword=NC_:1c,2
+        --keyword=g_dcgettext:2
+        --keyword=g_dngettext:2,3
+        --keyword=g_dpgettext2:2c,3
+        --flag=N_:1:pass-c-format
+        --flag=C_:2:pass-c-format
+        --flag=NC_:2:pass-c-format
+        --flag=g_dngettext:2:pass-c-format
+        --flag=g_strdup_printf:1:c-format
+        --flag=g_string_printf:2:c-format
+        --flag=g_string_append_printf:2:c-format
+        --flag=g_error_new:3:c-format
+        --flag=g_set_error:4:c-format
+        --flag=g_markup_printf_escaped:1:c-format
+        --flag=g_log:3:c-format
+        --flag=g_print:1:c-format
+        --flag=g_printerr:1:c-format
+        --flag=g_printf:1:c-format
+        --flag=g_fprintf:2:c-format
+        --flag=g_sprintf:2:c-format
+        --flag=g_snprintf:3:c-format
+# .source files are not standard so handle them the best we can
+    COMMAND ${GETTEXT_XGETTEXT_EXECUTABLE} -o ${POT_FILE}
+        -D ${CMAKE_SOURCE_DIR}
+        -D ${CMAKE_BINARY_DIR}
+        --package-name=${GETTEXT_PACKAGE}
+        --language=Desktop
+        --join-existing
+        --files-from=${CMAKE_CURRENT_SOURCE_DIR}/POTFILES.source.in
+        --from-code=UTF-8
+        --add-comments
+        --keyword=DisplayName
+    OUTPUT ${POT_FILE}
+)
+
+file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/LINGUAS LINGUAS ENCODING UTF-8 REGEX "^[^#].*")
+foreach(LANG ${LINGUAS})
+    file(
+        COPY "${CMAKE_CURRENT_SOURCE_DIR}/${LANG}.po"
+        DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
+    )
+endforeach(LANG)
+
+gettext_process_pot_file (${CMAKE_CURRENT_BINARY_DIR}/${POT_FILE} INSTALL_DESTINATION 
${CMAKE_INSTALL_LOCALEDIR} LANGUAGES ${LINGUAS})
+add_custom_target(${GETTEXT_PACKAGE}-update-pot DEPENDS potfiles ${POT_FILE})
+
+add_custom_target(${GETTEXT_PACKAGE}-update-po DEPENDS ${GETTEXT_PACKAGE}-update-pot)
+foreach(LANG ${LINGUAS})
+    add_custom_command(TARGET ${GETTEXT_PACKAGE}-update-po
+        COMMENT "Update ${LANG}.po"
+        COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} -q --update ${CMAKE_CURRENT_SOURCE_DIR}/${LANG}.po 
${CMAKE_CURRENT_BINARY_DIR}/${POT_FILE}
+    )
+endforeach(LANG)
diff --git a/po/LINGUAS b/po/LINGUAS
new file mode 100644
index 000000000..14b339760
--- /dev/null
+++ b/po/LINGUAS
@@ -0,0 +1,88 @@
+am
+ar
+as
+ast
+az
+be
+bg
+bn
+bn_IN
+bs
+ca
+ca@valencia
+cs
+cy
+da
+de
+dz
+el
+en_AU
+en_CA
+en_GB
+en@shaw
+eo
+es
+et
+eu
+fa
+fi
+fr
+fur
+ga
+gl
+gu
+he
+hi
+hr
+hu
+id
+is
+it
+ja
+ka
+kk
+km
+kn
+ko
+ku
+lt
+lv
+mai
+mk
+ml
+mn
+mr
+ms
+nb
+ne
+nl
+nn
+oc
+or
+pa
+pl
+pt
+pt_BR
+ro
+ru
+rw
+si
+sk
+sl
+sq
+sr
+sr@latin
+sv
+ta
+te
+tg
+th
+tr
+ug
+uk
+vi
+wa
+xh
+zh_CN
+zh_HK
+zh_TW
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 111edaa5d..9d96051ab 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,6 +1,5 @@
 # List of source files containing translatable strings.
 # Please keep this list in alphabetic order.
-[encoding: UTF-8]
 src/addressbook/backends/carddav/e-book-backend-carddav.c
 src/addressbook/backends/file/e-book-backend-file.c
 src/addressbook/backends/file/e-book-backend-file-migrate-bdb.c
@@ -226,24 +225,6 @@ src/modules/yahoo-backend/module-yahoo-backend.c
 src/services/evolution-addressbook-factory/evolution-addressbook-factory.c
 src/services/evolution-alarm-notify/e-alarm-notify.c
 src/services/evolution-calendar-factory/evolution-calendar-factory.c
-[type: gettext/ini]src/services/evolution-source-registry/builtin/birthdays.source.in
-[type: gettext/ini]src/services/evolution-source-registry/builtin/caldav-stub.source.in
-[type: gettext/ini]src/services/evolution-source-registry/builtin/carddav-stub.source.in
-[type: gettext/ini]src/services/evolution-source-registry/builtin/contacts-stub.source.in
-[type: gettext/ini]src/services/evolution-source-registry/builtin/google-stub.source.in
-[type: gettext/ini]src/services/evolution-source-registry/builtin/ldap-stub.source.in
-[type: gettext/ini]src/services/evolution-source-registry/builtin/local.source.in
-[type: gettext/ini]src/services/evolution-source-registry/builtin/local-stub.source.in
-[type: gettext/ini]src/services/evolution-source-registry/builtin/sendmail.source.in
-[type: gettext/ini]src/services/evolution-source-registry/builtin/system-address-book.source.in
-[type: gettext/ini]src/services/evolution-source-registry/builtin/system-calendar.source.in
-[type: gettext/ini]src/services/evolution-source-registry/builtin/system-memo-list.source.in
-[type: gettext/ini]src/services/evolution-source-registry/builtin/system-proxy.source.in
-[type: gettext/ini]src/services/evolution-source-registry/builtin/system-task-list.source.in
-[type: gettext/ini]src/services/evolution-source-registry/builtin/vfolder.source.in
-[type: gettext/ini]src/services/evolution-source-registry/builtin/weather-stub.source.in
-[type: gettext/ini]src/services/evolution-source-registry/builtin/webcal-stub.source.in
-[type: gettext/ini]src/services/evolution-source-registry/builtin/webdav-notes-stub.source.in
 src/services/evolution-source-registry/evolution-source-registry.c
 src/services/evolution-user-prompter/evolution-user-prompter.c
 src/services/evolution-user-prompter/prompt-user-gtk.c
diff --git a/po/POTFILES.source.in b/po/POTFILES.source.in
new file mode 100644
index 000000000..d0b666d6d
--- /dev/null
+++ b/po/POTFILES.source.in
@@ -0,0 +1,18 @@
+src/services/evolution-source-registry/builtin/birthdays.source.in
+src/services/evolution-source-registry/builtin/caldav-stub.source.in
+src/services/evolution-source-registry/builtin/carddav-stub.source.in
+src/services/evolution-source-registry/builtin/contacts-stub.source.in
+src/services/evolution-source-registry/builtin/google-stub.source.in
+src/services/evolution-source-registry/builtin/ldap-stub.source.in
+src/services/evolution-source-registry/builtin/local.source.in
+src/services/evolution-source-registry/builtin/local-stub.source.in
+src/services/evolution-source-registry/builtin/sendmail.source.in
+src/services/evolution-source-registry/builtin/system-address-book.source.in
+src/services/evolution-source-registry/builtin/system-calendar.source.in
+src/services/evolution-source-registry/builtin/system-memo-list.source.in
+src/services/evolution-source-registry/builtin/system-proxy.source.in
+src/services/evolution-source-registry/builtin/system-task-list.source.in
+src/services/evolution-source-registry/builtin/vfolder.source.in
+src/services/evolution-source-registry/builtin/weather-stub.source.in
+src/services/evolution-source-registry/builtin/webcal-stub.source.in
+src/services/evolution-source-registry/builtin/webdav-notes-stub.source.in
diff --git a/src/services/evolution-source-registry/CMakeLists.txt 
b/src/services/evolution-source-registry/CMakeLists.txt
index 487f8aef2..d463c9940 100644
--- a/src/services/evolution-source-registry/CMakeLists.txt
+++ b/src/services/evolution-source-registry/CMakeLists.txt
@@ -48,7 +48,12 @@ endif(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/builtin)
 
 set(builtin_sources)
 foreach(_file ${builtin_sources_files})
-       intltool_merge(${CMAKE_CURRENT_SOURCE_DIR}/builtin/${_file}.in 
${CMAKE_CURRENT_BINARY_DIR}/builtin/${_file} -d -u)
+       i18n_merge_file(
+               ${CMAKE_CURRENT_SOURCE_DIR}/builtin/${_file}.in
+               ${CMAKE_CURRENT_BINARY_DIR}/builtin/${_file}
+               ${CMAKE_SOURCE_DIR}/po
+               EXTRA_ARGS "--keyword=DisplayName"
+       )
        list(APPEND builtin_sources ${CMAKE_CURRENT_BINARY_DIR}/builtin/${_file})
 endforeach(_file)
 
diff --git a/src/services/evolution-source-registry/builtin/birthdays.source.in 
b/src/services/evolution-source-registry/builtin/birthdays.source.in
index 7f90f94f8..b5606f268 100644
--- a/src/services/evolution-source-registry/builtin/birthdays.source.in
+++ b/src/services/evolution-source-registry/builtin/birthdays.source.in
@@ -1,6 +1,6 @@
 
 [Data Source]
-_DisplayName=Birthdays & Anniversaries
+DisplayName=Birthdays & Anniversaries
 Enabled=true
 Parent=contacts-stub
 
diff --git a/src/services/evolution-source-registry/builtin/caldav-stub.source.in 
b/src/services/evolution-source-registry/builtin/caldav-stub.source.in
index 90081a35a..18e02f609 100644
--- a/src/services/evolution-source-registry/builtin/caldav-stub.source.in
+++ b/src/services/evolution-source-registry/builtin/caldav-stub.source.in
@@ -1,5 +1,5 @@
 
 [Data Source]
-_DisplayName=CalDAV
+DisplayName=CalDAV
 Enabled=true
 Parent=
diff --git a/src/services/evolution-source-registry/builtin/carddav-stub.source.in 
b/src/services/evolution-source-registry/builtin/carddav-stub.source.in
index dc77afa7e..1fc9ac8e2 100644
--- a/src/services/evolution-source-registry/builtin/carddav-stub.source.in
+++ b/src/services/evolution-source-registry/builtin/carddav-stub.source.in
@@ -1,5 +1,5 @@
 
 [Data Source]
-_DisplayName=CardDAV
+DisplayName=CardDAV
 Enabled=true
 Parent=
diff --git a/src/services/evolution-source-registry/builtin/contacts-stub.source.in 
b/src/services/evolution-source-registry/builtin/contacts-stub.source.in
index f2bcb97f3..f5cd2e2ff 100644
--- a/src/services/evolution-source-registry/builtin/contacts-stub.source.in
+++ b/src/services/evolution-source-registry/builtin/contacts-stub.source.in
@@ -1,5 +1,5 @@
 
 [Data Source]
-_DisplayName=Contacts
+DisplayName=Contacts
 Enabled=true
 Parent=
diff --git a/src/services/evolution-source-registry/builtin/google-stub.source.in 
b/src/services/evolution-source-registry/builtin/google-stub.source.in
index 93de6f1e0..8914bb6bc 100644
--- a/src/services/evolution-source-registry/builtin/google-stub.source.in
+++ b/src/services/evolution-source-registry/builtin/google-stub.source.in
@@ -1,5 +1,5 @@
 
 [Data Source]
-_DisplayName=Google
+DisplayName=Google
 Enabled=true
 Parent=
diff --git a/src/services/evolution-source-registry/builtin/ldap-stub.source.in 
b/src/services/evolution-source-registry/builtin/ldap-stub.source.in
index 9c5e324d9..8fbabf222 100644
--- a/src/services/evolution-source-registry/builtin/ldap-stub.source.in
+++ b/src/services/evolution-source-registry/builtin/ldap-stub.source.in
@@ -1,5 +1,5 @@
 
 [Data Source]
-_DisplayName=On LDAP Servers
+DisplayName=On LDAP Servers
 Enabled=true
 Parent=
diff --git a/src/services/evolution-source-registry/builtin/local-stub.source.in 
b/src/services/evolution-source-registry/builtin/local-stub.source.in
index bad02f028..32e05e061 100644
--- a/src/services/evolution-source-registry/builtin/local-stub.source.in
+++ b/src/services/evolution-source-registry/builtin/local-stub.source.in
@@ -2,6 +2,6 @@
 # mail store forced the introduction of this "stub" suffix.
 
 [Data Source]
-_DisplayName=On This Computer
+DisplayName=On This Computer
 Enabled=true
 Parent=
diff --git a/src/services/evolution-source-registry/builtin/local.source.in 
b/src/services/evolution-source-registry/builtin/local.source.in
index 1c38384fa..188737a90 100644
--- a/src/services/evolution-source-registry/builtin/local.source.in
+++ b/src/services/evolution-source-registry/builtin/local.source.in
@@ -1,7 +1,7 @@
 # Special built-in mail store.
 
 [Data Source]
-_DisplayName=On This Computer
+DisplayName=On This Computer
 Enabled=true
 Parent=
 
diff --git a/src/services/evolution-source-registry/builtin/sendmail.source.in 
b/src/services/evolution-source-registry/builtin/sendmail.source.in
index ce825cb40..a76b5f8c6 100644
--- a/src/services/evolution-source-registry/builtin/sendmail.source.in
+++ b/src/services/evolution-source-registry/builtin/sendmail.source.in
@@ -1,6 +1,6 @@
 
 [Data Source]
-_DisplayName=Sendmail
+DisplayName=Sendmail
 Enabled=true
 Parent=
 
diff --git a/src/services/evolution-source-registry/builtin/system-address-book.source.in 
b/src/services/evolution-source-registry/builtin/system-address-book.source.in
index 494f11bbf..38029b200 100644
--- a/src/services/evolution-source-registry/builtin/system-address-book.source.in
+++ b/src/services/evolution-source-registry/builtin/system-address-book.source.in
@@ -1,6 +1,6 @@
 
 [Data Source]
-_DisplayName=Personal
+DisplayName=Personal
 Enabled=true
 Parent=local-stub
 
diff --git a/src/services/evolution-source-registry/builtin/system-calendar.source.in 
b/src/services/evolution-source-registry/builtin/system-calendar.source.in
index ffbe161a8..8da0c66fa 100644
--- a/src/services/evolution-source-registry/builtin/system-calendar.source.in
+++ b/src/services/evolution-source-registry/builtin/system-calendar.source.in
@@ -1,6 +1,6 @@
 
 [Data Source]
-_DisplayName=Personal
+DisplayName=Personal
 Enabled=true
 Parent=local-stub
 
diff --git a/src/services/evolution-source-registry/builtin/system-memo-list.source.in 
b/src/services/evolution-source-registry/builtin/system-memo-list.source.in
index f53f0f030..091513f39 100644
--- a/src/services/evolution-source-registry/builtin/system-memo-list.source.in
+++ b/src/services/evolution-source-registry/builtin/system-memo-list.source.in
@@ -1,6 +1,6 @@
 
 [Data Source]
-_DisplayName=Personal
+DisplayName=Personal
 Enabled=true
 Parent=local-stub
 
diff --git a/src/services/evolution-source-registry/builtin/system-proxy.source.in 
b/src/services/evolution-source-registry/builtin/system-proxy.source.in
index a7a351f53..3ce3679b5 100644
--- a/src/services/evolution-source-registry/builtin/system-proxy.source.in
+++ b/src/services/evolution-source-registry/builtin/system-proxy.source.in
@@ -1,6 +1,6 @@
 
 [Data Source]
-_DisplayName=Default Proxy Settings
+DisplayName=Default Proxy Settings
 Enabled=true
 Parent=
 
diff --git a/src/services/evolution-source-registry/builtin/system-task-list.source.in 
b/src/services/evolution-source-registry/builtin/system-task-list.source.in
index 22f40bc4b..efd39f260 100644
--- a/src/services/evolution-source-registry/builtin/system-task-list.source.in
+++ b/src/services/evolution-source-registry/builtin/system-task-list.source.in
@@ -1,6 +1,6 @@
 
 [Data Source]
-_DisplayName=Personal
+DisplayName=Personal
 Enabled=true
 Parent=local-stub
 
diff --git a/src/services/evolution-source-registry/builtin/vfolder.source.in 
b/src/services/evolution-source-registry/builtin/vfolder.source.in
index 98a9df4b1..ee9a2f401 100644
--- a/src/services/evolution-source-registry/builtin/vfolder.source.in
+++ b/src/services/evolution-source-registry/builtin/vfolder.source.in
@@ -1,7 +1,7 @@
 # Special built-in mail store.
 
 [Data Source]
-_DisplayName=Search Folders
+DisplayName=Search Folders
 Enabled=true
 Parent=
 
diff --git a/src/services/evolution-source-registry/builtin/weather-stub.source.in 
b/src/services/evolution-source-registry/builtin/weather-stub.source.in
index e1a549d36..76b9385fc 100644
--- a/src/services/evolution-source-registry/builtin/weather-stub.source.in
+++ b/src/services/evolution-source-registry/builtin/weather-stub.source.in
@@ -1,5 +1,5 @@
 
 [Data Source]
-_DisplayName=Weather
+DisplayName=Weather
 Enabled=true
 Parent=
diff --git a/src/services/evolution-source-registry/builtin/webcal-stub.source.in 
b/src/services/evolution-source-registry/builtin/webcal-stub.source.in
index 178cec123..dd5f44687 100644
--- a/src/services/evolution-source-registry/builtin/webcal-stub.source.in
+++ b/src/services/evolution-source-registry/builtin/webcal-stub.source.in
@@ -1,5 +1,5 @@
 
 [Data Source]
-_DisplayName=On The Web
+DisplayName=On The Web
 Enabled=true
 Parent=
diff --git a/src/services/evolution-source-registry/builtin/webdav-notes-stub.source.in 
b/src/services/evolution-source-registry/builtin/webdav-notes-stub.source.in
index 01a3b0135..789060655 100644
--- a/src/services/evolution-source-registry/builtin/webdav-notes-stub.source.in
+++ b/src/services/evolution-source-registry/builtin/webdav-notes-stub.source.in
@@ -1,5 +1,5 @@
 
 [Data Source]
-_DisplayName=WebDAV Notes
+DisplayName=WebDAV Notes
 Enabled=true
 Parent=


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]