2 // +----------------------------------------------------------------------+
3 // | Anuko Time Tracker
4 // +----------------------------------------------------------------------+
5 // | Copyright (c) Anuko International Ltd. (https://www.anuko.com)
6 // +----------------------------------------------------------------------+
7 // | LIBERAL FREEWARE LICENSE: This source code document may be used
8 // | by anyone for any purpose, and freely redistributed alone or in
9 // | combination with other software, provided that the license is obeyed.
11 // | There are only two ways to violate the license:
13 // | 1. To redistribute this code in source form, with the copyright
14 // | notice or license removed or altered. (Distributing in compiled
15 // | forms without embedded copyright notices is permitted).
17 // | 2. To redistribute modified versions of this code in *any* form
18 // | that bears insufficient indications that the modifications are
19 // | not the work of the original author(s).
21 // | This license applies to this document only, not any other software
22 // | that it may be combined with.
24 // +----------------------------------------------------------------------+
26 // | https://www.anuko.com/time_tracker/credits.htm
27 // +----------------------------------------------------------------------+
29 // Note: escape apostrophes with THREE backslashes, like here: choisir l\\\'option.
30 // Other characters (such as double-quotes in http links, etc.) do not have to be escaped.
32 $i18n_language = 'Norsk';
33 $i18n_months = array('Januar', 'Februar', 'Mars', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Desember');
34 $i18n_weekdays = array('Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag');
35 // TODO: check translation of $i18n_weekdays_short.
36 $i18n_weekdays_short = array('Sø', 'Ma', 'Ti', 'On', 'To', 'Fr', 'Lø');
38 $i18n_holidays = array('01/01', '04/05', '04/09', '04/10', '04/12', '04/13', '05/01', '05/17', '05/21', '05/31', '06/01', '12/25', '12/26');
40 $i18n_key_words = array(
42 // Menus - short selection strings that are displayed on top of application web pages.
43 // Example: https://timetracker.anuko.com (black menu on top).
44 'menu.login' => 'Innlogging',
45 'menu.logout' => 'Logg ut',
46 // TODO: translate the following.
47 // 'menu.forum' => 'Forum',
48 'menu.help' => 'Hjelp',
49 // TODO: translate the following.
50 // 'menu.create_team' => 'Create Team',
51 'menu.profile' => 'Profil',
53 // TODO: translate the following.
54 // 'menu.expenses' => 'Expenses',
55 'menu.reports' => 'Rapporter',
56 'menu.charts' => 'Diagrammer',
57 'menu.projects' => 'Prosjekter',
58 // TODO: translate the following.
59 // 'menu.tasks' => 'Tasks',
60 // 'menu.users' => 'Users',
61 // 'menu.teams' => 'Teams',
62 'menu.export' => 'Eksport',
63 'menu.clients' => 'Klienter',
64 'menu.options' => 'Opsjoner',
66 // Footer - strings on the bottom of most pages.
67 // TODO: translate the following.
68 // 'footer.contribute_msg' => 'You can contribute to Time Tracker in different ways.',
69 // 'footer.credits' => 'Credits',
70 // 'footer.license' => 'License',
71 // 'footer.improve' => 'Contribute', // Translators: this could mean "Improve", if it makes better sense in your language.
72 // This is a link to a webpage that describes how to contribute to the project.
75 // TODO: translate the following.
76 // 'error.access_denied' => 'Access denied.',
77 // 'error.sys' => 'System error.',
78 'error.db' => 'Databasefeil.',
79 'error.field' => 'Feil "{0}" data.',
80 'error.empty' => 'Feltet "{0}" er tomt.',
81 'error.not_equal' => 'Feltet "{0}" stemmer ikke med "{1}".',
82 // TODO: translate the following.
83 // 'error.interval' => 'Field "{0}" must be greater than "{1}".',
84 'error.project' => 'Velg prosjekt.',
85 // TODO: translate the following.
86 // 'error.task' => 'Select task.',
87 // 'error.client' => 'Select client.',
88 // 'error.report' => 'Select report.',
89 // 'error.record' => 'Select record.',
90 'error.auth' => 'Feil brukernavn eller passord.',
91 'error.user_exists' => 'Bruker med et slikt brukernavn eksisterer allerede.',
92 'error.project_exists' => 'Et prosjekt med dette navnet er allerede opprettet.',
93 // TODO: translate the following.
94 // 'error.task_exists' => 'Task with this name already exists.',
95 'error.client_exists' => 'En klient med dette navnet er allerede opprettet.',
96 // TODO: translate the following.
97 // 'error.invoice_exists' => 'Invoice with this number already exists.',
98 // 'error.no_invoiceable_items' => 'There are no invoiceable items.',
99 'error.no_login' => 'Det er ingen bruker med dette brukernavnet.',
100 // TODO: translate the following.
101 // 'error.no_teams' => 'Your database is empty. Login as admin and create a new team.',
102 'error.upload' => 'Feil med lasting av fil.',
103 // TODO: translate the following.
104 // 'error.range_locked' => 'Date range is locked.',
105 'error.mail_send' => 'Feil ved sending av e-post.',
106 'error.no_email' => 'Det er ingen e-post knyttet til dette brukernavnet.',
107 'error.uncompleted_exists' => 'Ufullført registrering finnes allerede. Lukk eller slett den.',
108 'error.goto_uncompleted' => 'Gå til ufullført registrering.',
109 // TODO: translate the following.
110 // 'error.overlap' => 'Time interval overlaps with existing records.',
111 // 'error.future_date' => 'Date is in future.',
113 // Labels for buttons.
114 'button.login' => 'Innlogging',
115 'button.now' => 'Nå',
116 'button.save' => 'Lagre',
117 // TODO: translate the following.
118 // 'button.copy' => 'Copy',
119 'button.cancel' => 'Avbryt',
120 // TODO: translate the following.
121 // 'button.submit' => 'Submit',
122 'button.add_user' => 'Legg til bruker',
123 'button.add_project' => 'Legg til prosjekt',
124 // TODO: translate the following.
125 // 'button.add_task' => 'Add task',
126 'button.add_client' => 'Legg til klient',
127 // TODO: translate the following.
128 // 'button.add_invoice' => 'Add invoice',
129 // 'button.add_option' => 'Add option',
130 'button.add' => 'Legg til',
131 'button.generate' => 'Generer',
132 'button.reset_password' => 'Resett passord',
133 'button.send' => 'Send',
134 'button.send_by_email' => 'Send som e-post',
135 'button.create_team' => 'Opprett team',
136 'button.export' => 'Eksport team',
137 'button.import' => 'Importer team',
138 // TODO: translate the following.
139 // 'button.close' => 'Close',
140 // 'button.stop' => 'Stop',
142 // Labels for controls on forms. Labels in this section are used on multiple forms.
143 // TODO: translate the following.
144 // 'label.team_name' => 'Team name',
145 // 'label.address' => 'Address',
146 'label.currency' => 'Valuta',
147 // TODO: translate the following.
148 // 'label.manager_name' => 'Manager name',
149 // 'label.manager_login' => 'Manager login',
150 'label.person_name' => 'Navn',
151 'label.thing_name' => 'Navn',
152 // TODO: translate the following.
153 // 'label.login' => 'Login',
154 'label.password' => 'Passord',
155 'label.confirm_password' => 'Bekreft passord',
156 'label.email' => 'E-post',
157 // TODO: translate the following.
158 // 'label.cc' => 'Cc',
159 // 'label.bcc' => 'Bcc',
160 'label.subject' => 'Emne',
161 // TODO: translate the following.
162 // 'label.date' => 'Date',
163 // 'label.start_date' => 'Start date',
164 // 'label.end_date' => 'End date',
165 // 'label.user' => 'User',
166 // 'label.users' => 'Users',
167 // 'label.client' => 'Client',
168 // 'label.clients' => 'Clients',
169 // 'label.option' => 'Option',
170 // 'label.invoice' => 'Invoice',
171 // 'label.project' => 'Project',
172 // 'label.projects' => 'Projects',
173 // 'label.task' => 'Task',
174 // 'label.tasks' => 'Tasks',
175 // 'label.description' => 'Description',
176 // 'label.start' => 'Start',
177 // 'label.finish' => 'Finish',
178 // 'label.duration' => 'Duration',
179 // 'label.note' => 'Note',
180 // 'label.notes' => 'Notes',
181 // 'label.item' => 'Item',
182 // 'label.cost' => 'Cost',
183 // 'label.day_total' => 'Day total',
184 // 'label.week_total' => 'Week total',
185 // 'label.month_total' => 'Month total',
186 'label.today' => 'I dag',
187 // TODO: translate the following.
188 // 'label.total_hours' => 'Total hours',
189 // 'label.total_cost' => 'Total cost',
190 // 'label.view' => 'View',
191 'label.edit' => 'Endre',
192 'label.delete' => 'Slett',
193 // TODO: translate the following.
194 // 'label.configure' => 'Configure',
195 // 'label.select_all' => 'Select all',
196 // 'label.select_none' => 'Deselect all',
197 // 'label.day_view' => 'Day view',
198 // 'label.week_view' => 'Week view',
199 // 'label.id' => 'ID',
200 // 'label.language' => 'Language',
201 // 'label.decimal_mark' => 'Decimal mark',
202 // 'label.date_format' => 'Date format',
203 // 'label.time_format' => 'Time format',
204 // 'label.week_start' => 'First day of week',
205 // 'label.comment' => 'Comment',
206 // 'label.status' => 'Status',
207 // 'label.tax' => 'Tax',
208 // 'label.subtotal' => 'Subtotal',
209 // 'label.total' => 'Total',
210 // 'label.client_name' => 'Client name',
211 // 'label.client_address' => 'Client address',
212 // 'label.or' => 'or',
213 // 'label.error' => 'Error',
214 // 'label.ldap_hint' => 'Type your <b>Windows login</b> and <b>password</b> in the fields below.',
215 // 'label.required_fields' => '* - required fields',
216 // 'label.on_behalf' => 'on behalf of',
217 // 'label.role_manager' => '(manager)',
218 // 'label.role_comanager' => '(co-manager)',
219 // 'label.role_admin' => '(administrator)',
220 // 'label.page' => 'Page',
221 // 'label.condition' => 'Condition',
222 // 'label.yes' => 'yes',
223 // 'label.no' => 'no',
224 // Labels for plugins (extensions to Time Tracker that provide additional features).
225 // TODO: translate the following.
226 // 'label.custom_fields' => 'Custom fields',
227 // 'label.monthly_quotas' => 'Monthly quotas',
228 // 'label.type' => 'Type',
229 // 'label.type_dropdown' => 'dropdown',
230 // 'label.type_text' => 'text',
231 // 'label.required' => 'Required',
232 // 'label.fav_report' => 'Favorite report',
233 // 'label.cron_schedule' => 'Cron schedule',
234 // 'label.what_is_it' => 'What is it?',
235 // 'label.expense' => 'Expense',
236 // 'label.quantity' => 'Quantity',
237 // 'label.paid_status' => 'Paid status',
238 // 'label.paid' => 'Paid',
239 // 'label.mark_paid' => 'Mark paid',
242 'title.login' => 'Innlogging',
243 // TODO: translate the following.
244 // 'title.teams' => 'Teams',
245 // 'title.create_team' => 'Creating Team',
246 // 'title.edit_team' => 'Editing Team',
247 // 'title.delete_team' => 'Deleting Team',
248 // 'title.reset_password' => 'Resetting Password',
249 // 'title.change_password' => 'Changing Password',
250 // 'title.time' => 'Time',
251 // 'title.edit_time_record' => 'Editing Time Record',
252 // 'title.delete_time_record' => 'Deleting Time Record',
253 // 'title.expenses' => 'Expenses',
254 // 'title.edit_expense' => 'Editing Expense Item',
255 // 'title.delete_expense' => 'Deleting Expense Item',
256 // 'title.predefined_expenses' => 'Predefined Expenses',
257 // 'title.add_predefined_expense' => 'Adding Predefined Expense',
258 // 'title.edit_predefined_expense' => 'Editing Predefined Expense',
259 // 'title.delete_predefined_expense' => 'Deleting Predefined Expense',
260 // 'title.reports' => 'Reports',
261 // 'title.report' => 'Report',
265 // TODO: refactoring ongoing down from here.
267 // TODO: Please check the translation against the current English file as many things are being refactored. For example, many labels have been added after label.email.
269 // "form.filter.project" => 'prosjekt',
270 // "form.filter.filter" => 'favorittrapport',
271 // "form.filter.filter_new" => 'lagre som favoritt',
272 // "form.filter.filter_confirm_delete" => 'er du sikker på at du vil slette denne favorittrapporten?',
274 // password reminder form attributes
275 "form.fpass.login" => 'innlogging',
276 "form.fpass.send_pass_str" => 'passordet er sendt',
277 "form.fpass.send_pass_subj" => 'Anuko Time Tracker passordet ditt',
278 // Note to translators: strings below need to be translated.
279 // "form.fpass.send_pass_body" => "Kjære bruker,\n\nNoen, trolig deg, bad om å få ditt Anuko Time Tracker password resatt. Vær vennlig å besøk denne lenken dersom du ønsker at passordet ditt skal resettes.\n\n%s\n\nAnuko Time Tracker er et enkelt og brukervennlig system for tidsregistrering basert på åpen kildekode. Les mer på https://www.anuko.com.\n\n",
280 // "form.fpass.reset_comment" => "vennligst skriv inn passordet og klikk på lagre for å resette passsordet.",
282 // Note to translators: the strings below must be translated
283 // // administrator form
284 // "form.admin.title" => 'administrator',
285 // "form.admin.duty_text" => 'opprett et nytt team ved å opprette en ny team manager konto.<br>du kan også importere team data fra en xml fil fra en annen Anuko Time Tracker server (ingen login kollisjoner er tillatt).',
287 // "form.admin.change_pass" => 'bytt passord på administratorkontoen',
288 // "form.admin.profile.title" => 'team',
289 // "form.admin.profile.noprofiles" => 'databasen din er tom. logg inn som admin og opprett et nytt team.',
290 // "form.admin.profile.comment" => 'slett team',
291 // "form.admin.profile.th.id" => 'id',
292 // "form.admin.profile.th.active" => 'aktiv',
293 // "form.admin.options" => 'opsjoner',
294 // "form.admin.custom_date_format" => "datoformat",
295 // "form.admin.custom_time_format" => "tidsformat",
296 // "form.admin.start_week" => "første ukedag",
298 // my time form attributes
299 // Note to translators: the 2 strings below must be translated
300 // "form.mytime.title" => 'min tid',
301 // "form.mytime.edit_title" => 'endre tidsoppføringen',
302 "form.mytime.del_str" => 'slett tids oppføringen',
303 "form.mytime.time_form" => ' (tt:mm)',
304 // Note to translators: "form.mytime.date" => 'dato', // the string must be translated
305 "form.mytime.project" => 'prosjekt',
306 "form.mytime.start" => 'starttid',
307 "form.mytime.finish" => 'ferdig',
308 "form.mytime.duration" => 'varighet',
309 "form.mytime.note" => 'notat',
310 "form.mytime.behalf" => 'daglig arbeide for',
311 "form.mytime.daily" => 'daglig arbeide',
312 "form.mytime.total" => 'totalt antall timer: ',
313 "form.mytime.th.project" => 'prosjekt',
314 "form.mytime.th.activity" => 'aktivitet',
315 "form.mytime.th.start" => 'starttid',
316 "form.mytime.th.finish" => 'ferdig',
317 "form.mytime.th.duration" => 'varighet',
318 "form.mytime.th.note" => 'notat',
319 // Note to translators: the strings below must be translated
320 // "form.mytime.del_yes" => 'tidsoppføringen er slettet',
321 // "form.mytime.no_finished_rec" => 'Denne oppføringen ble lagret kun med starttid. Det er ikke en feil. Logg ut om nødvendig.',
322 // "form.mytime.billable" => 'kan faktureres',
323 // "form.mytime.warn_tozero_rec" => 'Denne oppføringen må slettes fordi tidsperioden er låst',
324 // "form.mytime.uncompleted" => 'uferdig',
326 // profile form attributes
327 // Note to translators: we need a more accurate translation of form.profile.create_title
328 "form.profile.create_title" => 'lag ny adminkonto',
329 "form.profile.edit_title" => 'endre profil',
330 "form.profile.login" => 'innlogging',
332 // Note to translators: the strings below are missing and must be added and translated
333 // "form.profile.showchart" => 'vis kakediagram',
334 // "form.profile.lang" => 'språk',
335 // "form.profile.custom_date_format" => "dato format",
336 // "form.profile.custom_time_format" => "tims format",
337 // "form.profile.default_format" => "(default)",
338 // "form.profile.start_week" => "første dag i uken",
340 // people form attributes
341 "form.people.ppl_str" => 'personer',
342 "form.people.createu_str" => 'legg til ny bruker',
343 "form.people.edit_str" => 'endre bruker',
344 "form.people.del_str" => 'slett bruker',
345 "form.people.th.login" => 'innlogging',
346 "form.people.th.role" => 'rolle',
347 "form.people.th.status" => 'status',
348 // Note to translators: the 2 strings below are missing and must be added and translated
349 // "form.people.th.project" => 'prosjekt',
350 // "form.people.th.rate" => 'timesats',
351 // Note to translators: the strings below must be correctly translated
352 // "form.people.manager" => 'admin',
353 // "form.people.comanager" => 'co-manager',
354 "form.people.empl" => 'bruker',
355 "form.people.login" => 'innlogging',
357 "form.people.rate" => 'timesats',
358 // Note to translators: the strings below are missing and must be added and translated
359 // "form.people.comanager" => 'co-manager',
360 // "form.people.projects" => 'prosjekter',
362 // projects form attributes
363 "form.project.proj_title" => 'prosjekter',
364 "form.project.edit_str" => 'endre prosjekt',
365 "form.project.add_str" => 'legg til nytt prosjekt',
366 "form.project.del_str" => 'slett prosjekt',
368 // activities form attributes
369 "form.activity.project" => 'prosjekt',
372 "form.report.title" => 'rapporter',
373 "form.report.from" => 'starttid',
374 "form.report.to" => 'ferdig',
375 "form.report.groupby_user" => 'bruker',
376 "form.report.groupby_project" => 'prosjekt',
377 "form.report.duration" => 'varighet',
378 "form.report.start" => 'starttid',
379 "form.report.finish" => 'ferdig',
380 "form.report.note" => 'notat',
381 "form.report.project" => 'prosjekt',
382 // Note to translators: the strings below must be translated
383 // "form.report.totals_only" => 'kun summer',
384 "form.report.total" => 'totalt antall timer',
385 "form.report.th.empllist" => 'bruker',
386 "form.report.th.date" => 'dato',
387 "form.report.th.project" => 'prosjekt',
388 "form.report.th.start" => 'starttid',
389 "form.report.th.finish" => 'ferdig',
390 "form.report.th.duration" => 'varighet',
391 "form.report.th.note" => 'notat',
393 // mail form attributes
394 "form.mail.from" => 'fra',
395 "form.mail.to" => 'til',
396 "form.mail.comment" => 'kommentar',
397 "form.mail.above" => 'send denne rapporten som e-post',
398 // Note to translators: the strings below must be translated
399 // "form.mail.footer_str" => 'Anuko Time Tracker is et enkelt, brukervennlig tidsregistreringssystem<br>basert på åpen kildekode. Besøk <a href="https://www.anuko.com">www.anuko.com</a> for flere opplysninger.',
400 // "form.mail.sending_str" => '<b>the message has been sent</b>',
402 // invoice attributes
403 "form.invoice.title" => 'faktura',
404 "form.invoice.caption" => 'faktura',
405 "form.invoice.above" => 'tilleggsinformasjon for faktura',
406 // Note to translators: the strings below are missing and must be added and translated
407 // "form.invoice.select_cust" => 'velg klient',
408 // "form.invoice.fillform" => 'fyll inn i feltene',
409 "form.invoice.date" => 'dato',
410 "form.invoice.number" => 'fakturanummer',
411 "form.invoice.tax" => 'MVA',
412 "form.invoice.comment" => 'notat',
413 "form.invoice.th.username" => 'person',
414 "form.invoice.th.time" => 'timer',
415 "form.invoice.th.rate" => 'sats',
416 "form.invoice.th.summ" => 'antall',
417 "form.invoice.subtotal" => 'delsum',
418 "form.invoice.customer" => 'kommentar',
419 "form.invoice.mailinv_above" => 'send denne fakturaen som e-post',
420 // Note to translators: "form.invoice.sending_str" => '<b>invoice has been sent</b>', // the string must be translated
422 // Note to translators: the strings below are missing and must be added and translated
423 // "form.migration.zip" => 'komprimering',
424 // "form.migration.file" => 'velg fil',
425 // "form.migration.import.title" => 'import data',
426 // "form.migration.import.success" => 'import gjennomført vellykket',
427 // "form.migration.import.text" => 'import team data fra en xml fil',
428 // "form.migration.export.title" => 'export data',
429 // "form.migration.export.success" => 'eksport gjennomført vellykket',
430 // "form.migration.export.text" => 'du kan eksportere alle team data til en XML fil. dette kan være nyttig dersom du skal migrere data til din egen server.',
431 // "form.migration.compression.none" => 'ingen',
432 // "form.migration.compression.gzip" => 'gzip',
433 // "form.migration.compression.bzip" => 'bzip',
435 // "form.client.title" => 'klienter',
436 // "form.client.add_title" => 'legg til klient',
437 // "form.client.edit_title" => 'endre klient',
438 // "form.client.del_title" => 'slett klient',
439 // "form.client.tax" => 'avgift',
440 // "form.client.comment" => 'kommentar ',
442 // miscellaneous strings
443 "forward.forgot_password" => 'glemt passordet?',
444 "forward.tocsvfile" => 'eksporter data til en .csv fil',
445 // Note to translators: the strings below are missing and must be translated and added
446 // "forward.toxmlfile" => 'eksporter data til en .xml fil',
447 // "forward.geninvoice" => 'lag faktura',
448 // "forward.change" => 'konfigur klienter',
450 // strings inside contols on forms
451 "controls.select.project" => '--- velg prosjekt ---',
452 "controls.select.activity" => '--- velg aktivitet ---',
453 // Note to translators: the string below is missing and must be translated and added
454 // "controls.select.client" => '--- velg klient ---',
455 "controls.project_bind" => '--- alle ---',
456 "controls.all" => '--- alle ---',
457 // Note to translators: the strings below are missing and must be translated and added
458 // "controls.notbind" => '--- no ---',
459 "controls.per_tm" => 'denne måneden',
460 "controls.per_lm" => 'forrige måned',
461 "controls.per_tw" => 'denne uken',
462 "controls.per_lw" => 'forrige uke',
463 // Note to translators: the strings below are missing and must be translated and added
464 // "controls.per_td" => 'i dag',
465 // "controls.per_at" => 'all tid',
466 // "controls.per_ty" => 'dette årr',
467 "controls.sel_period" => '--- velg tidsperiode ---',
468 "controls.sel_groupby" => '--- ingen sortering ---',
469 // Note to translators: the strings below are missing and must be translated and added
470 // "controls.inc_billable" => 'fakturerbar',
471 // "controls.inc_nbillable" => 'ikke fakturerbar',
472 // "controls.default" => '--- default ---',
475 "label.pbehalf_info" => '%s %s <b>på vegne av %s</b>',
476 "label.time_noentry" => 'ingen tilgang',
477 "label.req_fields" => '* obligatoriske felt',
478 "label.sel_project" => 'velg prosjekt',
479 "label.sel_activity" => 'velg aktivitet',
480 "label.sel_tp" => 'velg tidsperiode',
481 "label.set_tp" => 'eller sett dato',
482 "label.fields" => 'vis feltene',
483 "label.group_title" => 'sorter på',
484 // Note to translators: the strings below must be translated
485 // "label.include_title" => 'ta med oppføringer',
486 // "label.inv_str" => 'faktura',
487 "label.set_empl" => 'velg brukere',
488 // Note to translators: the strings below are missing and must be translated and added
489 // "label.sel_all" => 'velg alle',
490 // "label.sel_none" => 'velg ingen',
491 // "label.or" => 'or',
492 // "label.disable" => 'slå av',
493 // "label.enable" => 'slå på',
494 // "label.filter" => 'filter',
495 // "label.timeweek" => 'uken totalt',
496 // "label.hrs" => 'timer',
497 // "label.errors" => 'feil',
498 // "label.ldap_hint" => 'Skriv din <b>Windows login</b> og <b>passord</b> i feltene nedenfor.',
499 // "label.calendar_today" => 'i dag',
500 // "label.calendar_close" => 'lukk',
503 // "login.hello.text" => "Anuko Time Tracker er et enkelt, brukervennlig tidsregistreringssystem basert på åpen kildekode.",