2 * Copyright (C) 2010 Robert Ancell.
3 * Author: Robert Ancell <robert.ancell@canonical.com>
5 * This library is free software; you can redistribute it and/or modify it under
6 * the terms of the GNU Lesser General Public License as published by the Free
7 * Software Foundation; either version 3 of the License, or (at your option) any
8 * later version. See http://www.gnu.org/copyleft/lgpl.html the full text of the
15 #include "lightdm/language.h"
31 G_DEFINE_TYPE (LdmLanguage, ldm_language, G_TYPE_OBJECT);
33 #define GET_PRIVATE(obj) G_TYPE_INSTANCE_GET_PRIVATE ((obj), LDM_TYPE_LANGUAGE, LdmLanguagePrivate)
38 * Create a new language.
39 * @code: The language code
41 * Return value: the new #LdmLanguage
44 ldm_language_new (const gchar *code)
46 return g_object_new (LDM_TYPE_LANGUAGE, "code", code, NULL);
50 * ldm_language_get_code:
51 * @language: A #LdmLanguage
53 * Get the code of a language.
55 * Return value: The code of the language
58 ldm_language_get_code (LdmLanguage *language)
60 g_return_val_if_fail (LDM_IS_LANGUAGE (language), NULL);
61 return GET_PRIVATE (language)->code;
65 * ldm_language_get_name:
66 * @language: A #LdmLanguage
68 * Get the name of a language.
70 * Return value: The name of the language
73 ldm_language_get_name (LdmLanguage *language)
75 LdmLanguagePrivate *priv;
77 g_return_val_if_fail (LDM_IS_LANGUAGE (language), NULL);
79 priv = GET_PRIVATE (language);
83 char *current = setlocale(LC_ALL, NULL);
84 setlocale(LC_ALL, priv->code);
85 #ifdef _NL_IDENTIFICATION_LANGUAGE
86 priv->name = g_strdup (nl_langinfo (_NL_IDENTIFICATION_LANGUAGE));
88 priv->name = g_strdup ("Unknown");
90 setlocale(LC_ALL, current);
97 * ldm_language_get_territory:
98 * @language: A #LdmLanguage
100 * Get the territory the language is used in.
102 * Return value: The territory the language is used in.
105 ldm_language_get_territory (LdmLanguage *language)
107 LdmLanguagePrivate *priv;
109 g_return_val_if_fail (LDM_IS_LANGUAGE (language), NULL);
111 priv = GET_PRIVATE (language);
113 if (!priv->territory)
115 char *current = setlocale(LC_ALL, NULL);
116 setlocale(LC_ALL, priv->code);
117 #ifdef _NL_IDENTIFICATION_TERRITORY
118 priv->territory = g_strdup (nl_langinfo (_NL_IDENTIFICATION_TERRITORY));
120 priv->territory = g_strdup ("Unknown");
122 setlocale(LC_ALL, current);
125 return priv->territory;
129 is_utf8 (const gchar *code)
131 return g_str_has_suffix (code, ".utf8") || g_str_has_suffix (code, ".UTF-8");
135 * ldm_language_matches:
136 * @language: A #LdmLanguage
137 * @code: A language code
139 * Check if a language code matches this language.
141 * Return value: #TRUE if the code matches this language.
144 ldm_language_matches (LdmLanguage *language, const gchar *code)
146 LdmLanguagePrivate *priv;
148 g_return_val_if_fail (LDM_IS_LANGUAGE (language), FALSE);
149 g_return_val_if_fail (code != NULL, FALSE);
151 priv = GET_PRIVATE (language);
153 /* Handle the fact the UTF-8 is specified both as '.utf8' and '.UTF-8' */
154 if (is_utf8 (priv->code) && is_utf8 (code))
156 /* Match the characters before the '.' */
158 for (i = 0; priv->code[i] && code[i] && priv->code[i] == code[i] && code[i] != '.' ; i++);
159 return priv->code[i] == '.' && code[i] == '.';
162 return g_str_equal (priv->code, code);
166 ldm_language_init (LdmLanguage *language)
171 ldm_language_set_property (GObject *object,
176 LdmLanguage *self = LDM_LANGUAGE (object);
177 LdmLanguagePrivate *priv = GET_PRIVATE (self);
182 priv->code = g_strdup (g_value_get_string (value));
185 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
191 ldm_language_get_property (GObject *object,
198 self = LDM_LANGUAGE (object);
202 g_value_set_string (value, ldm_language_get_code (self));
205 g_value_set_string (value, ldm_language_get_name (self));
208 g_value_set_string (value, ldm_language_get_territory (self));
211 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
217 ldm_language_class_init (LdmLanguageClass *klass)
219 GObjectClass *object_class = G_OBJECT_CLASS (klass);
221 g_type_class_add_private (klass, sizeof (LdmLanguagePrivate));
223 object_class->set_property = ldm_language_set_property;
224 object_class->get_property = ldm_language_get_property;
226 g_object_class_install_property(object_class,
228 g_param_spec_string("code",
232 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
233 g_object_class_install_property(object_class,
235 g_param_spec_string("name",
237 "Name of the language",
240 g_object_class_install_property(object_class,
242 g_param_spec_string("territory",
244 "Territory the language is from",