1.1 --- a/docs/tools/profile_prefs.sh Thu Nov 05 20:00:51 2015 +0100
1.2 +++ b/docs/tools/profile_prefs.sh Fri Nov 06 00:00:55 2015 +0100
1.3 @@ -10,8 +10,8 @@
1.4 echo "|| '''Label''' || '''Setting''' ||"
1.5
1.6 grep '^ \+("' "$PROFILE" \
1.7 -| sed 's/^ \+("\(.*\)".*, \+"\(.*\)"),$/|| \2 || [[..\/Preferences#\1|\1]] ||/'
1.8 +| sed 's/^ \+("\(.*\)".*, \+_("\(.*\)")),$/|| \2 || [[..\/Preferences#\1|\1]] ||/'
1.9
1.10 # Convert from... to...
1.11 -# ("setting" , "label"),
1.12 +# ("setting" , _("label")),
1.13 # || label || [[../Preferences#setting|setting]] ||
2.1 --- a/imipweb/calendar.py Thu Nov 05 20:00:51 2015 +0100
2.2 +++ b/imipweb/calendar.py Fri Nov 06 00:00:55 2015 +0100
2.3 @@ -228,7 +228,7 @@
2.4 page.div(id="pending-requests")
2.5
2.6 if requests:
2.7 - page.p("Pending requests:")
2.8 + page.p(_("Pending requests:"))
2.9
2.10 page.ul()
2.11
3.1 --- a/imipweb/event.py Thu Nov 05 20:00:51 2015 +0100
3.2 +++ b/imipweb/event.py Fri Nov 06 00:00:55 2015 +0100
3.3 @@ -27,6 +27,10 @@
3.4 from imipweb.data import EventPeriod, event_period_from_period, FormPeriod, PeriodError
3.5 from imipweb.resource import DateTimeFormUtilities, FormUtilities, ResourceClientForObject
3.6
3.7 +# Fake gettext method for strings to be translated later.
3.8 +
3.9 +_ = lambda s: s
3.10 +
3.11 class EventPageFragment(ResourceClientForObject, DateTimeFormUtilities, FormUtilities):
3.12
3.13 "A resource presenting the details of an event."
3.14 @@ -37,20 +41,20 @@
3.15 # Various property values and labels.
3.16
3.17 property_items = [
3.18 - ("SUMMARY", "Summary"),
3.19 - ("DTSTART", "Start"),
3.20 - ("DTEND", "End"),
3.21 - ("ORGANIZER", "Organiser"),
3.22 - ("ATTENDEE", "Attendee"),
3.23 + ("SUMMARY", _("Summary")),
3.24 + ("DTSTART", _("Start")),
3.25 + ("DTEND", _("End")),
3.26 + ("ORGANIZER", _("Organiser")),
3.27 + ("ATTENDEE", _("Attendee")),
3.28 ]
3.29
3.30 partstat_items = [
3.31 - ("NEEDS-ACTION", "Not confirmed"),
3.32 - ("ACCEPTED", "Attending"),
3.33 - ("TENTATIVE", "Tentatively attending"),
3.34 - ("DECLINED", "Not attending"),
3.35 - ("DELEGATED", "Delegated"),
3.36 - (None, "Not indicated"),
3.37 + ("NEEDS-ACTION", _("Not confirmed")),
3.38 + ("ACCEPTED", _("Attending")),
3.39 + ("TENTATIVE", _("Tentatively attending")),
3.40 + ("DECLINED", _("Not attending")),
3.41 + ("DELEGATED", _("Delegated")),
3.42 + (None, _("Not indicated")),
3.43 ]
3.44
3.45 def can_remove_recurrence(self, recurrence):
3.46 @@ -244,7 +248,7 @@
3.47 continue
3.48
3.49 page.tr()
3.50 - page.th(label, class_="objectheading %s%s" % (field, errors and field in errors and " error" or ""), rowspan=rowspan)
3.51 + page.th(_(label), class_="objectheading %s%s" % (field, errors and field in errors and " error" or ""), rowspan=rowspan)
3.52
3.53 # Handle datetimes specially.
3.54
3.55 @@ -389,8 +393,10 @@
3.56
3.57 # Show participation status, editable for the current user.
3.58
3.59 + partstat_items = [(key, _(partstat_label)) for (key, partstat_label) in self.partstat_items]
3.60 +
3.61 if attendee_uri == self.user:
3.62 - self.menu("partstat", partstat, self.partstat_items, class_="partstat")
3.63 + self.menu("partstat", partstat, partstat_items, class_="partstat")
3.64
3.65 # Allow the participation indicator to act as a submit
3.66 # button in order to refresh the page and show a control for
3.67 @@ -398,12 +404,12 @@
3.68
3.69 elif self.is_organiser() and self.attendee_is_new(attendee_uri):
3.70 self.control("partstat-refresh", "submit", "refresh", id="partstat-%d" % i, class_="refresh")
3.71 - page.label(dict(self.partstat_items).get(partstat, ""), for_="partstat-%s" % i, class_="partstat")
3.72 + page.label(dict(partstat_items).get(partstat, ""), for_="partstat-%s" % i, class_="partstat")
3.73
3.74 # Otherwise, just show a label with the participation status.
3.75
3.76 else:
3.77 - page.span(dict(self.partstat_items).get(partstat, ""), class_="partstat")
3.78 + page.span(dict(partstat_items).get(partstat, ""), class_="partstat")
3.79
3.80 page.td.close()
3.81 page.td()
4.1 --- a/imipweb/profile.py Thu Nov 05 20:00:51 2015 +0100
4.2 +++ b/imipweb/profile.py Fri Nov 06 00:00:55 2015 +0100
4.3 @@ -21,6 +21,10 @@
4.4
4.5 from imipweb.resource import FormUtilities, ResourceClient
4.6
4.7 +# Fake gettext method for strings to be translated later.
4.8 +
4.9 +_ = lambda s: s
4.10 +
4.11 class ProfilePage(ResourceClient, FormUtilities):
4.12
4.13 "A request handler for the user profile page."
4.14 @@ -31,18 +35,18 @@
4.15 # See: docs/tools/profile_prefs.sh
4.16
4.17 pref_labels = [
4.18 - ("participating" , "Participate in the calendar system"),
4.19 - ("CN" , "Your common name"),
4.20 - ("LANG" , "Language"),
4.21 - ("TZID" , "Time zone/regime"),
4.22 - ("incoming" , "How to present incoming calendar messages"),
4.23 - ("freebusy_sharing" , "Share free/busy information"),
4.24 - ("freebusy_bundling" , "Bundle free/busy details with messages"),
4.25 - ("freebusy_publishing" , "Publish free/busy details via the Web"),
4.26 - ("freebusy_messages" , "Deliver details of received free/busy messages"),
4.27 - ("add_method_response" , "How to respond to messages adding events"),
4.28 - ("event_refreshing" , "How to handle event refresh requests"),
4.29 - ("organiser_replacement" , "Recognise whom as a new organiser of an event?"),
4.30 + ("participating" , _("Participate in the calendar system")),
4.31 + ("CN" , _("Your common name")),
4.32 + ("LANG" , _("Language")),
4.33 + ("TZID" , _("Time zone/regime")),
4.34 + ("incoming" , _("How to present incoming calendar messages")),
4.35 + ("freebusy_sharing" , _("Share free/busy information")),
4.36 + ("freebusy_bundling" , _("Bundle free/busy details with messages")),
4.37 + ("freebusy_publishing" , _("Publish free/busy details via the Web")),
4.38 + ("freebusy_messages" , _("Deliver details of received free/busy messages")),
4.39 + ("add_method_response" , _("How to respond to messages adding events")),
4.40 + ("event_refreshing" , _("How to handle event refresh requests")),
4.41 + ("organiser_replacement" , _("Recognise whom as a new organiser of an event?")),
4.42 ]
4.43
4.44 def handle_request(self):
4.45 @@ -143,7 +147,7 @@
4.46
4.47 page.tr()
4.48 page.th(class_="profileheading %s%s" % (name, errors and name in errors and " error" or ""))
4.49 - page.label(label, for_=name)
4.50 + page.label(_(label), for_=name)
4.51 page.th.close()
4.52 page.td()
4.53
4.54 @@ -156,7 +160,7 @@
4.55 # menu control.
4.56
4.57 else:
4.58 - choices = [(key, _(label)) for (key, label) in choices.items()]
4.59 + choices = [(key, _(value_label)) for (key, value_label) in choices.items()]
4.60 choices.sort()
4.61 self.menu(name, default, choices, value is not None and [value] or None, class_="preference")
4.62
4.63 @@ -170,11 +174,13 @@
4.64
4.65 "Show controls for performing actions."
4.66
4.67 + _ = self.get_translator()
4.68 +
4.69 page = self.page
4.70
4.71 page.p(class_="controls")
4.72 - page.input(name="save", type="submit", value="Save")
4.73 - page.input(name="cancel", type="submit", value="Cancel")
4.74 + page.input(name="save", type="submit", value=_("Save"))
4.75 + page.input(name="cancel", type="submit", value=_("Cancel"))
4.76 page.p.close()
4.77
4.78 # Full page output methods.
4.79 @@ -189,7 +195,9 @@
4.80 if not errors:
4.81 return True
4.82
4.83 - self.new_page(title="Profile")
4.84 + _ = self.get_translator()
4.85 +
4.86 + self.new_page(title=_("Profile"))
4.87 page.form(method="POST")
4.88 self.show_preferences(errors)
4.89 self.show_controls()
5.1 --- a/messages/en_GB.imip-agent.po Thu Nov 05 20:00:51 2015 +0100
5.2 +++ b/messages/en_GB.imip-agent.po Fri Nov 06 00:00:55 2015 +0100
5.3 @@ -3,58 +3,20 @@
5.4 # This file is distributed under the same license as the imip-agent package.
5.5 # Paul Boddie <paul@boddie.org.uk>, 2015.
5.6 #
5.7 -#, fuzzy
5.8 msgid ""
5.9 msgstr ""
5.10 "Project-Id-Version: 4bc73eb1e076+\n"
5.11 "Report-Msgid-Bugs-To: \n"
5.12 -"POT-Creation-Date: 2015-11-05 00:55+0100\n"
5.13 -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
5.14 -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
5.15 -"Language-Team: LANGUAGE <LL@li.org>\n"
5.16 +"POT-Creation-Date: 2015-11-05 23:53+0100\n"
5.17 +"PO-Revision-Date: 2015-11-05 22:50+0100\n"
5.18 +"Last-Translator: Paul Boddie <paul@boddie.org.uk>\n"
5.19 +"Language-Team: English\n"
5.20 "Language: \n"
5.21 "MIME-Version: 1.0\n"
5.22 -"Content-Type: text/plain; charset=CHARSET\n"
5.23 +"Content-Type: text/plain; charset=iso-8859-1\n"
5.24 "Content-Transfer-Encoding: 8bit\n"
5.25
5.26 -msgid "Calendar system message"
5.27 -msgstr ""
5.28 -
5.29 -msgid ""
5.30 -"This message contains several different parts, one of which will contain\n"
5.31 -"calendar information that will only be understood by a suitable program.\n"
5.32 -msgstr ""
5.33 -
5.34 -msgid "An addition to an event has been received."
5.35 -msgstr ""
5.36 -
5.37 -msgid "An event cancellation has been received."
5.38 -msgstr ""
5.39 -
5.40 -msgid "A counter proposal to an event invitation has been received."
5.41 -msgstr ""
5.42 -
5.43 -msgid "Your counter proposal to an event invitation has been declined."
5.44 -msgstr ""
5.45 -
5.46 -msgid "Details of an event have been received."
5.47 -msgstr ""
5.48 -
5.49 -msgid "A request for updated event details has been received."
5.50 -msgstr ""
5.51 -
5.52 -msgid "A reply to an event invitation has been received."
5.53 -msgstr ""
5.54 -
5.55 -msgid "An event invitation has been received."
5.56 -msgstr ""
5.57 -
5.58 -msgid "A free/busy update has been received."
5.59 -msgstr ""
5.60 -
5.61 -msgid "A reply to a free/busy request has been received."
5.62 -msgstr ""
5.63 -
5.64 +#: imiptools/handlers/__init__.py:77
5.65 #, python-format
5.66 msgid ""
5.67 "If your mail program cannot handle this message, you may view the details "
5.68 @@ -63,247 +25,473 @@
5.69 "%s"
5.70 msgstr ""
5.71
5.72 +#: imiptools/handlers/person.py:248
5.73 +msgid "An addition to an event has been received."
5.74 +msgstr ""
5.75 +
5.76 +#: imiptools/handlers/person.py:257
5.77 +msgid "An event cancellation has been received."
5.78 +msgstr ""
5.79 +
5.80 +#: imiptools/handlers/person.py:266
5.81 +msgid "A counter proposal to an event invitation has been received."
5.82 +msgstr ""
5.83 +
5.84 +#: imiptools/handlers/person.py:275
5.85 +msgid "Your counter proposal to an event invitation has been declined."
5.86 +msgstr ""
5.87 +
5.88 +#: imiptools/handlers/person.py:284
5.89 +msgid "Details of an event have been received."
5.90 +msgstr ""
5.91 +
5.92 +#: imiptools/handlers/person.py:295
5.93 +msgid "A request for updated event details has been received."
5.94 +msgstr ""
5.95 +
5.96 +#: imiptools/handlers/person.py:304
5.97 +msgid "A reply to an event invitation has been received."
5.98 +msgstr ""
5.99 +
5.100 +#: imiptools/handlers/person.py:313
5.101 +msgid "An event invitation has been received."
5.102 +msgstr ""
5.103 +
5.104 +#: imiptools/handlers/person.py:330
5.105 +msgid "A free/busy update has been received."
5.106 +msgstr ""
5.107 +
5.108 +#: imiptools/handlers/person.py:343
5.109 +msgid "A reply to a free/busy request has been received."
5.110 +msgstr ""
5.111 +
5.112 +#: imiptools/mail.py:32
5.113 +msgid "Calendar system message"
5.114 +msgstr ""
5.115 +
5.116 +#: imiptools/mail.py:34
5.117 +msgid ""
5.118 +"This message contains several different parts, one of which will contain\n"
5.119 +"calendar information that will only be understood by a suitable program.\n"
5.120 +msgstr ""
5.121 +
5.122 +#: imiptools/profile.py:63
5.123 msgid "Add events"
5.124 msgstr ""
5.125
5.126 +#: imiptools/profile.py:64
5.127 msgid "Ignore requests"
5.128 msgstr ""
5.129
5.130 +#: imiptools/profile.py:65
5.131 msgid "Ask for refreshed event details"
5.132 msgstr ""
5.133
5.134 +#: imiptools/profile.py:68
5.135 msgid "Do not respond"
5.136 msgstr ""
5.137
5.138 +#: imiptools/profile.py:69
5.139 msgid "Always respond"
5.140 msgstr ""
5.141
5.142 +#: imiptools/profile.py:72
5.143 msgid "Never"
5.144 msgstr ""
5.145
5.146 +#: imiptools/profile.py:73
5.147 msgid "Always"
5.148 msgstr ""
5.149
5.150 +#: imiptools/profile.py:76
5.151 msgid "Do not notify"
5.152 msgstr ""
5.153
5.154 +#: imiptools/profile.py:77
5.155 msgid "Notify"
5.156 msgstr ""
5.157
5.158 +#: imiptools/profile.py:80
5.159 msgid "Publish"
5.160 msgstr ""
5.161
5.162 +#: imiptools/profile.py:81
5.163 msgid "Do not publish"
5.164 msgstr ""
5.165
5.166 +#: imiptools/profile.py:84
5.167 msgid "Share"
5.168 msgstr ""
5.169
5.170 +#: imiptools/profile.py:85
5.171 msgid "Do not share"
5.172 msgstr ""
5.173
5.174 +#: imiptools/profile.py:88
5.175 msgid "Original message only"
5.176 msgstr ""
5.177
5.178 +#: imiptools/profile.py:89
5.179 msgid "Original message followed by a separate summary message"
5.180 msgstr ""
5.181
5.182 +#: imiptools/profile.py:90
5.183 msgid "Summary message followed by the original message"
5.184 msgstr ""
5.185
5.186 +#: imiptools/profile.py:91
5.187 msgid "Summary message only"
5.188 msgstr ""
5.189
5.190 +#: imiptools/profile.py:92
5.191 msgid "Summary message wrapping the original message"
5.192 msgstr ""
5.193
5.194 +#: imiptools/profile.py:95
5.195 msgid "Anyone"
5.196 msgstr ""
5.197
5.198 +#: imiptools/profile.py:96
5.199 msgid "Existing attendees only"
5.200 msgstr ""
5.201
5.202 +#: imiptools/profile.py:97
5.203 msgid "Never allow organiser replacement"
5.204 msgstr ""
5.205
5.206 +#: imiptools/profile.py:100
5.207 msgid "Participate"
5.208 msgstr ""
5.209
5.210 +#: imiptools/profile.py:101
5.211 msgid "Do not participate"
5.212 msgstr ""
5.213
5.214 +#: imipweb/calendar.py:133
5.215 #, python-format
5.216 msgid "New event at %s"
5.217 msgstr ""
5.218
5.219 +#: imipweb/calendar.py:231
5.220 +msgid "Pending requests:"
5.221 +msgstr ""
5.222 +
5.223 +#: imipweb/calendar.py:253
5.224 msgid "There are no pending requests."
5.225 msgstr ""
5.226
5.227 +#: imipweb/calendar.py:270
5.228 msgid "Participants for scheduling:"
5.229 msgstr ""
5.230
5.231 +#: imipweb/calendar.py:275 imipweb/event.py:426 imipweb/event.py:525
5.232 msgid "Remove"
5.233 msgstr ""
5.234
5.235 +#: imipweb/calendar.py:280
5.236 msgid "Add"
5.237 msgstr ""
5.238
5.239 +#: imipweb/calendar.py:304
5.240 msgid "Select days or periods for a new event."
5.241 msgstr ""
5.242
5.243 +#: imipweb/calendar.py:305
5.244 msgid "Hide busy time periods"
5.245 msgstr ""
5.246
5.247 +#: imipweb/calendar.py:306
5.248 msgid "Show busy time periods"
5.249 msgstr ""
5.250
5.251 +#: imipweb/calendar.py:307
5.252 msgid "Show empty days"
5.253 msgstr ""
5.254
5.255 +#: imipweb/calendar.py:308
5.256 msgid "Hide empty days"
5.257 msgstr ""
5.258
5.259 +#: imipweb/calendar.py:309 imipweb/calendar.py:846
5.260 msgid "Clear selections"
5.261 msgstr ""
5.262
5.263 +#: imipweb/calendar.py:339
5.264 msgid "Show earlier events"
5.265 msgstr ""
5.266
5.267 +#: imipweb/calendar.py:345
5.268 msgid "Show earlier"
5.269 msgstr ""
5.270
5.271 +#: imipweb/calendar.py:354
5.272 msgid "Show later"
5.273 msgstr ""
5.274
5.275 +#: imipweb/calendar.py:361
5.276 msgid "Show later events"
5.277 msgstr ""
5.278
5.279 +#: imipweb/calendar.py:440
5.280 #, python-format
5.281 msgid "Showing events from %(start)s until %(end)s"
5.282 msgstr ""
5.283
5.284 +#: imipweb/calendar.py:444
5.285 #, python-format
5.286 msgid "Showing events from %s"
5.287 msgstr ""
5.288
5.289 +#: imipweb/calendar.py:446
5.290 #, python-format
5.291 msgid "Showing events until %s"
5.292 msgstr ""
5.293
5.294 +#: imipweb/calendar.py:470
5.295 msgid "Pending requests"
5.296 msgstr ""
5.297
5.298 +#: imipweb/calendar.py:470
5.299 msgid "Your schedule"
5.300 msgstr ""
5.301
5.302 +#: imipweb/calendar.py:589
5.303 msgid "Calendar"
5.304 msgstr ""
5.305
5.306 +#: imipweb/calendar.py:840
5.307 msgid "Summary:"
5.308 msgstr ""
5.309
5.310 +#: imipweb/calendar.py:842
5.311 msgid "New event"
5.312 msgstr ""
5.313
5.314 +#: imipweb/calendar.py:993
5.315 msgid "(Participant is busy)"
5.316 msgstr ""
5.317
5.318 +#: imipweb/calendar.py:1076
5.319 msgid "Select/deselect period"
5.320 msgstr ""
5.321
5.322 +#: imipweb/event.py:44
5.323 +msgid "Summary"
5.324 +msgstr ""
5.325 +
5.326 +#: imipweb/event.py:45 imipweb/event.py:629 imipweb/event.py:742
5.327 +msgid "Start"
5.328 +msgstr ""
5.329 +
5.330 +#: imipweb/event.py:46 imipweb/event.py:630 imipweb/event.py:743
5.331 +msgid "End"
5.332 +msgstr ""
5.333 +
5.334 +#: imipweb/event.py:47
5.335 +msgid "Organiser"
5.336 +msgstr ""
5.337 +
5.338 +#: imipweb/event.py:48 imipweb/event.py:595
5.339 +msgid "Attendee"
5.340 +msgstr ""
5.341 +
5.342 +#: imipweb/event.py:52
5.343 +msgid "Not confirmed"
5.344 +msgstr ""
5.345 +
5.346 +#: imipweb/event.py:53
5.347 +msgid "Attending"
5.348 +msgstr ""
5.349 +
5.350 +#: imipweb/event.py:54
5.351 +msgid "Tentatively attending"
5.352 +msgstr ""
5.353 +
5.354 +#: imipweb/event.py:55
5.355 +msgid "Not attending"
5.356 +msgstr ""
5.357 +
5.358 +#: imipweb/event.py:56
5.359 +msgid "Delegated"
5.360 +msgstr ""
5.361 +
5.362 +#: imipweb/event.py:57
5.363 +msgid "Not indicated"
5.364 +msgstr ""
5.365 +
5.366 +#: imipweb/event.py:154
5.367 msgid "This event has not been shared."
5.368 msgstr ""
5.369
5.370 +#: imipweb/event.py:159
5.371 msgid "An action is required for this request:"
5.372 msgstr ""
5.373
5.374 +#: imipweb/event.py:162
5.375 msgid "Send reply"
5.376 msgstr ""
5.377
5.378 +#: imipweb/event.py:164 imipweb/event.py:183
5.379 msgid "Discard event"
5.380 msgstr ""
5.381
5.382 +#: imipweb/event.py:166 imipweb/event.py:186
5.383 msgid "Return to the calendar"
5.384 msgstr ""
5.385
5.386 +#: imipweb/event.py:170
5.387 msgid "As organiser, you can perform the following:"
5.388 msgstr ""
5.389
5.390 +#: imipweb/event.py:173
5.391 msgid "Update event"
5.392 msgstr ""
5.393
5.394 +#: imipweb/event.py:177
5.395 msgid "Ignore counter-proposals"
5.396 msgstr ""
5.397
5.398 +#: imipweb/event.py:181
5.399 msgid "Cancel event"
5.400 msgstr ""
5.401
5.402 +#: imipweb/event.py:188
5.403 msgid "Save without sending"
5.404 msgstr ""
5.405
5.406 +#: imipweb/event.py:227 imipweb/event.py:741 imipweb/event.py:1290
5.407 msgid "Event"
5.408 msgstr ""
5.409
5.410 +#: imipweb/event.py:274
5.411 msgid "First occurrence replaced by a separate event"
5.412 msgstr ""
5.413
5.414 +#: imipweb/event.py:283
5.415 msgid "First occurrence excluded"
5.416 msgstr ""
5.417
5.418 +#: imipweb/event.py:294
5.419 msgid "Add a recurrence"
5.420 msgstr ""
5.421
5.422 +#: imipweb/event.py:335
5.423 msgid "Add attendee"
5.424 msgstr ""
5.425
5.426 +#: imipweb/event.py:428
5.427 msgid "(Uninvited)"
5.428 msgstr ""
5.429
5.430 +#: imipweb/event.py:429
5.431 msgid "Re-invite"
5.432 msgstr ""
5.433
5.434 +#: imipweb/event.py:453
5.435 msgid "This event modifies a recurring event."
5.436 msgstr ""
5.437
5.438 +#: imipweb/event.py:463
5.439 #, python-format
5.440 msgid "This event occurs on the following occasions within the next %d days:"
5.441 msgstr ""
5.442
5.443 -msgid "Occurrence from rule"
5.444 -msgstr ""
5.445 -
5.446 +#: imipweb/event.py:494
5.447 msgid "Occurrence"
5.448 msgstr ""
5.449
5.450 +#: imipweb/event.py:494
5.451 +msgid "Occurrence from rule"
5.452 +msgstr ""
5.453 +
5.454 +#: imipweb/event.py:527
5.455 msgid "(Removed)"
5.456 msgstr ""
5.457
5.458 +#: imipweb/event.py:528
5.459 msgid "Re-add"
5.460 msgstr ""
5.461
5.462 +#: imipweb/event.py:590
5.463 msgid "The following attendees have been suggested for this event:"
5.464 msgstr ""
5.465
5.466 -msgid "Attendee"
5.467 -msgstr ""
5.468 -
5.469 +#: imipweb/event.py:596 imipweb/event.py:626
5.470 msgid "Suggested by..."
5.471 msgstr ""
5.472
5.473 +#: imipweb/event.py:620
5.474 msgid "The following periods have been suggested for this event:"
5.475 msgstr ""
5.476
5.477 +#: imipweb/event.py:625
5.478 msgid "Periods"
5.479 msgstr ""
5.480
5.481 -msgid "Start"
5.482 -msgstr ""
5.483 -
5.484 -msgid "End"
5.485 -msgstr ""
5.486 -
5.487 +#: imipweb/event.py:736
5.488 msgid "This event conflicts with others:"
5.489 msgstr ""
5.490
5.491 +#: imipweb/event.py:763
5.492 msgid "(Unspecified event)"
5.493 msgstr ""
5.494 +
5.495 +#: imipweb/profile.py:38
5.496 +msgid "Participate in the calendar system"
5.497 +msgstr ""
5.498 +
5.499 +#: imipweb/profile.py:39
5.500 +msgid "Your common name"
5.501 +msgstr ""
5.502 +
5.503 +#: imipweb/profile.py:40
5.504 +msgid "Language"
5.505 +msgstr ""
5.506 +
5.507 +#: imipweb/profile.py:41
5.508 +msgid "Time zone/regime"
5.509 +msgstr ""
5.510 +
5.511 +#: imipweb/profile.py:42
5.512 +msgid "How to present incoming calendar messages"
5.513 +msgstr ""
5.514 +
5.515 +#: imipweb/profile.py:43
5.516 +msgid "Share free/busy information"
5.517 +msgstr ""
5.518 +
5.519 +#: imipweb/profile.py:44
5.520 +msgid "Bundle free/busy details with messages"
5.521 +msgstr ""
5.522 +
5.523 +#: imipweb/profile.py:45
5.524 +msgid "Publish free/busy details via the Web"
5.525 +msgstr ""
5.526 +
5.527 +#: imipweb/profile.py:46
5.528 +msgid "Deliver details of received free/busy messages"
5.529 +msgstr ""
5.530 +
5.531 +#: imipweb/profile.py:47
5.532 +msgid "How to respond to messages adding events"
5.533 +msgstr ""
5.534 +
5.535 +#: imipweb/profile.py:48
5.536 +msgid "How to handle event refresh requests"
5.537 +msgstr ""
5.538 +
5.539 +#: imipweb/profile.py:49
5.540 +msgid "Recognise whom as a new organiser of an event?"
5.541 +msgstr ""
5.542 +
5.543 +#: imipweb/profile.py:182
5.544 +msgid "Save"
5.545 +msgstr ""
5.546 +
5.547 +#: imipweb/profile.py:183
5.548 +msgid "Cancel"
5.549 +msgstr ""
5.550 +
5.551 +#: imipweb/profile.py:200
5.552 +msgid "Profile"
5.553 +msgstr ""
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
6.2 +++ b/messages/nb_NO.imip-agent.po Fri Nov 06 00:00:55 2015 +0100
6.3 @@ -0,0 +1,504 @@
6.4 +# Translations for imip-agent.
6.5 +# Copyright (C) 2015 Paul Boddie <paul@boddie.org.uk>
6.6 +# This file is distributed under the same license as the imip-agent package.
6.7 +# Paul Boddie <paul@boddie.org.uk>, 2015.
6.8 +#
6.9 +msgid ""
6.10 +msgstr ""
6.11 +"Project-Id-Version: 71b35ab1f0bd+\n"
6.12 +"Report-Msgid-Bugs-To: \n"
6.13 +"POT-Creation-Date: 2015-11-05 23:53+0100\n"
6.14 +"PO-Revision-Date: 2015-11-04 18:18+0100\n"
6.15 +"Last-Translator: Paul Boddie <paul@boddie.org.uk>\n"
6.16 +"Language-Team: Norwegian Bokmål\n"
6.17 +"Language: \n"
6.18 +"MIME-Version: 1.0\n"
6.19 +"Content-Type: text/plain; charset=iso-8859-1\n"
6.20 +"Content-Transfer-Encoding: 8bit\n"
6.21 +
6.22 +#: imiptools/handlers/__init__.py:77
6.23 +#, python-format
6.24 +msgid ""
6.25 +"If your mail program cannot handle this message, you may view the details "
6.26 +"here:\n"
6.27 +"\n"
6.28 +"%s"
6.29 +msgstr ""
6.30 +"Hvis e-postprogrammet ditt ikke kan vise denne meldingen, kan du se "
6.31 +"detaljene her:\n"
6.32 +"\n"
6.33 +"%s"
6.34 +
6.35 +#: imiptools/handlers/person.py:248
6.36 +msgid "An addition to an event has been received."
6.37 +msgstr "En tilleggshendelse er blitt mottatt."
6.38 +
6.39 +#: imiptools/handlers/person.py:257
6.40 +msgid "An event cancellation has been received."
6.41 +msgstr "Et avbud er blitt mottatt."
6.42 +
6.43 +#: imiptools/handlers/person.py:266
6.44 +msgid "A counter proposal to an event invitation has been received."
6.45 +msgstr "Et motforslag for en hendelse er blitt mottatt."
6.46 +
6.47 +#: imiptools/handlers/person.py:275
6.48 +msgid "Your counter proposal to an event invitation has been declined."
6.49 +msgstr "Ditt motforslag for en hendelse er blitt avvist."
6.50 +
6.51 +#: imiptools/handlers/person.py:284
6.52 +msgid "Details of an event have been received."
6.53 +msgstr "Detaljer for en hendelse er blitt mottatt."
6.54 +
6.55 +#: imiptools/handlers/person.py:295
6.56 +msgid "A request for updated event details has been received."
6.57 +msgstr "En forespørsel for oppdaterte hendelsesdetaljer er blitt mottatt."
6.58 +
6.59 +#: imiptools/handlers/person.py:304
6.60 +msgid "A reply to an event invitation has been received."
6.61 +msgstr "Et svar til en invitasjon er blitt mottatt."
6.62 +
6.63 +#: imiptools/handlers/person.py:313
6.64 +msgid "An event invitation has been received."
6.65 +msgstr "En invitasjon er blitt mottatt."
6.66 +
6.67 +#: imiptools/handlers/person.py:330
6.68 +msgid "A free/busy update has been received."
6.69 +msgstr "En oppdatering om ledige/opptatte perioder er blitt mottatt."
6.70 +
6.71 +#: imiptools/handlers/person.py:343
6.72 +msgid "A reply to a free/busy request has been received."
6.73 +msgstr "Din forespørsel om ledige/opptatte perioder er blitt behandlet."
6.74 +
6.75 +#: imiptools/mail.py:32
6.76 +msgid "Calendar system message"
6.77 +msgstr "Melding fra kalendersystemet"
6.78 +
6.79 +#: imiptools/mail.py:34
6.80 +msgid ""
6.81 +"This message contains several different parts, one of which will contain\n"
6.82 +"calendar information that will only be understood by a suitable program.\n"
6.83 +msgstr ""
6.84 +"Denne meldingen inneholder seksjoner med kalenderdata som krever et "
6.85 +"passende\n"
6.86 +"e-postprogram.\n"
6.87 +
6.88 +#: imiptools/profile.py:63
6.89 +msgid "Add events"
6.90 +msgstr "Legge til hendelser"
6.91 +
6.92 +#: imiptools/profile.py:64
6.93 +msgid "Ignore requests"
6.94 +msgstr "Overse forespørsler"
6.95 +
6.96 +#: imiptools/profile.py:65
6.97 +msgid "Ask for refreshed event details"
6.98 +msgstr "Be om oppdaterte hendelsesdetaljer"
6.99 +
6.100 +#: imiptools/profile.py:68
6.101 +msgid "Do not respond"
6.102 +msgstr "Ikke svare på forespørsler"
6.103 +
6.104 +#: imiptools/profile.py:69
6.105 +msgid "Always respond"
6.106 +msgstr "Alltid svare på forespørsler"
6.107 +
6.108 +#: imiptools/profile.py:72
6.109 +msgid "Never"
6.110 +msgstr "Aldri"
6.111 +
6.112 +#: imiptools/profile.py:73
6.113 +msgid "Always"
6.114 +msgstr "Alltid"
6.115 +
6.116 +#: imiptools/profile.py:76
6.117 +msgid "Do not notify"
6.118 +msgstr "Ikke varsle"
6.119 +
6.120 +#: imiptools/profile.py:77
6.121 +msgid "Notify"
6.122 +msgstr "Varsle"
6.123 +
6.124 +#: imiptools/profile.py:80
6.125 +msgid "Publish"
6.126 +msgstr "Publisere"
6.127 +
6.128 +#: imiptools/profile.py:81
6.129 +msgid "Do not publish"
6.130 +msgstr "Ikke publisere"
6.131 +
6.132 +#: imiptools/profile.py:84
6.133 +msgid "Share"
6.134 +msgstr "Dele"
6.135 +
6.136 +#: imiptools/profile.py:85
6.137 +msgid "Do not share"
6.138 +msgstr "Ikke dele"
6.139 +
6.140 +#: imiptools/profile.py:88
6.141 +msgid "Original message only"
6.142 +msgstr "Kun den opprinnelige meldingen"
6.143 +
6.144 +#: imiptools/profile.py:89
6.145 +msgid "Original message followed by a separate summary message"
6.146 +msgstr "Den opprinnelige meldingen og så en sammendragsmelding"
6.147 +
6.148 +#: imiptools/profile.py:90
6.149 +msgid "Summary message followed by the original message"
6.150 +msgstr "En sammendragsmelding og så den opprinnelige meldingen"
6.151 +
6.152 +#: imiptools/profile.py:91
6.153 +msgid "Summary message only"
6.154 +msgstr "Kun en sammendragsmelding"
6.155 +
6.156 +#: imiptools/profile.py:92
6.157 +msgid "Summary message wrapping the original message"
6.158 +msgstr "En sammendragsmelding som inneholder den opprinnelige meldingen"
6.159 +
6.160 +#: imiptools/profile.py:95
6.161 +msgid "Anyone"
6.162 +msgstr "Alle"
6.163 +
6.164 +#: imiptools/profile.py:96
6.165 +msgid "Existing attendees only"
6.166 +msgstr "Kun eksisterende deltakere"
6.167 +
6.168 +#: imiptools/profile.py:97
6.169 +msgid "Never allow organiser replacement"
6.170 +msgstr "Aldri tillate utbytting av arrangører"
6.171 +
6.172 +#: imiptools/profile.py:100
6.173 +msgid "Participate"
6.174 +msgstr "Delta"
6.175 +
6.176 +#: imiptools/profile.py:101
6.177 +msgid "Do not participate"
6.178 +msgstr "Ikke delta"
6.179 +
6.180 +#: imipweb/calendar.py:133
6.181 +#, python-format
6.182 +msgid "New event at %s"
6.183 +msgstr "Ny hendelse på %s"
6.184 +
6.185 +#: imipweb/calendar.py:231
6.186 +msgid "Pending requests:"
6.187 +msgstr "Forespørsler som venter"
6.188 +
6.189 +#: imipweb/calendar.py:253
6.190 +msgid "There are no pending requests."
6.191 +msgstr "Ingen forespørsler"
6.192 +
6.193 +#: imipweb/calendar.py:270
6.194 +msgid "Participants for scheduling:"
6.195 +msgstr "Deltakere for gruppeplanlegging:"
6.196 +
6.197 +#: imipweb/calendar.py:275 imipweb/event.py:426 imipweb/event.py:525
6.198 +msgid "Remove"
6.199 +msgstr "Fjerne"
6.200 +
6.201 +#: imipweb/calendar.py:280
6.202 +msgid "Add"
6.203 +msgstr "Legge til"
6.204 +
6.205 +#: imipweb/calendar.py:304
6.206 +msgid "Select days or periods for a new event."
6.207 +msgstr "Velg dager eller perioder for en ny hendelse."
6.208 +
6.209 +#: imipweb/calendar.py:305
6.210 +msgid "Hide busy time periods"
6.211 +msgstr "Skjule opptatte perioder"
6.212 +
6.213 +#: imipweb/calendar.py:306
6.214 +msgid "Show busy time periods"
6.215 +msgstr "Vise opptatte perioder"
6.216 +
6.217 +#: imipweb/calendar.py:307
6.218 +msgid "Show empty days"
6.219 +msgstr "Vise ledige dager"
6.220 +
6.221 +#: imipweb/calendar.py:308
6.222 +msgid "Hide empty days"
6.223 +msgstr "Skjule ledige dager"
6.224 +
6.225 +#: imipweb/calendar.py:309 imipweb/calendar.py:846
6.226 +msgid "Clear selections"
6.227 +msgstr "Nullstille valgte perioder"
6.228 +
6.229 +#: imipweb/calendar.py:339
6.230 +msgid "Show earlier events"
6.231 +msgstr "Tidligere hendelser"
6.232 +
6.233 +#: imipweb/calendar.py:345
6.234 +msgid "Show earlier"
6.235 +msgstr "Tidligere"
6.236 +
6.237 +#: imipweb/calendar.py:354
6.238 +msgid "Show later"
6.239 +msgstr "Senere"
6.240 +
6.241 +#: imipweb/calendar.py:361
6.242 +msgid "Show later events"
6.243 +msgstr "Senere hendelser"
6.244 +
6.245 +#: imipweb/calendar.py:440
6.246 +#, python-format
6.247 +msgid "Showing events from %(start)s until %(end)s"
6.248 +msgstr "Viser hendelser fra %(start)s frem til %(end)s"
6.249 +
6.250 +#: imipweb/calendar.py:444
6.251 +#, python-format
6.252 +msgid "Showing events from %s"
6.253 +msgstr "Viser hendelser fra %s"
6.254 +
6.255 +#: imipweb/calendar.py:446
6.256 +#, python-format
6.257 +msgid "Showing events until %s"
6.258 +msgstr "Viser hendelser frem til %s"
6.259 +
6.260 +#: imipweb/calendar.py:470
6.261 +msgid "Pending requests"
6.262 +msgstr "Forespørsler som venter"
6.263 +
6.264 +#: imipweb/calendar.py:470
6.265 +msgid "Your schedule"
6.266 +msgstr "Din tidsplan"
6.267 +
6.268 +#: imipweb/calendar.py:589
6.269 +msgid "Calendar"
6.270 +msgstr "Kalender"
6.271 +
6.272 +#: imipweb/calendar.py:840
6.273 +msgid "Summary:"
6.274 +msgstr "Sammendrag:"
6.275 +
6.276 +#: imipweb/calendar.py:842
6.277 +msgid "New event"
6.278 +msgstr "Ny hendelse"
6.279 +
6.280 +#: imipweb/calendar.py:993
6.281 +msgid "(Participant is busy)"
6.282 +msgstr "(Deltaker er opptatt)"
6.283 +
6.284 +#: imipweb/calendar.py:1076
6.285 +msgid "Select/deselect period"
6.286 +msgstr "Velge/nullstille periode"
6.287 +
6.288 +#: imipweb/event.py:44
6.289 +msgid "Summary"
6.290 +msgstr "Sammendrag"
6.291 +
6.292 +#: imipweb/event.py:45 imipweb/event.py:629 imipweb/event.py:742
6.293 +msgid "Start"
6.294 +msgstr "Start"
6.295 +
6.296 +#: imipweb/event.py:46 imipweb/event.py:630 imipweb/event.py:743
6.297 +msgid "End"
6.298 +msgstr "Slutt"
6.299 +
6.300 +#: imipweb/event.py:47
6.301 +msgid "Organiser"
6.302 +msgstr "Arrangør"
6.303 +
6.304 +#: imipweb/event.py:48 imipweb/event.py:595
6.305 +msgid "Attendee"
6.306 +msgstr "Deltaker"
6.307 +
6.308 +#: imipweb/event.py:52
6.309 +msgid "Not confirmed"
6.310 +msgstr "Ikke bekreftet"
6.311 +
6.312 +#: imipweb/event.py:53
6.313 +msgid "Attending"
6.314 +msgstr "Deltar"
6.315 +
6.316 +#: imipweb/event.py:54
6.317 +msgid "Tentatively attending"
6.318 +msgstr "Delta kanskje"
6.319 +
6.320 +#: imipweb/event.py:55
6.321 +msgid "Not attending"
6.322 +msgstr "Deltar ikke"
6.323 +
6.324 +#: imipweb/event.py:56
6.325 +msgid "Delegated"
6.326 +msgstr "Har delegert til en annen"
6.327 +
6.328 +#: imipweb/event.py:57
6.329 +msgid "Not indicated"
6.330 +msgstr "Ikke angitt"
6.331 +
6.332 +#: imipweb/event.py:154
6.333 +msgid "This event has not been shared."
6.334 +msgstr "Detaljer for en hendelse er blitt mottatt."
6.335 +
6.336 +#: imipweb/event.py:159
6.337 +msgid "An action is required for this request:"
6.338 +msgstr "Et valg må tas med denne forespørselen:"
6.339 +
6.340 +#: imipweb/event.py:162
6.341 +msgid "Send reply"
6.342 +msgstr "Send svar"
6.343 +
6.344 +#: imipweb/event.py:164 imipweb/event.py:183
6.345 +msgid "Discard event"
6.346 +msgstr "Kaste hendelsen"
6.347 +
6.348 +#: imipweb/event.py:166 imipweb/event.py:186
6.349 +msgid "Return to the calendar"
6.350 +msgstr "Tilbake til kalenderen"
6.351 +
6.352 +#: imipweb/event.py:170
6.353 +msgid "As organiser, you can perform the following:"
6.354 +msgstr "Som arrangør kan du utføre følgende:"
6.355 +
6.356 +#: imipweb/event.py:173
6.357 +msgid "Update event"
6.358 +msgstr "Oppdatere hendelsen"
6.359 +
6.360 +#: imipweb/event.py:177
6.361 +msgid "Ignore counter-proposals"
6.362 +msgstr "Overse motforslag"
6.363 +
6.364 +#: imipweb/event.py:181
6.365 +msgid "Cancel event"
6.366 +msgstr "Send avbud for hendelsen"
6.367 +
6.368 +#: imipweb/event.py:188
6.369 +msgid "Save without sending"
6.370 +msgstr "Lagre uten å sende"
6.371 +
6.372 +#: imipweb/event.py:227 imipweb/event.py:741 imipweb/event.py:1290
6.373 +msgid "Event"
6.374 +msgstr "Hendelse"
6.375 +
6.376 +#: imipweb/event.py:274
6.377 +msgid "First occurrence replaced by a separate event"
6.378 +msgstr "Den første perioden er erstattet med en annen hendelse"
6.379 +
6.380 +#: imipweb/event.py:283
6.381 +msgid "First occurrence excluded"
6.382 +msgstr "Den første perioden ble fjernet"
6.383 +
6.384 +#: imipweb/event.py:294
6.385 +msgid "Add a recurrence"
6.386 +msgstr "Legge til en ny periode"
6.387 +
6.388 +#: imipweb/event.py:335
6.389 +msgid "Add attendee"
6.390 +msgstr "Legge til en deltaker"
6.391 +
6.392 +#: imipweb/event.py:428
6.393 +msgid "(Uninvited)"
6.394 +msgstr "(Ikke invitert)"
6.395 +
6.396 +#: imipweb/event.py:429
6.397 +msgid "Re-invite"
6.398 +msgstr "Invitere på nytt"
6.399 +
6.400 +#: imipweb/event.py:453
6.401 +msgid "This event modifies a recurring event."
6.402 +msgstr "Denne hendelsen endrer en period i en hendelse som gjentar seg."
6.403 +
6.404 +#: imipweb/event.py:463
6.405 +#, python-format
6.406 +msgid "This event occurs on the following occasions within the next %d days:"
6.407 +msgstr "Denne hendelsen forekommer på følgende anledninger innen %d dager:"
6.408 +
6.409 +#: imipweb/event.py:494
6.410 +msgid "Occurrence"
6.411 +msgstr "Forekomst"
6.412 +
6.413 +#: imipweb/event.py:494
6.414 +msgid "Occurrence from rule"
6.415 +msgstr "Forekomst fra regel"
6.416 +
6.417 +#: imipweb/event.py:527
6.418 +msgid "(Removed)"
6.419 +msgstr "(Fjernet)"
6.420 +
6.421 +#: imipweb/event.py:528
6.422 +msgid "Re-add"
6.423 +msgstr "Legge til på nytt"
6.424 +
6.425 +#: imipweb/event.py:590
6.426 +msgid "The following attendees have been suggested for this event:"
6.427 +msgstr "Følgende deltakere er blitt foreslått for denne hendelsen:"
6.428 +
6.429 +#: imipweb/event.py:596 imipweb/event.py:626
6.430 +msgid "Suggested by..."
6.431 +msgstr "Foreslått av..."
6.432 +
6.433 +#: imipweb/event.py:620
6.434 +msgid "The following periods have been suggested for this event:"
6.435 +msgstr "Følgende perioder er blitt foreslått for denne hendelsen:"
6.436 +
6.437 +#: imipweb/event.py:625
6.438 +msgid "Periods"
6.439 +msgstr "Perioder"
6.440 +
6.441 +#: imipweb/event.py:736
6.442 +msgid "This event conflicts with others:"
6.443 +msgstr "Hendelsen er i konflikt med andre i tidsplanen:"
6.444 +
6.445 +#: imipweb/event.py:763
6.446 +msgid "(Unspecified event)"
6.447 +msgstr "(Ikke angitt hendelse)"
6.448 +
6.449 +#: imipweb/profile.py:38
6.450 +msgid "Participate in the calendar system"
6.451 +msgstr "Delta i kalendersystemet"
6.452 +
6.453 +#: imipweb/profile.py:39
6.454 +msgid "Your common name"
6.455 +msgstr "Ditt navn"
6.456 +
6.457 +#: imipweb/profile.py:40
6.458 +msgid "Language"
6.459 +msgstr "Språk"
6.460 +
6.461 +#: imipweb/profile.py:41
6.462 +msgid "Time zone/regime"
6.463 +msgstr "Tidssone"
6.464 +
6.465 +#: imipweb/profile.py:42
6.466 +msgid "How to present incoming calendar messages"
6.467 +msgstr "Hvordan fremstille kalendermeldinger"
6.468 +
6.469 +#: imipweb/profile.py:43
6.470 +msgid "Share free/busy information"
6.471 +msgstr "Dele ledige og opptatte perioder med andre"
6.472 +
6.473 +#: imipweb/profile.py:44
6.474 +msgid "Bundle free/busy details with messages"
6.475 +msgstr "Legge dine ledige og opptatte perioder ved meldinger til andre"
6.476 +
6.477 +#: imipweb/profile.py:45
6.478 +msgid "Publish free/busy details via the Web"
6.479 +msgstr "Publisere dine ledige og opptatte perioder på Web"
6.480 +
6.481 +#: imipweb/profile.py:46
6.482 +msgid "Deliver details of received free/busy messages"
6.483 +msgstr "Varsle om mottatte meldinger med ledige og opptatte perioder"
6.484 +
6.485 +#: imipweb/profile.py:47
6.486 +msgid "How to respond to messages adding events"
6.487 +msgstr "Hvordan svare på meldinger som vil legge inn nye hendelser"
6.488 +
6.489 +#: imipweb/profile.py:48
6.490 +msgid "How to handle event refresh requests"
6.491 +msgstr "Hvordan håndtere oppdateringsforespørsler"
6.492 +
6.493 +#: imipweb/profile.py:49
6.494 +msgid "Recognise whom as a new organiser of an event?"
6.495 +msgstr "Hvem får bli ny arrangør for en hendelse?"
6.496 +
6.497 +#: imipweb/profile.py:182
6.498 +msgid "Save"
6.499 +msgstr "Lagre"
6.500 +
6.501 +#: imipweb/profile.py:183
6.502 +msgid "Cancel"
6.503 +msgstr "Tilbake"
6.504 +
6.505 +#: imipweb/profile.py:200
6.506 +msgid "Profile"
6.507 +msgstr "Brukerprofil"
7.1 --- a/tools/i18n_format.sh Thu Nov 05 20:00:51 2015 +0100
7.2 +++ b/tools/i18n_format.sh Fri Nov 06 00:00:55 2015 +0100
7.3 @@ -4,5 +4,6 @@
7.4
7.5 for FILENAME in messages/*.po ; do
7.6 LOCALE_ID=`basename "$FILENAME" ".$DOMAIN.po"`
7.7 + mkdir -p "locale/$LOCALE_ID/LC_MESSAGES"
7.8 msgfmt -o "locale/$LOCALE_ID/LC_MESSAGES/$DOMAIN.mo" "$FILENAME"
7.9 done
8.1 --- a/tools/i18n_messages.sh Thu Nov 05 20:00:51 2015 +0100
8.2 +++ b/tools/i18n_messages.sh Fri Nov 06 00:00:55 2015 +0100
8.3 @@ -1,14 +1,23 @@
8.4 #!/bin/sh
8.5
8.6 -find imiptools imipweb -type f -name '*.py' | xargs xgettext -d imip-agent --no-location
8.7 +# Obtain messages from the Python files.
8.8 +
8.9 + find imiptools imipweb -type f -name '*.py' \
8.10 +| xargs xgettext -d imip-agent --sort-by-file \
8.11 + --copyright-holder="Paul Boddie <paul@boddie.org.uk>" \
8.12 + --package-name="imip-agent" --package-version=`hg id | cut -d ' ' -f 1`
8.13 +
8.14 +# Set the default charset.
8.15
8.16 - sed "s/SOME DESCRIPTIVE TITLE/Translations for imip-agent/" imip-agent.po \
8.17 -| sed "s/YEAR THE PACKAGE'S COPYRIGHT HOLDER/2015 Paul Boddie <paul@boddie.org.uk>/" \
8.18 -| sed "s/FIRST AUTHOR <EMAIL@ADDRESS>, YEAR/Paul Boddie <paul@boddie.org.uk>, 2015/" \
8.19 -| sed "s/PACKAGE VERSION/`hg id | cut -d ' ' -f 1`/" \
8.20 -| sed "s/PACKAGE/imip-agent/" \
8.21 + sed "s/CHARSET/iso-8859-1/" imip-agent.po \
8.22 > imip-agent.pot
8.23
8.24 +# Remove the original file.
8.25 +
8.26 +rm imip-agent.po
8.27 +
8.28 +# Merge messages with the existing translations.
8.29 +
8.30 for FILENAME in messages/*.po ; do
8.31 msgmerge --update "$FILENAME" imip-agent.pot
8.32 done
9.1 --- a/tools/install.sh Thu Nov 05 20:00:51 2015 +0100
9.2 +++ b/tools/install.sh Fri Nov 06 00:00:55 2015 +0100
9.3 @@ -8,6 +8,12 @@
9.4 . /etc/imip-agent/config.sh
9.5 fi
9.6
9.7 +if [ "$1" = "--no-locale-dir" ]; then
9.8 + NO_LOCALE_DIR=$1
9.9 +else
9.10 + NO_LOCALE_DIR=
9.11 +fi
9.12 +
9.13 # Agents and modules.
9.14
9.15 AGENTS="imip_person.py imip_person_outgoing.py imip_resource.py"
9.16 @@ -91,3 +97,12 @@
9.17 fi
9.18
9.19 cp imipweb/*.py "$WEB_INSTALL_DIR/imipweb/"
9.20 +
9.21 +# Locale directory.
9.22 +
9.23 +if [ ! "$NO_LOCALE_DIR" ] && [ -e "locale" ]; then
9.24 + for DIR in "locale/"*"/LC_MESSAGES" ; do
9.25 + mkdir -p "$INSTALL_DIR/$DIR"
9.26 + cp "$DIR/"*.mo "$INSTALL_DIR/$DIR/"
9.27 + done
9.28 +fi