Browse Source

Merge pull request #132 from SondreNjaastad/main

More translation
Nariman Jelveh 1 year ago
parent
commit
51fb668b66

+ 6 - 5
src/IPC.js

@@ -881,12 +881,12 @@ window.addEventListener('message', async (event) => {
                                     message: `<strong>${html_encode(err.entry_name)}</strong> already exists.`,
                                     buttons:[
                                         {
-                                            label: 'Replace',
+                                            label: i18n('replace'),
                                             value: 'replace',
                                             type: 'primary',
                                         },
                                         {
-                                            label: 'Cancel',
+                                            label: i18n('cancel'),
                                             value: 'cancel',
                                         },
                                     ],
@@ -1032,18 +1032,19 @@ window.addEventListener('message', async (event) => {
                             message: `<strong>${html_encode(err.entry_name)}</strong> already exists.`,
                             buttons:[
                                 {
-                                    label: 'Replace',
+                                    label: i18n('replace'),
                                     type: 'primary',
                                 },
                                 {
-                                    label: 'Cancel'
+                                    label: i18n('cancel'),
+                                    value: 'cancel'
                                 },
                             ],
                             parent_uuid: event.data.appInstanceID,
                         })
                         if(alert_resp === 'Replace'){
                             overwrite = true;
-                        }else if(alert_resp === 'Cancel'){
+                        }else if(alert_resp === 'cancel'){
                             item_with_same_name_already_exists = false;
                         }
                     }else{

+ 1 - 1
src/UI/UIAlert.js

@@ -37,7 +37,7 @@ function UIAlert(options){
         // provide an 'OK' button if no buttons are provided
         if(!options.buttons || options.buttons.length === 0){
             options.buttons = [
-                {label: 'OK', value: true, type: 'primary'}
+                {label: i18n('ok'), value: true, type: 'primary'}
             ]
         }
 

+ 8 - 7
src/UI/UIDesktop.js

@@ -1223,18 +1223,19 @@ $(document).on('click', '.user-options-menu-btn', async function(e){
                     // see if there are any open windows, if yes notify user
                     if($('.window-app').length > 0){
                         const alert_resp = await UIAlert({
-                            message: `<p>You have open apps. Are you sure you want to log out?</p>`,
+                            message: `<p>${i18n('confirm_open_apps_log_out')}</p>`,
                             buttons:[
                                 {
-                                    label: 'Close Windows and Log Out',
+                                    label: i18n('close_all_Windows_and_log_out'),
+                                    value: 'close_and_log_out',
                                     type: 'primary',
                                 },
                                 {
-                                    label: 'Cancel'
+                                    label: i18n('cancel')
                                 },
                             ]
                         })
-                        if(alert_resp === 'Close Windows and Log Out')
+                        if(alert_resp === 'close_and_log_out')
                             logout();
                     }
                     // no open windows
@@ -1311,16 +1312,16 @@ $(document).on('click', '.user-options-login-btn', async function(e){
         message: `<strong>Save session before exiting!</strong><p>You are in a temporary session and logging into another account will erase all data in your current session.</p>`,
         buttons:[
             {
-                label: 'Save session',
+                label: i18n('save_session'),
                 value: 'save-session',
                 type: 'primary',
             },
             {
-                label: 'Log into another account anyway',
+                label: i18n('log_into_another_account_anyway'),
                 value: 'login',
             },
             {
-                label: 'Cancel'
+                label: i18n('cancel')
             },
         ]
     })

+ 7 - 7
src/UI/UIItem.js

@@ -159,7 +159,7 @@ function UIItem(options){
         h += `</div>`;
 
         // name
-        h += `<span class="item-name" data-item-id="${item_id}" title="${html_encode(options.name)}">${html_encode(truncate_filename(options.name, TRUNCATE_LENGTH)).replaceAll(' ', '&nbsp;')}</span>`
+        h += `<span class="item-name" data-item-id="${item_id}" title="${html_encode(options.name)}">${options.is_trash ? i18n('trash') : html_encode(truncate_filename(options.name, TRUNCATE_LENGTH)).replaceAll(' ', '&nbsp;')}</span>`
         // name editor
         h += `<textarea class="item-name-editor hide-scrollbar" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off" data-gramm_editor="false">${html_encode(options.name)}</textarea>`
     h += `</div>`;
@@ -854,14 +854,14 @@ function UIItem(options){
                     html: i18n('delete_permanently'),
                     onClick: async function(){
                         const alert_resp = await UIAlert({
-                            message: `Are you sure you want to permanently delete these items?`,
+                            message: i18n('confirm_delete_multiple_items'),
                             buttons:[
                                 {
-                                    label: 'Delete',
+                                    label: i18n('delete'),
                                     type: 'primary',
                                 },
                                 {
-                                    label: 'Cancel'
+                                    label: i18n('cancel')
                                 },
                             ]
                         })
@@ -1272,14 +1272,14 @@ function UIItem(options){
                     html: i18n('delete_permanently'),
                     onClick: async function(){
                         const alert_resp = await UIAlert({
-                            message: `Are you sure you want to permanently delete this item?`,
+                            message: i18n('confirm_delete_single_item'),
                             buttons:[
                                 {
-                                    label: 'Delete',
+                                    label: i18n('delete'),
                                     type: 'primary',
                                 },
                                 {
-                                    label: 'Cancel'
+                                    label: i18n('cancel')
                                 },
                             ]
                         })

+ 2 - 2
src/UI/UIPrompt.js

@@ -37,7 +37,7 @@ function UIPrompt(options){
         // provide an 'OK' button if no buttons are provided
         if(!options.buttons || options.buttons.length === 0){
             options.buttons = [
-                {label: i18n('Cancel'), value: false, type: 'default'},
+                {label: i18n('cancel'), value: false, type: 'default'},
                 {label: i18n('OK'), value: true, type: 'primary'},
             ]
         }
@@ -52,7 +52,7 @@ function UIPrompt(options){
         // buttons
         if(options.buttons && options.buttons.length > 0){
             h += `<div style="overflow:hidden; margin-top:20px; float:right;">`;
-                h += `<button class="button button-default prompt-resp-button prompt-resp-btn-cancel" data-label="${i18n('Cancel')}" style="padding: 0 20px;">${i18n('Cancel')}</button>`;
+                h += `<button class="button button-default prompt-resp-button prompt-resp-btn-cancel" data-label="${i18n('cancel')}" style="padding: 0 20px;">${i18n('cancel')}</button>`;
                 h += `<button class="button button-primary prompt-resp-button prompt-resp-btn-ok" data-label="${i18n('OK')}" data-value="true" autofocus>${i18n('OK')}</button>`;
             h += `</div>`;
         }

+ 1 - 1
src/UI/UITaskbar.js

@@ -217,7 +217,7 @@ async function UITaskbar(options){
     UITaskbarItem({
         icon: trash.is_empty ? window.icons['trash.svg'] : window.icons['trash-full.svg'],
         app: 'trash',
-        name: 'Trash',
+        name: `${i18n('trash')}`,
         sortable: false,
         keep_in_taskbar: true,
         lock_keep_in_taskbar: true,

+ 7 - 7
src/UI/UIWindow.js

@@ -314,7 +314,7 @@ async function UIWindow(options) {
                 // Loading spinner
                 h += `<div class="explorer-loading-spinner">`;
                     h +=`<svg style="display:block; margin: 0 auto; " xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 24 24"><title>circle anim</title><g fill="#212121" class="nc-icon-wrapper"><g class="nc-loop-circle-24-icon-f"><path d="M12 24a12 12 0 1 1 12-12 12.013 12.013 0 0 1-12 12zm0-22a10 10 0 1 0 10 10A10.011 10.011 0 0 0 12 2z" fill="#212121" opacity=".4"></path><path d="M24 12h-2A10.011 10.011 0 0 0 12 2V0a12.013 12.013 0 0 1 12 12z" data-color="color-2"></path></g><style>.nc-loop-circle-24-icon-f{--animation-duration:0.5s;transform-origin:12px 12px;animation:nc-loop-circle-anim var(--animation-duration) infinite linear}@keyframes nc-loop-circle-anim{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}</style></g></svg>`;
-                    h += `<p class="explorer-loading-spinner-msg">Loading...</p>`;
+                    h += `<p class="explorer-loading-spinner-msg">${i18n('loading')}...</p>`;
                 h += `</div>`;
             }
 
@@ -2018,19 +2018,19 @@ async function UIWindow(options) {
                         // Empty Trash
                         // -------------------------------------------
                         {
-                            html: "Empty Trash",
+                            html: i18n('empty_trash'),
                             disabled: false,
                             onClick: async function(){
                                 const alert_resp = await UIAlert({
                                     message: i18n('empty_trash_confirmation'),
                                     buttons:[
                                         {
-                                            label: 'Yes',
+                                            label: i18n('yes'),
                                             value: 'yes',
                                             type: 'primary',
                                         },
                                         {
-                                            label: 'No',
+                                            label: i18n('no'),
                                             value: 'no',
                                         },
                                     ]
@@ -2517,7 +2517,7 @@ window.navbar_path = (abs_path)=>{
     }
     let str = `${path_seperator_html}<span class="window-navbar-path-dirname" data-path="${html_encode('/')}">${html_encode(window.root_dirname)}</span>`;
     for(let k=1; k<dirs.length; k++){
-        str += `${path_seperator_html}<span class="window-navbar-path-dirname" data-path="${html_encode(dirpaths[k])}">${html_encode(dirs[k])}</span>`;
+        str += `${path_seperator_html}<span class="window-navbar-path-dirname" data-path="${html_encode(dirpaths[k])}">${dirs[k] === 'Trash' ? i18n('trash') : html_encode(dirs[k])}</span>`;
     }
     return str;
 }
@@ -2920,7 +2920,7 @@ window.scale_window = (el_window)=>{
 window.update_explorer_footer_item_count = function(el_window){
     //update dir count in explorer footer
     let item_count = $(el_window).find('.item').length;
-    $(el_window).find('.explorer-footer .explorer-footer-item-count').html(item_count + ' item' + (item_count == 0 || item_count > 1 ? 's' : ''));
+    $(el_window).find('.explorer-footer .explorer-footer-item-count').html(item_count + ` ${i18n('item')}` + (item_count == 0 || item_count > 1 ? `${i18n('plural_suffix')}` : ''));
 }
 
 window.update_explorer_footer_selected_items_count = function(el_window){
@@ -2928,7 +2928,7 @@ window.update_explorer_footer_selected_items_count = function(el_window){
     let item_count = $(el_window).find('.item-selected').length;
     if(item_count > 0){
         $(el_window).find('.explorer-footer-seperator, .explorer-footer-selected-items-count').show();
-        $(el_window).find('.explorer-footer .explorer-footer-selected-items-count').html(item_count + ' item' + (item_count == 0 || item_count > 1 ? 's' : '') + ' selected');
+        $(el_window).find('.explorer-footer .explorer-footer-selected-items-count').html(item_count + ` ${i18n('item')}` + (item_count == 0 || item_count > 1 ? `${i18n('plural_suffix')}` : '') + ` ${i18n('selected')}`);
     }else{
         $(el_window).find('.explorer-footer-seperator, .explorer-footer-selected-items-count').hide();
     }

+ 1 - 1
src/UI/UIWindowDownloadProgress.js

@@ -29,7 +29,7 @@ async function UIWindowDownloadProgress(options){
             // Progress report
             h +=`<div style="margin-bottom:20px; float:left; padding-top:3px; font-size:15px; overflow: hidden; width: calc(100% - 40px); text-overflow: ellipsis; white-space: nowrap;">`;
                 // msg
-                h += `<span class="upload-progress-msg">${i18n('downloading')} <strong>${options.item_name ?? ''}</strong></span>`;
+                h += `<span class="upload-progress-msg">${i18n('downloading')}...<strong>${options.item_name ?? ''}</strong></span>`;
             h += `</div>`;
             // Progress
             h += `<div class="download-progress-bar-container" style="clear:both; margin-top:20px; border-radius:3px;">`;

+ 2 - 2
src/UI/UIWindowMyWebsites.js

@@ -68,7 +68,7 @@ async function UIWindowMyWebsites(options){
         margin-bottom: 50px;
         -webkit-font-smoothing: antialiased;
         -moz-osx-font-smoothing: grayscale;
-        color: #596c7c;">Loading...</p>`);
+        color: #596c7c;">${i18n('loading')}...</p>`);
     }, 1000);
 
     puter.hosting.list().then(function (sites){
@@ -144,7 +144,7 @@ $(document).on('click', '.mywebsites-site-setting', function(e){
                                 type: 'primary',
                             },
                             {
-                                label: 'Cancel'
+                                label: i18n('cancel')
                             },
                         ]
                     })

+ 1 - 1
src/UI/UIWindowNewPassword.js

@@ -116,7 +116,7 @@ async function UIWindowNewPassword(options){
                         backdrop: true,
                         buttons:[
                             {
-                                label: 'Proceed to Login',
+                                label: i18n('proceed_to_login'),
                                 type: 'primary',
                             },
                         ],

+ 26 - 25
src/helpers.js

@@ -1031,7 +1031,7 @@ window.show_save_account_notice_if_needed = function(message){
                         body_icon: window.icons['reminder.svg'],
                         buttons:[
                             {
-                                label: 'Save session',
+                                label: i18n('save_session'),
                                 value: 'save-session',
                                 type: 'primary',
                             },
@@ -1565,17 +1565,17 @@ window.copy_clipboard_items = async function(dest_path, dest_container_element){
                         const alert_resp = await UIAlert({
                             message: `<strong>${html_encode(err.entry_name)}</strong> already exists.`,
                             buttons:[
-                                {label: 'Replace', type: 'primary'},
-                                ... (clipboard.length > 1) ? [{label: 'Replace all'}] : [],
-                                ... (clipboard.length > 1) ? [{label: 'Skip'}] : [{label: 'Cancel'}],
+                                {label: i18n('replace'), type: 'primary', value: 'replace'},
+                                ... (clipboard.length > 1) ? [{label: i18n('replace_all'), value: 'replace_all'}] : [],
+                                ... (clipboard.length > 1) ? [{label: i18n('skip'), value: 'skip'}] : [{label: i18n('cancel'), value: 'cancel'}],
                             ]
                         })
-                        if(alert_resp === 'Replace'){
+                        if(alert_resp === 'replace'){
                             overwrite = true;
-                        }else if (alert_resp === 'Replace all'){
+                        }else if (alert_resp === 'replace_all'){
                             overwrite = true;
                             overwrite_all = true;
-                        }else if(alert_resp === 'Skip' || alert_resp === 'Cancel'){
+                        }else if(alert_resp === 'skip' || alert_resp === 'cancel'){
                             item_with_same_name_already_exists = false;
                         }
                     }
@@ -1662,17 +1662,17 @@ window.copy_items = function(el_items, dest_path){
                         const alert_resp = await UIAlert({
                             message: `<strong>${html_encode(err.entry_name)}</strong> already exists.`,
                             buttons:[
-                                { label: 'Replace', type: 'primary' },
-                                ... (el_items.length > 1) ? [{label: 'Replace all'}] : [],
-                                ... (el_items.length > 1) ? [{label: 'Skip'}] : [{label: 'Cancel'}],
+                                { label: i18n('replace'), type: 'primary', value: 'replace' },
+                                ... (el_items.length > 1) ? [{label: i18n('replace_all'), value: 'replace_all'}] : [],
+                                ... (el_items.length > 1) ? [{label: i18n('skip'), value: 'skip'}] : [{label: i18n('cancel'), value: 'cancel'}],
                             ]
                         })
-                        if(alert_resp === 'Replace'){
+                        if(alert_resp === 'replace'){
                             overwrite = true;
-                        }else if (alert_resp === 'Replace all'){
+                        }else if (alert_resp === 'replace_all'){
                             overwrite = true;
                             overwrite_all = true;
-                        }else if(alert_resp === 'Skip' || alert_resp === 'Cancel'){
+                        }else if(alert_resp === 'skip' || alert_resp === 'cancel'){
                             item_with_same_name_already_exists = false;
                         }
                     }
@@ -2208,15 +2208,16 @@ window.open_item = async function(options){
                     'Found no suitable apps to open this file with. Would you like to download it instead?',
                     [
                     {
-                        label: 'Download File',
+                        label: i18n('download_file'),
+                        value: 'download_file',
                         type: 'primary',
 
                     },
                     {
-                        label: 'Cancel'
+                        label: i18n('cancel')
                     }
                 ])
-            if(alert_resp === 'Download File'){
+            if(alert_resp === 'download_file'){
                 trigger_download([item_path]);
             }
             return;
@@ -2586,17 +2587,17 @@ window.move_items = async function(el_items, dest_path, is_undo = false){
                     const alert_resp = await UIAlert({
                         message: `<strong>${html_encode(err.entry_name)}</strong> already exists.`,
                         buttons:[
-                            { label: 'Replace', type: 'primary',},
-                            ... (el_items.length > 1) ? [{label: 'Replace all'}] : [],
-                            ... (el_items.length > 1) ? [{label: 'Skip'}] : [{label: 'Cancel'}],
+                            { label: i18n('replace'), type: 'primary', value: 'replace' },
+                            ... (el_items.length > 1) ? [{label: i18n('replace_all'), value: 'replace_all'}] : [],
+                            ... (el_items.length > 1) ? [{label: i18n('skip'), value: 'skip'}] : [{label: i18n('cancel'), value: 'cancel'}],
                         ]
                     })
-                    if(alert_resp === 'Replace'){
+                    if(alert_resp === 'replace'){
                         overwrite = true;
-                    }else if (alert_resp === 'Replace all'){
+                    }else if (alert_resp === 'replace_all'){
                         overwrite = true;
                         overwrite_all = true;
-                    }else if(alert_resp === 'Skip' || alert_resp === 'Cancel'){
+                    }else if(alert_resp === 'skip' || alert_resp === 'cancel'){
                         item_with_same_name_already_exists = false;
                     }
                 }
@@ -2973,15 +2974,15 @@ window.upload_items = async function(items, dest_path){
 
 window.empty_trash = async function(){
     const alert_resp = await UIAlert({
-        message: `Are you sure you want to permanently delete the items in Trash?`,
+        message: i18n('empty_trash_confirmation'),
         buttons:[
             {
-                label: 'Yes',
+                label: i18n('yes'),
                 value: 'yes',
                 type: 'primary',
             },
             {
-                label: 'No',
+                label: i18n('no'),
                 value: 'no',
             },
         ]

+ 18 - 0
src/i18n/translations/en.js

@@ -16,8 +16,12 @@ const en = {
         change_password: "Change Password",
         change_username: "Change Username",
         close_all_windows: "Close All Windows",
+        close_all_windows_and_log_out: 'Close Windows and Log Out',
         color: 'Color',
         confirm_account_for_free_referral_storage_c2a: 'Create an account and confirm your email address to receive 1 GB of free storage. Your friend will get 1 GB of free storage too.',
+        confirm_delete_multiple_items: 'Are you sure you want to permanently delete these items?',
+        confirm_delete_single_item: 'Do you want to permanently delete this item?',
+        confirm_open_apps_log_out: 'You have open apps. Are you sure you want to log out?',
         confirm_new_password: "Confirm New Password",
         contact_us: "Contact Us",
         contain: 'Contain',
@@ -40,6 +44,7 @@ const en = {
         dir_published_as_website: `%strong% has been published to:`,
         disassociate_dir: "Disassociate Directory",
         download: 'Download',
+        download_file: 'Download File',
         downloading: "Downloading",
         email: "Email",
         email_or_username: "Email or Username",
@@ -58,10 +63,13 @@ const en = {
         html_document: 'HTML document',
         image: 'Image',
         invite_link: "Invite Link",
+        item: 'item',
         items_in_trash_cannot_be_renamed: `This item can't be renamed because it's in the trash. To rename this item, first drag it out of the Trash.`,
         jpeg_image: 'JPEG image',
         keep_in_taskbar: 'Keep in Taskbar',
+        loading: 'Loading',
         log_in: "Log In",
+        log_into_another_account_anyway: 'Log into another account anyway',
         log_out: 'Log Out',
         move: 'Move',
         moving: "Moving",
@@ -77,6 +85,7 @@ const en = {
         new_folder: 'New folder',
         new_password: "New Password",
         new_username: "New Username",
+        no: 'No',
         no_dir_associated_with_site: 'No directory associated with this address.',
         no_websites_published: "You have not published any websites yet.",
         ok: 'OK',
@@ -94,9 +103,11 @@ const en = {
         powered_by_puter_js: `Powered by <a href="https://docs.puter.com/" target="_blank">Puter.js</a>`,
         preparing: "Preparing...",
         preparing_for_upload: "Preparing for upload...",
+        proceed_to_login: 'Proceed to login',
         properties: "Properties",
         publish: "Publish",
         publish_as_website: 'Publish as website',
+        plural_suffix: 's',
         recent: "Recent",
         recover_password: "Recover Password",
         refer_friends_c2a: "Get 1 GB for every friend who creates and confirms an account on Puter. Your friend will get 1 GB too!",
@@ -106,13 +117,18 @@ const en = {
         remove_from_taskbar:'Remove from Taskbar',
         rename: 'Rename',
         repeat: 'Repeat',
+        replace: 'Replace',
+        replace_all: 'Erstatt alle',
         resend_confirmation_code: "Re-send Confirmation Code",
         restore: "Restore",
+        save_account: 'Save account',
         save_account_to_get_copy_link: "Please create an account to proceed.",
         save_account_to_publish: 'Please create an account to proceed.',
+        save_session: 'Save session',
         save_session_c2a: 'Create an account to save your current session and avoid losing your work.',
         scan_qr_c2a: 'Scan the code below to log into this session from other devices',
         select: "Select",
+        selected: 'selected',
         select_color: 'Select color…',
         send: "Send",
         send_password_recovery_email: "Send Password Recovery Email",
@@ -125,6 +141,7 @@ const en = {
         sign_up: "Sign Up",
         signing_in: "Signing in…",
         size: 'Size',
+        skip: 'Skip',
         sort_by: 'Sort by',
         start: 'Start',
         taking_longer_than_usual: 'Taking a little longer than usual. Please wait...',
@@ -139,6 +156,7 @@ const en = {
         username: "Username",
         username_changed: 'Username updated successfully.',
         versions: "Versions",
+        yes: 'Yes',
         yes_release_it: 'Yes, Release It',
         you_have_been_referred_to_puter_by_a_friend: "You have been referred to Puter by a friend!",
         zip: "Zip",

+ 18 - 0
src/i18n/translations/nb.js

@@ -16,8 +16,12 @@ const nb = {
         change_password: "Endre passord",
         change_username: "Endre brukernavn",
         close_all_windows: "Lukk alle vinduer",
+        close_all_windows_and_log_out: 'Lukk alle vinduer og logg ut',
         color: "Farge",
         confirm_account_for_free_referral_storage_c2a: "Opprett en konto og bekreft e-postadressen din for å motta 1 GB gratis lagringsplass. Din venn vil også få 1 GB gratis lagringsplass.",
+        confirm_delete_multiple_items: 'Er du sikker på at du vil slette disse elementene permanent?',
+        confirm_delete_single_item: 'Er du sikker på at du vil slette dette elemente permanent?',
+        confirm_open_apps_log_out: 'Du har åpene apper, er du sikker på at du vil logge ut?',
         confirm_new_password: "Bekreft nytt passord",
         contact_us: "Kontakt oss",
         contain: "Inneholde",
@@ -40,6 +44,7 @@ const nb = {
         dir_published_as_website: "%strong% er publisert på:",
         disassociate_dir: "Fjern tilknytning fra mappe",
         download: "Last ned",
+        download_file: 'Last ned fil',
         downloading: "Laster ned",
         email: "E-post",
         email_or_username: "E-post eller brukernavn",
@@ -58,10 +63,13 @@ const nb = {
         html_document: "HTML-dokument",
         image: "Bilde",
         invite_link: "Invitasjonslenke",
+        item: 'element',
         items_in_trash_cannot_be_renamed: "Dette elementet kan ikke omdøpes fordi det er i papirkurven. For å omdøpe dette elementet, dra det først ut av papirkurven.",
         jpeg_image: "JPEG-bilde",
         keep_in_taskbar: "Behold i oppgavelinjen",
+        loading: 'Laster',
         log_in: "Logg inn",
+        log_into_another_account_anyway: 'Logg inn på en annen bruker uansett',
         log_out: "Logg ut",
         move: "Flytt",
         moving: "Flytter",
@@ -77,6 +85,7 @@ const nb = {
         new_folder: "Ny mappe",
         new_password: "Nytt passord",
         new_username: "Nytt brukernavn",
+        no: 'Nei',
         no_dir_associated_with_site: "Ingen mappe er tilknyttet denne adressen.",
         no_websites_published: "Du har ikke publisert noen nettsteder ennå.",
         ok: "OK",
@@ -95,8 +104,10 @@ const nb = {
         preparing: "Forbereder...",
         preparing_for_upload: "Forbereder opplasting...",
         properties: "Egenskaper",
+        proceed_to_login: 'Fortsett til innlogging',
         publish: "Publiser",
         publish_as_website: "Publiser som nettsted",
+        plural_suffix: 'er',
         recent: "Nylig",
         recover_password: "Gjenopprett passord",
         refer_friends_c2a: "Få 1 GB for hver venn som oppretter og bekrefter en konto på Puter. Vennen din får også 1 GB.",
@@ -106,13 +117,18 @@ const nb = {
         remove_from_taskbar: "Fjern fra oppgavelinjen",
         rename: "Gi nytt navn",
         repeat: "Gjenta",
+        replace: 'Erstatt',
+        replace_all: 'Erstatt alle',
         resend_confirmation_code: "Send bekreftelseskoden på nytt",
         restore: "Gjenopprett",
+        save_account: 'Lagre konto',
         save_account_to_get_copy_link: "Vennligst opprett en konto for å fortsette.",
         save_account_to_publish: "Vennligst opprett en konto for å fortsette.",
+        save_session: 'Lagre økt',
         save_session_c2a: "Opprett en konto for å lagre gjeldende økt og unngå å miste arbeidet ditt.",
         scan_qr_c2a: "Skann koden nedenfor for å logge inn på denne økten fra andre enheter",
         select: "Velg",
+        selected: 'valgt',
         select_color: "Velg farge…",
         send: "Send",
         send_password_recovery_email: "Send e-post for gjenoppretting av passord",
@@ -125,6 +141,7 @@ const nb = {
         sign_up: "Registrer deg",
         signing_in: "Logger inn…",
         size: "Størrelse",
+        skip: 'Hopp over',
         sort_by: "Sorter etter",
         start: "Start",
         taking_longer_than_usual: "Dette tar litt lenger tid enn vanlig. Vennligst vent...",
@@ -140,6 +157,7 @@ const nb = {
         username_changed: "Brukernavn oppdatert.",
         versions: "Versjoner",
         yes_release_it: "Ja, frigi den",
+        yes: 'ja',
         you_have_been_referred_to_puter_by_a_friend: "Du har blitt henvist til Puter av en venn!",
         zip: "Zip"
     }

+ 17 - 15
src/initgui.js

@@ -527,12 +527,12 @@ window.initgui = async function(){
                                                 message: `<strong>${html_encode(err.entry_name)}</strong> already exists.`,
                                                 buttons:[
                                                     {
-                                                        label: 'Replace',
+                                                        label: i18n('replace'),
                                                         value: 'replace',
                                                         type: 'primary',
                                                     },
                                                     {
-                                                        label: 'Cancel',
+                                                        label: i18n('cancel'),
                                                         value: 'cancel',
                                                     },
                                                 ],
@@ -884,12 +884,12 @@ window.initgui = async function(){
                                             message: `<strong>${html_encode(err.entry_name)}</strong> already exists.`,
                                             buttons:[
                                                 {
-                                                    label: 'Replace',
+                                                    label: i18n('replace'),
                                                     value: 'replace',
                                                     type: 'primary',
                                                 },
                                                 {
-                                                    label: 'Cancel',
+                                                    label: i18n('cancel'),
                                                     value: 'cancel',
                                                 },
                                             ],
@@ -1325,14 +1325,14 @@ window.initgui = async function(){
             let $selected_items = $(active_element).closest(`.item-container`).find(`.item-selected`);
             if($selected_items.length > 0){
                 const alert_resp = await UIAlert({
-                    message: `Are you sure you want to permanently delete these items?`,
+                    message: i18n('confirm_delete_multiple_items'),
                     buttons:[
                         {
-                            label: 'Delete',
+                            label: i18n('delete'),
                             type: 'primary',
                         },
                         {
-                            label: 'Cancel'
+                            label: i18n('cancel')
                         },
                     ]
                 })
@@ -1354,14 +1354,14 @@ window.initgui = async function(){
             let $selected_items = $(active_element).closest(`.item-container`).find(`.item-selected[data-path^="${trash_path + '/'}"]`);
             if($selected_items.length > 0){
                 const alert_resp = await UIAlert({
-                    message: `Are you sure you want to permanently delete these items?`,
+                    message: i18n('confirm_delete_multiple_items'),
                     buttons:[
                         {
-                            label: 'Delete',
+                            label: i18n('delete'),
                             type: 'primary',
                         },
                         {
-                            label: 'Cancel'
+                            label: i18n('cancel')
                         },
                     ]
                 })
@@ -1875,26 +1875,28 @@ window.initgui = async function(){
                 message: `<strong>Save account before logging out!</strong><p>You are using a temporary account and logging out will erase all your data.</p>`,
                 buttons:[
                     {
-                        label: 'Save Account',
+                        label: i18n('save_account'),
+                        value: 'save_account',
                         type: 'primary',
                     },
                     {
-                        label: 'Log Out',
+                        label: i18n('log_out'),
+                        value: 'log_out',
                         type: 'danger',
                     },
                     {
-                        label: 'Cancel',
+                        label: i18n('cancel'),
                     },
                 ]
             })
-            if(alert_resp === 'Save Account'){
+            if(alert_resp === 'save_account'){
                 let saved = await UIWindowSaveAccount({
                     send_confirmation_code: false,
                     default_username: window.user.username
                 });
                 if(saved)
                     logout();
-            }else if (alert_resp === 'Log Out'){
+            }else if (alert_resp === 'log_out'){
                 logout();
             }
             else{