Merge branch 'HeyPuter:main' into main

This commit is contained in:
Sai Uddisa 2024-03-20 18:07:03 +05:30 committed by GitHub
commit ae9fe5a2eb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
20 changed files with 739 additions and 83 deletions

View File

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

View File

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

View File

@ -503,6 +503,7 @@ async function UIDesktop(options){
// update local user preferences // update local user preferences
const user_preferences = { const user_preferences = {
show_hidden_files: (await puter.kv.get('user_preferences.show_hidden_files')) === 'true', show_hidden_files: (await puter.kv.get('user_preferences.show_hidden_files')) === 'true',
language: (await puter.kv.get('user_preferences.language'))
}; };
update_user_preferences(user_preferences); update_user_preferences(user_preferences);
@ -1222,18 +1223,19 @@ $(document).on('click', '.user-options-menu-btn', async function(e){
// see if there are any open windows, if yes notify user // see if there are any open windows, if yes notify user
if($('.window-app').length > 0){ if($('.window-app').length > 0){
const alert_resp = await UIAlert({ 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:[ buttons:[
{ {
label: 'Close Windows and Log Out', label: i18n('close_all_Windows_and_log_out'),
value: 'close_and_log_out',
type: 'primary', type: 'primary',
}, },
{ {
label: 'Cancel' label: i18n('cancel')
}, },
] ]
}) })
if(alert_resp === 'Close Windows and Log Out') if(alert_resp === 'close_and_log_out')
logout(); logout();
} }
// no open windows // no open windows
@ -1310,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>`, 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:[ buttons:[
{ {
label: 'Save session', label: i18n('save_session'),
value: 'save-session', value: 'save-session',
type: 'primary', type: 'primary',
}, },
{ {
label: 'Log into another account anyway', label: i18n('log_into_another_account_anyway'),
value: 'login', value: 'login',
}, },
{ {
label: 'Cancel' label: i18n('cancel')
}, },
] ]
}) })

View File

@ -159,7 +159,7 @@ function UIItem(options){
h += `</div>`; h += `</div>`;
// name // 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 // 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 += `<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>`; h += `</div>`;
@ -854,14 +854,14 @@ function UIItem(options){
html: i18n('delete_permanently'), html: i18n('delete_permanently'),
onClick: async function(){ onClick: async function(){
const alert_resp = await UIAlert({ const alert_resp = await UIAlert({
message: `Are you sure you want to permanently delete these items?`, message: i18n('confirm_delete_multiple_items'),
buttons:[ buttons:[
{ {
label: 'Delete', label: i18n('delete'),
type: 'primary', type: 'primary',
}, },
{ {
label: 'Cancel' label: i18n('cancel')
}, },
] ]
}) })
@ -1272,14 +1272,14 @@ function UIItem(options){
html: i18n('delete_permanently'), html: i18n('delete_permanently'),
onClick: async function(){ onClick: async function(){
const alert_resp = await UIAlert({ const alert_resp = await UIAlert({
message: `Are you sure you want to permanently delete this item?`, message: i18n('confirm_delete_single_item'),
buttons:[ buttons:[
{ {
label: 'Delete', label: i18n('delete'),
type: 'primary', type: 'primary',
}, },
{ {
label: 'Cancel' label: i18n('cancel')
}, },
] ]
}) })

View File

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

View File

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

View File

@ -295,7 +295,7 @@ async function UIWindow(options) {
frameborder="0" webkitallowfullscreen="webkitallowfullscreen" mozallowfullscreen="mozallowfullscreen" frameborder="0" webkitallowfullscreen="webkitallowfullscreen" mozallowfullscreen="mozallowfullscreen"
${options.iframe_url ? 'src="'+ html_encode(options.iframe_url)+'"' : ''} ${options.iframe_url ? 'src="'+ html_encode(options.iframe_url)+'"' : ''}
${options.iframe_srcdoc ? 'srcdoc="'+ html_encode(options.iframe_srcdoc) +'"' : ''} ${options.iframe_srcdoc ? 'srcdoc="'+ html_encode(options.iframe_srcdoc) +'"' : ''}
allow = "accelerometer; camera; encrypted-media; display-capture; geolocation; gyroscope; microphone; midi; clipboard-read; clipboard-write; web-share; fullscreen;" allow = "accelerometer; camera; encrypted-media; gamepad; display-capture; geolocation; gyroscope; microphone; midi; clipboard-read; clipboard-write; web-share; fullscreen;"
sandbox="allow-forms allow-modals allow-pointer-lock allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-top-navigation-by-user-activation allow-downloads allow-presentation"></iframe>`; sandbox="allow-forms allow-modals allow-pointer-lock allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-top-navigation-by-user-activation allow-downloads allow-presentation"></iframe>`;
} }
// custom body // custom body
@ -314,7 +314,7 @@ async function UIWindow(options) {
// Loading spinner // Loading spinner
h += `<div class="explorer-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 +=`<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>`; h += `</div>`;
} }
@ -2018,19 +2018,19 @@ async function UIWindow(options) {
// Empty Trash // Empty Trash
// ------------------------------------------- // -------------------------------------------
{ {
html: "Empty Trash", html: i18n('empty_trash'),
disabled: false, disabled: false,
onClick: async function(){ onClick: async function(){
const alert_resp = await UIAlert({ const alert_resp = await UIAlert({
message: i18n('empty_trash_confirmation'), message: i18n('empty_trash_confirmation'),
buttons:[ buttons:[
{ {
label: 'Yes', label: i18n('yes'),
value: 'yes', value: 'yes',
type: 'primary', type: 'primary',
}, },
{ {
label: 'No', label: i18n('no'),
value: '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>`; 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++){ 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; return str;
} }
@ -2920,7 +2920,7 @@ window.scale_window = (el_window)=>{
window.update_explorer_footer_item_count = function(el_window){ window.update_explorer_footer_item_count = function(el_window){
//update dir count in explorer footer //update dir count in explorer footer
let item_count = $(el_window).find('.item').length; 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){ 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; let item_count = $(el_window).find('.item-selected').length;
if(item_count > 0){ if(item_count > 0){
$(el_window).find('.explorer-footer-seperator, .explorer-footer-selected-items-count').show(); $(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{ }else{
$(el_window).find('.explorer-footer-seperator, .explorer-footer-selected-items-count').hide(); $(el_window).find('.explorer-footer-seperator, .explorer-footer-selected-items-count').hide();
} }

View File

@ -29,7 +29,7 @@ async function UIWindowDownloadProgress(options){
// Progress report // 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;">`; 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 // 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>`; h += `</div>`;
// Progress // Progress
h += `<div class="download-progress-bar-container" style="clear:both; margin-top:20px; border-radius:3px;">`; h += `<div class="download-progress-bar-container" style="clear:both; margin-top:20px; border-radius:3px;">`;

View File

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

View File

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

View File

@ -722,6 +722,7 @@ window.mutate_user_preferences = function(user_preferences_delta) {
window.update_user_preferences = function(user_preferences) { window.update_user_preferences = function(user_preferences) {
window.user_preferences = user_preferences; window.user_preferences = user_preferences;
localStorage.setItem('user_preferences', JSON.stringify(user_preferences)); localStorage.setItem('user_preferences', JSON.stringify(user_preferences));
window.locale = user_preferences.language;
} }
window.sendWindowWillCloseMsg = function(iframe_element) { window.sendWindowWillCloseMsg = function(iframe_element) {
@ -1030,7 +1031,7 @@ window.show_save_account_notice_if_needed = function(message){
body_icon: window.icons['reminder.svg'], body_icon: window.icons['reminder.svg'],
buttons:[ buttons:[
{ {
label: 'Save session', label: i18n('save_session'),
value: 'save-session', value: 'save-session',
type: 'primary', type: 'primary',
}, },
@ -1564,17 +1565,17 @@ window.copy_clipboard_items = async function(dest_path, dest_container_element){
const alert_resp = await UIAlert({ const alert_resp = await UIAlert({
message: `<strong>${html_encode(err.entry_name)}</strong> already exists.`, message: `<strong>${html_encode(err.entry_name)}</strong> already exists.`,
buttons:[ buttons:[
{label: 'Replace', type: 'primary'}, {label: i18n('replace'), type: 'primary', value: 'replace'},
... (clipboard.length > 1) ? [{label: 'Replace all'}] : [], ... (clipboard.length > 1) ? [{label: i18n('replace_all'), value: 'replace_all'}] : [],
... (clipboard.length > 1) ? [{label: 'Skip'}] : [{label: 'Cancel'}], ... (clipboard.length > 1) ? [{label: i18n('skip'), value: 'skip'}] : [{label: i18n('cancel'), value: 'cancel'}],
] ]
}) })
if(alert_resp === 'Replace'){ if(alert_resp === 'replace'){
overwrite = true; overwrite = true;
}else if (alert_resp === 'Replace all'){ }else if (alert_resp === 'replace_all'){
overwrite = true; overwrite = true;
overwrite_all = 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; item_with_same_name_already_exists = false;
} }
} }
@ -1661,17 +1662,17 @@ window.copy_items = function(el_items, dest_path){
const alert_resp = await UIAlert({ const alert_resp = await UIAlert({
message: `<strong>${html_encode(err.entry_name)}</strong> already exists.`, message: `<strong>${html_encode(err.entry_name)}</strong> already exists.`,
buttons:[ buttons:[
{ label: 'Replace', type: 'primary' }, { label: i18n('replace'), type: 'primary', value: 'replace' },
... (el_items.length > 1) ? [{label: 'Replace all'}] : [], ... (el_items.length > 1) ? [{label: i18n('replace_all'), value: 'replace_all'}] : [],
... (el_items.length > 1) ? [{label: 'Skip'}] : [{label: 'Cancel'}], ... (el_items.length > 1) ? [{label: i18n('skip'), value: 'skip'}] : [{label: i18n('cancel'), value: 'cancel'}],
] ]
}) })
if(alert_resp === 'Replace'){ if(alert_resp === 'replace'){
overwrite = true; overwrite = true;
}else if (alert_resp === 'Replace all'){ }else if (alert_resp === 'replace_all'){
overwrite = true; overwrite = true;
overwrite_all = 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; item_with_same_name_already_exists = false;
} }
} }
@ -2207,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?', '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', type: 'primary',
}, },
{ {
label: 'Cancel' label: i18n('cancel')
} }
]) ])
if(alert_resp === 'Download File'){ if(alert_resp === 'download_file'){
trigger_download([item_path]); trigger_download([item_path]);
} }
return; return;
@ -2585,17 +2587,17 @@ window.move_items = async function(el_items, dest_path, is_undo = false){
const alert_resp = await UIAlert({ const alert_resp = await UIAlert({
message: `<strong>${html_encode(err.entry_name)}</strong> already exists.`, message: `<strong>${html_encode(err.entry_name)}</strong> already exists.`,
buttons:[ buttons:[
{ label: 'Replace', type: 'primary',}, { label: i18n('replace'), type: 'primary', value: 'replace' },
... (el_items.length > 1) ? [{label: 'Replace all'}] : [], ... (el_items.length > 1) ? [{label: i18n('replace_all'), value: 'replace_all'}] : [],
... (el_items.length > 1) ? [{label: 'Skip'}] : [{label: 'Cancel'}], ... (el_items.length > 1) ? [{label: i18n('skip'), value: 'skip'}] : [{label: i18n('cancel'), value: 'cancel'}],
] ]
}) })
if(alert_resp === 'Replace'){ if(alert_resp === 'replace'){
overwrite = true; overwrite = true;
}else if (alert_resp === 'Replace all'){ }else if (alert_resp === 'replace_all'){
overwrite = true; overwrite = true;
overwrite_all = 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; item_with_same_name_already_exists = false;
} }
} }
@ -2972,15 +2974,15 @@ window.upload_items = async function(items, dest_path){
window.empty_trash = async function(){ window.empty_trash = async function(){
const alert_resp = await UIAlert({ const alert_resp = await UIAlert({
message: `Are you sure you want to permanently delete the items in Trash?`, message: i18n('empty_trash_confirmation'),
buttons:[ buttons:[
{ {
label: 'Yes', label: i18n('yes'),
value: 'yes', value: 'yes',
type: 'primary', type: 'primary',
}, },
{ {
label: 'No', label: i18n('no'),
value: 'no', value: 'no',
}, },
] ]

View File

@ -10,11 +10,8 @@ window.i18n = function (key, replacements = [], encode_html = true) {
replacements = [replacements]; replacements = [replacements];
} }
// if locale is not set, default to en let language = translations[window.locale] ?? translations['en'];
if(!translations[window.locale]) let str = language.dictionary[key] ?? translations['en'].dictionary[key];
window.locale = 'en';
let str = translations[window.locale].dictionary[key];
if (!str) { if (!str) {
str = key; str = key;

149
src/i18n/translations/ar.js Normal file
View File

@ -0,0 +1,149 @@
const ar = {
name: "العربية",
code: "ar",
dictionary: {
access_granted_to: "دخول مسموح به",
add_existing_account: "إضافة حساب موجود",
all_fields_required: 'يجب ملء كل الفراغات',
apply: "تطبيق ",
ascending: 'تصاعدي ',
background: "خلفية",
browse: "إبحث",
cancel: 'إلغاء',
center: 'وسط',
change_desktop_background: 'تغيير خلفية المكتب',
change_language: "تغيير اللغة",
change_password: "تغيير كلمة السر",
change_username: "تغيير إسم المستخدم",
close_all_windows: "غلق كل النوافذ",
color: 'اللون',
confirm_account_for_free_referral_storage_c2a: 'تأكيد الحساب لتخزين الإحالة المجانية ',
confirm_new_password: "تأكيد كلمة السر الجديدة",
contact_us: "اتصل بنا",
contain: 'إملء',
continue: "أكمل",
copy: 'أنسخ',
copy_link: "أنسخ الرابط",
copying: "ينسخ",
cover: 'غطاء',
create_account: "إنشاء حساب",
create_free_account: "إنشاء حساب مجاني",
create_shortcut: "تم تصميم المنتج",
current_password: "كلمة السر الحالية",
cut: 'إقطع',
date_modified: 'تغيير الوقت',
delete: 'حذف',
delete_permanently: "حذف دائم",
deploy_as_app: 'نشر كتطبيق',
descending: 'تنازلي',
desktop_background_fit: "خلفية سطح المكتب مناسبة",
dir_published_as_website: `:تم نشر الدليل كموقع ويب`,
disassociate_dir: "فصل الدليل",
download: 'تحميل ',
downloading: "جارى التحميل ",
email: "بريد إلكتروني",
email_or_username: "البريد الإلكتروني أو اسم المستخدم ",
empty_trash: 'سلة مهملات فارغة',
empty_trash_confirmation:'تأكيد إفراغ سلة المهملات ',
emptying_trash: 'إفراغ القمامة',
feedback: "تعليق ",
feedback_c2a: "تعليق ",
feedback_sent_confirmation: "أرسلت ردود الفعل التكوين ",
forgot_pass_c2a: "هل نسيت كلمة السر؟",
from: "من",
general: "عام ",
get_a_copy_of_on_puter: `الحصول على نسخة على جهاز الكمبيوتر`,
get_copy_link: 'الحصول على رابط النسخ',
hide_all_windows: "إخفاء كافة النوافذ ",
html_document: 'وثيقة أتش تي أم أل',
image: 'صورة',
invite_link: "رابط الدعوة",
items_in_trash_cannot_be_renamed: `لا يمكن إعادة تسمية العناصر الموجودة في سلة المهملات `,
jpeg_image: 'صورة j p e g',
keep_in_taskbar: 'احتفظ بها في شريط المهام ',
log_in: "تسجيل الدخول",
log_out: 'تسجيل خروج',
move: 'يتحرك',
moving: "متحرك ",
my_websites: "مواقعي الإلكترونية ",
name: 'اسم',
name_cannot_be_empty: 'لا يمكن أن يكون الاسم فارغًا',
name_cannot_contain_double_period: "لا يمكن أن يحتوي الاسم على نقطة مزدوجة ",
name_cannot_contain_period: "لا يمكن أن يحتوي الاسم على فترة",
name_cannot_contain_slash: "لا يمكن أن يحتوي الاسم على شرطة مائلة",
name_must_be_string: "يجب أن يكون الاسم سلسلة",
name_too_long: `الاسم طويل جدًا`,
new: 'جديد',
new_folder: 'ملف جديد ',
new_password: "كلمة المرور الجديدة ",
new_username: "اسم مستخدم جديد ",
no_dir_associated_with_site: 'لا يوجد دليل مرتبط بالموقع',
no_websites_published: "لم يتم نشر أي مواقع",
ok: 'نعم',
open: "يفتح",
open_in_new_tab: "فتح في علامة تبويب جديدة",
open_in_new_window: "افتح في نافذة جديدة ",
open_with: "مفتوحة مع ",
password: "كلمة المرور ",
password_changed: "تم تغيير كلمة السر ",
passwords_do_not_match: 'كلمة المرور غير مطابقة',
paste: 'لصق',
paste_into_folder: "الصق داخل الملف",
pick_name_for_website: "اختيار اسم لموقع الويب ",
picture: "صورة ",
powered_by_puter_js: `مشغل بواسطة<a href="https://docs.puter.com/" target="_blank">Puter.js</a>`,
preparing: "إعداده",
preparing_for_upload: "التحضير للتحميل ",
properties: "ملكيات ",
publish: "ينشر",
publish_as_website: 'نشر كموقع على شبكة الإنترنت ',
recent: "مؤخرًا",
recover_password: "إستعادة كلمة المرور ",
refer_friends_c2a: "احصل على 1 جيجابايت لكل صديق يقوم بإنشاء حساب والتحقق منه مع Puter. صديقك يحصل على 1 غيغابايت أيضًا!",
refer_friends_social_media_c2a: `احصل على 1 غيغابايت من مساحة التخزين المجانية على موقع Puter.com!`,
refresh: 'ينعش ',
release_address_confirmation: `تأكيد عنوان الإصدار `,
remove_from_taskbar:'إزالة من شريط المهام ',
rename: 'إعادة تسمية',
repeat: 'تكرار',
resend_confirmation_code: "إعادة إرسال رمز التأكيد",
restore: "استرجاع",
save_account_to_get_copy_link: "حفظ الحساب للحصول على نسخة الرابط",
save_account_to_publish: 'حفظ الحساب للنشر',
save_session_c2a: 'حفظ جلسة ',
scan_qr_c2a: 'قم بمسح الرمز أدناه لتسجيل الدخول إلى هذه الجلسة من الأجهزة الأخرى',
select: "إختار",
select_color: 'إختر لون ',
send: "أرسل",
send_password_recovery_email: "إرسال بريد إلكتروني لاستعادة كلمة المرور",
session_saved: "تم حفظ الجلسة ",
set_new_password: "تعيين كلمة مرور جديدة ",
share_to: " شارك إلى",
show_all_windows: "إظهار كافة النوافذ ",
show_hidden: 'أظهر المخفي ',
sign_in_with_puter: "سجل الدخول ب Puter",
sign_up: "إشترك",
signing_in: "تسجيل الدخول",
size: 'الحجم',
sort_by: 'ترتيب حسب',
start: 'إبدأ ',
taking_longer_than_usual: 'يستغرق وقتا أطول من المعتاد ',
text_document: 'وثيقة نصية',
tos_fineprint: `بالنقر على "إنشاء حساب مجاني"، فإنك توافق على <a href="https://puter.com/terms" target="_blank">شروط الاستخدام</a> و <a href="https://puter.com/privacy" target="_blank">حماية البيانات</a>`,
trash: 'نفاية',
type: 'اكتب',
undo: 'الغاء التحميل',
unzip: "فك الضغط",
upload: 'رفع ',
upload_here: 'ارفع هنا',
username: "اسم المستخدم ",
username_changed: 'تم تغيير اسم المستخدم',
versions: "الإصدارات ",
yes_release_it: 'نعم أطلقه',
you_have_been_referred_to_puter_by_a_friend: "لقد تمت إحالتك إلى Puter بواسطة صديق!",
zip: "ملف مضغوط",
}
};
export default ar;

View File

@ -0,0 +1,166 @@
const emoji = {
name: "🌍",
code: "emoji",
dictionary: {
access_granted_to: "🔓✅",
add_existing_account: "➕🔄👤",
all_fields_required: '📝🔒✅',
apply: "📋🔄",
ascending: '🔼',
background: "🖼️",
browse: "🔍",
cancel: '❌',
center: '🎯',
change_desktop_background: '🔄🖥️🖼️',
change_language: "🔄🌐",
change_password: "🔑🔄",
change_username: "👤🔄",
close_all_windows: "❌🔄🖼️🖼️",
close_all_windows_and_log_out: '❌🔄🖼️🖼️🔚',
color: '🎨',
confirm_account_for_free_referral_storage_c2a: '📧🆓👤📂📦🆓',
confirm_delete_multiple_items: '❓❌🗑️❓',
confirm_delete_single_item: '❓❌🗑️❓',
confirm_open_apps_log_out: '❓📦🔄🔚',
confirm_new_password: "🔑❓🔑",
contact_us: "📞📧",
contain: '📦🔍',
continue: "⏩",
copy: '📋',
copy_link: "🔗📋",
copying: "📋➡️",
cover: '📚👀',
create_account: "👤🆕",
create_free_account: "👤🆓",
create_shortcut: "📌🔄",
current_password: "🔑🔍",
cut: '✂️',
date_modified: '📅🔄',
delete: '🗑️',
delete_permanently: "🗑️🔚",
deploy_as_app: '🚀📱',
descending: '🔽',
desktop_background_fit: "🖥️🖼️",
dir_published_as_website: `📂📰🌐`,
disassociate_dir: "📂🔁❌",
download: '⬇️',
download_file: '⬇️📄',
downloading: "⬇️➡️",
email: "📧",
email_or_username: "📧👤",
empty_trash: '🗑️🆓',
empty_trash_confirmation: `❓🗑️❓`,
emptying_trash: '🗑️🆓...',
feedback: "📝💬",
feedback_c2a: "📝📤",
feedback_sent_confirmation: "📧👍",
forgot_pass_c2a: "🔑❓ (╯°□°)╯︵ ┻━┻",
from: "📩",
general: "⚙️",
get_a_copy_of_on_puter: `📩🔄📂`,
get_copy_link: '🔗🔄',
hide_all_windows: "🔚🔄🖼️🖼️",
html_document: '📄🌐',
image: '🖼️',
invite_link: "🔗📩",
item: '📂',
items_in_trash_cannot_be_renamed: `🗑️🆓❌`,
jpeg_image: '🖼️',
keep_in_taskbar: '📌📁',
loading: '🔄',
log_in: "👤🔓",
log_into_another_account_anyway: '👤🔄',
log_out: '🔚',
move: '➡️',
moving: "➡️...",
my_websites: "🌐👤",
name: '📛',
name_cannot_be_empty: '📛❌',
name_cannot_contain_double_period: "📛❌",
name_cannot_contain_period: "📛❌",
name_cannot_contain_slash: "📛❌",
name_must_be_string: "📛❌",
name_too_long: `📛❌`,
new: '🆕',
new_folder: '🆕📂',
new_password: "🆕🔑",
new_username: "🆕👤",
no: '❌',
no_dir_associated_with_site: '📂❌🌐',
no_websites_published: "🌐❌",
ok: '👌',
open: "📂🔄",
open_in_new_tab: "📂🔄🆕",
open_in_new_window: "📂🔄🖼️🆕",
open_with: "📂🔄🔓",
password: "🔑",
password_changed: "🔑✅",
passwords_do_not_match: '🔑❌🔑',
paste: '📋➡️',
paste_into_folder: "📂📋➡️",
pick_name_for_website: "🌐📛❓:",
picture: "🖼️",
powered_by_puter_js: `⚙️🔌🔗`,
preparing: "🔄🔜",
preparing_for_upload: "🔄🔜",
proceed_to_login: '👤🔍',
properties: "⚙️",
publish: "📰",
publish_as_website: '🌐📰',
plural_suffix: '🅰️',
recent: "🔙",
recover_password: "🔑🔄📧",
refer_friends_c2a: "👤📞📧👤",
refer_friends_social_media_c2a: `📲👤🆓`,
refresh: '🔄🔄',
release_address_confirmation: `❓🆓`,
remove_from_taskbar:'📌❌📁',
rename: '🔄📛',
repeat: '🔂',
replace: '🔄🔄',
replace_all: '🔄🔄',
resend_confirmation_code: "📧🔁",
restore: "🔄🔙",
save_account: '👤💾',
save_account_to_get_copy_link: "🆕👤📋🔗",
save_account_to_publish: '🆕👤📰',
save_session: '💾📂',
save_session_c2a: '🆕👤💾',
scan_qr_c2a: '📲🔍',
select: "👉",
selected: '✅',
select_color: '🎨👉',
send: "📤",
send_password_recovery_email: "📧🔑🔄",
session_saved: "👤💾🔄",
set_new_password: "🔑🆕",
share_to: "🔁➡️",
show_all_windows: "🔄🆓🖼️🖼️",
show_hidden: '👁️🔄',
sign_in_with_puter: "👤🆔",
sign_up: "👤🆕",
signing_in: "🔄👤",
size: '📏',
skip: '⏩',
sort_by: '🔢🔄',
start: '🚀',
taking_longer_than_usual: '⏳🔄',
text_document: '📄',
tos_fineprint: `👤📝📄`,
trash: '🗑️',
type: '🔡',
undo: '↩️',
unzip: "🔓📂",
upload: '⬆️',
upload_here: '⬆️📂',
username: "👤",
username_changed: '👤✅',
versions: "🔄📃",
yes: '✅',
yes_release_it: '✅🆓',
you_have_been_referred_to_puter_by_a_friend: "👤🔁🆓",
zip: "📂🔒",
}
};
export default emoji;

View File

@ -16,8 +16,12 @@ const en = {
change_password: "Change Password", change_password: "Change Password",
change_username: "Change Username", change_username: "Change Username",
close_all_windows: "Close All Windows", close_all_windows: "Close All Windows",
close_all_windows_and_log_out: 'Close Windows and Log Out',
color: 'Color', 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_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", confirm_new_password: "Confirm New Password",
contact_us: "Contact Us", contact_us: "Contact Us",
contain: 'Contain', contain: 'Contain',
@ -40,6 +44,7 @@ const en = {
dir_published_as_website: `%strong% has been published to:`, dir_published_as_website: `%strong% has been published to:`,
disassociate_dir: "Disassociate Directory", disassociate_dir: "Disassociate Directory",
download: 'Download', download: 'Download',
download_file: 'Download File',
downloading: "Downloading", downloading: "Downloading",
email: "Email", email: "Email",
email_or_username: "Email or Username", email_or_username: "Email or Username",
@ -58,10 +63,13 @@ const en = {
html_document: 'HTML document', html_document: 'HTML document',
image: 'Image', image: 'Image',
invite_link: "Invite Link", 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.`, 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', jpeg_image: 'JPEG image',
keep_in_taskbar: 'Keep in Taskbar', keep_in_taskbar: 'Keep in Taskbar',
loading: 'Loading',
log_in: "Log In", log_in: "Log In",
log_into_another_account_anyway: 'Log into another account anyway',
log_out: 'Log Out', log_out: 'Log Out',
move: 'Move', move: 'Move',
moving: "Moving", moving: "Moving",
@ -77,6 +85,7 @@ const en = {
new_folder: 'New folder', new_folder: 'New folder',
new_password: "New Password", new_password: "New Password",
new_username: "New Username", new_username: "New Username",
no: 'No',
no_dir_associated_with_site: 'No directory associated with this address.', no_dir_associated_with_site: 'No directory associated with this address.',
no_websites_published: "You have not published any websites yet.", no_websites_published: "You have not published any websites yet.",
ok: 'OK', 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>`, powered_by_puter_js: `Powered by <a href="https://docs.puter.com/" target="_blank">Puter.js</a>`,
preparing: "Preparing...", preparing: "Preparing...",
preparing_for_upload: "Preparing for upload...", preparing_for_upload: "Preparing for upload...",
proceed_to_login: 'Proceed to login',
properties: "Properties", properties: "Properties",
publish: "Publish", publish: "Publish",
publish_as_website: 'Publish as website', publish_as_website: 'Publish as website',
plural_suffix: 's',
recent: "Recent", recent: "Recent",
recover_password: "Recover Password", 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!", 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', remove_from_taskbar:'Remove from Taskbar',
rename: 'Rename', rename: 'Rename',
repeat: 'Repeat', repeat: 'Repeat',
replace: 'Replace',
replace_all: 'Erstatt alle',
resend_confirmation_code: "Re-send Confirmation Code", resend_confirmation_code: "Re-send Confirmation Code",
restore: "Restore", restore: "Restore",
save_account: 'Save account',
save_account_to_get_copy_link: "Please create an account to proceed.", save_account_to_get_copy_link: "Please create an account to proceed.",
save_account_to_publish: '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.', 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', scan_qr_c2a: 'Scan the code below to log into this session from other devices',
select: "Select", select: "Select",
selected: 'selected',
select_color: 'Select color…', select_color: 'Select color…',
send: "Send", send: "Send",
send_password_recovery_email: "Send Password Recovery Email", send_password_recovery_email: "Send Password Recovery Email",
@ -125,6 +141,7 @@ const en = {
sign_up: "Sign Up", sign_up: "Sign Up",
signing_in: "Signing in…", signing_in: "Signing in…",
size: 'Size', size: 'Size',
skip: 'Skip',
sort_by: 'Sort by', sort_by: 'Sort by',
start: 'Start', start: 'Start',
taking_longer_than_usual: 'Taking a little longer than usual. Please wait...', taking_longer_than_usual: 'Taking a little longer than usual. Please wait...',
@ -139,6 +156,7 @@ const en = {
username: "Username", username: "Username",
username_changed: 'Username updated successfully.', username_changed: 'Username updated successfully.',
versions: "Versions", versions: "Versions",
yes: 'Yes',
yes_release_it: 'Yes, Release It', yes_release_it: 'Yes, Release It',
you_have_been_referred_to_puter_by_a_friend: "You have been referred to Puter by a friend!", you_have_been_referred_to_puter_by_a_friend: "You have been referred to Puter by a friend!",
zip: "Zip", zip: "Zip",

148
src/i18n/translations/es.js Normal file
View File

@ -0,0 +1,148 @@
const es = {
name: "Español",
code: "es",
dictionary: {
access_granted_to: "Acceso Permitido A",
add_existing_account: "Añadir una cuenta existente",
all_fields_required: 'Todos los campos son obligatorios.',
apply: "Aplicar",
ascending: 'Ascendiente',
background: "Fondo",
browse: "Buscar",
cancel: 'Cancelar',
center: 'Centrar',
change_desktop_background: 'Cambiar el fondo de pantalla…',
change_language: "Cambiar Idioma",
change_password: "Cambiar Contraseña",
change_username: "Cambiar Nombre de Usuario",
close_all_windows: "Cerrar todas las ventanas",
color: 'Color',
confirm_account_for_free_referral_storage_c2a: 'Crea una cuenta y confirma tu dirección de email para recibir 1 GB de almacenamiento gratuito. Tu amigo recibirá 1 GB de almacenamiento gratuito también.',
confirm_new_password: "Confirma la Nueva Contraseña",
contact_us: "Contáctanos",
contain: 'Contiene',
continue: "Continuar",
copy: 'Copiar',
copy_link: "Copiar Enlace",
copying: "Copiando",
cover: 'Cubrir',
create_account: "Crear una cuenta",
create_free_account: "Crear una cuenta gratuita",
create_shortcut: "Crear un acceso directo",
current_password: "Contraseña actual",
cut: 'Cortar',
date_modified: 'Fecha de modificación',
delete: 'Borrar',
delete_permanently: "Borrar permanentemente",
deploy_as_app: 'Desplegar como una aplicación',
descending: 'Descendiente',
desktop_background_fit: "Llenar",
dir_published_as_website: `%strong% ha sido publicado a:`,
disassociate_dir: "Desvincular directorio",
download: 'Descargar',
downloading: "Descargando",
email: "Email",
email_or_username: "Email o Nombre de Usuario",
empty_trash: 'Vaciar la papelera',
empty_trash_confirmation: `¿Estás seguro de que quieres borrar permanentemente todos los elementos de la Papelera?`,
emptying_trash: 'Vaciando la papelera…',
feedback: "Feedback",
feedback_c2a: "Por favor, usa el formulario para enviarnos tu feedback, comentario y reportar bugs.",
feedback_sent_confirmation: "Gracias por ponerte en contacto con nosotros. Si tienes un email vinculado con la cuenta, nos pondremos en contacto contigo tan pronto como podamos.",
forgot_pass_c2a: "¿Contraseña olvidada?",
from: "De",
general: "General",
get_a_copy_of_on_puter: `¡Consigue una copia de '%%' en Puter.com!`,
get_copy_link: 'Copiar el enlace',
hide_all_windows: "Ocultar Todas las Ventanas",
html_document: 'Documento HTML',
image: 'Imagen',
invite_link: "Enlace de invitación",
items_in_trash_cannot_be_renamed: `Este elemento no se puede renombrar porque está en la papelera. Para cambiar el nombre de este archivo, primero extráelo fuera de la misma.`,
jpeg_image: 'Imagen JPEG',
keep_in_taskbar: 'Fijar a la barra de tareas',
log_in: "Iniciar sesión",
log_out: 'Cerrar sesión',
move: 'Mover',
moving: "Moviendo",
my_websites: "Mis páginas web",
name: 'Nombre',
name_cannot_be_empty: 'El nombre no puede estar vacío.',
name_cannot_contain_double_period: "El nombre no puede ser el carácter '..'.",
name_cannot_contain_period: "El nombre no puede ser el carácter '.'.",
name_cannot_contain_slash: "El nombre no puede contener el carácter '/'.",
name_must_be_string: "El nombre debe ser una cadena de texto.",
name_too_long: `El nombre no puede tener más de %% caracteres.`,
new: 'Nuevo',
new_folder: 'Nueva carpeta',
new_password: "Nueva contraseña",
new_username: "Nuevo nombre de usuario",
no_dir_associated_with_site: 'No hay un directorio vinculado con esta dirección.',
no_websites_published: "No has publicado ninguna página web todavía.",
ok: 'OK',
open: "Abrir",
open_in_new_tab: "Abrir en una Nueva Pestaña",
open_in_new_window: "Abrir en una Nueva Ventana",
open_with: "Abrir Con",
password: "Contraseña",
password_changed: "Contraseña cambiada.",
passwords_do_not_match: '`Nueva Contraseña` y `Confirmar Nueva Contraseña` no coincide.',
paste: 'Pegar',
paste_into_folder: "Pegar en la Carpeta",
pick_name_for_website: "Escoge un nombre para tu página web:",
picture: "Imagen",
powered_by_puter_js: `Creado por <a href="https://docs.puter.com/" target="_blank">Puter.js</a>`,
preparing: "Preparando...",
preparing_for_upload: "Preparando para la subida...",
properties: "Propiedades",
publish: "Publicar",
publish_as_website: 'Publicar como página web',
recent: "Reciente",
recover_password: "Recuperar Contraseña",
refer_friends_c2a: "Consigue 1 GB por cada amigo que cree y confirme una cuenta en Puter ¡Tu amigo recibirá 1GB también!",
refer_friends_social_media_c2a: `¡Consigue 1 GB de almacenamiento gratuito en Puter.com!`,
refresh: 'Refrescar',
release_address_confirmation: `¿Estás seguro de liberar esta dirección?`,
remove_from_taskbar:'Eliminar de la barra de tareas',
rename: 'Renombrar',
repeat: 'Repetir',
resend_confirmation_code: "Reenviar Código de Confirmación",
restore: "Restaurar",
save_account_to_get_copy_link: "Por favor, crea una cuenta para continuar.",
save_account_to_publish: 'Por favor, crea una cuenta para continuar.',
save_session_c2a: 'Crea una cuenta para guardar tu sesión actual y evitar así perder tu trabajo.',
scan_qr_c2a: 'Escanea el código de debajo e inicia sesión desde otros dispositivos',
select: "Seleccionar",
select_color: 'Seleccionar color…',
send: "Enviar",
send_password_recovery_email: "Enviar la contraseña al correo de recuperación",
session_saved: "Gracias por crear una cuenta. La sesión ha sido guardada.",
set_new_password: "Establecer una nueva contraseña",
share_to: "Compartir con",
show_all_windows: "Mostrar todas las ventanas",
show_hidden: 'Mostrar ocultos',
sign_in_with_puter: "Inicia sesión con Puter",
sign_up: "Registrarse",
signing_in: "Registrándose…",
size: 'Tamaño',
sort_by: 'Ordenar Por',
start: 'Inicio',
taking_longer_than_usual: 'Tardando un poco más de lo usual. Por favor, espere...',
text_document: 'Documento de Texto',
tos_fineprint: `Pulsando sobre 'Crear una cuenta gratuita' aceptas los <a href="https://puter.com/terms" target="_blank"> términos del servicio</a> de Puter y <a href="https://puter.com/privacy" target="_blank">la política de privacidad</a>.`,
trash: 'Papelera',
type: 'Tipo',
undo: 'Deshacer',
unzip: "Descomprimir",
upload: 'Subir',
upload_here: 'Subir aquí',
username: "Nombre de usuario",
username_changed: 'Nombre de usuario actualizado correctamente.',
versions: "Versiones",
yes_release_it: 'Sí, liberar',
you_have_been_referred_to_puter_by_a_friend: "¡Has sido invitado a Puter por un amigo!",
zip: "Comprimir en Zip",
}
};
export default es;

148
src/i18n/translations/hy.js Normal file
View File

@ -0,0 +1,148 @@
const hy = {
name: "Հայերեն",
code: "hy",
dictionary: {
access_granted_to: "Մուտքը տրված է՝",
add_existing_account: "Ավելացնել առկա հաշիվ",
all_fields_required: "Բոլոր դաշտերը պահանջվում են",
apply: "Կիրառել",
ascending: "Աճման կարգով",
background: "Ֆոն",
browse: "Թերթել",
cancel: "Չեղարկել",
center: "Կենտրոն",
change_desktop_background: "Փոխել աշխատասեղանի ֆոնը",
change_language: "Փոխել լեզուն",
change_password: "Փոխել գաղտնաբառը",
change_username: "Փոխել օգտանունը",
close_all_windows: "Փակել բոլոր պատուհանները",
color: "Գույն",
confirm_account_for_free_referral_storage_c2a: "Ստեղծեք հաշիվ և հաստատեք ձեր էլ․ հասցեն 1 ԳԲ անվճար պահեստ ստանալու համար: Ձեր ընկերը նույնպես կստանա 1 ԳԲ անվճար պահեստ:",
confirm_new_password: "Հաստատել նոր գաղտնաբառը",
contact_us: "Հետադարձ կապ",
contain: "Պարունակել",
continue: "Շարունակել",
copy: "Պատճենել",
copy_link: "Պատճենել հղումը",
copying: "Պատճենվում է",
cover: "Ծածկել",
create_account: "Ստեղծել հաշիվ",
create_free_account: "Ստեղծել անվճար հաշիվ",
create_shortcut: "Ստեղծել դյուրանցում",
current_password: "Ներկայիս գաղտնաբառ",
cut: "Կտրել",
date_modified: "Փոփոխման ամսապիվ",
delete: "Ջնջել",
delete_permanently: "Ընդմիշտ ջնջել",
deploy_as_app: "Տեղադրել որպես հավելված",
descending: "Նվազման կարգով",
desktop_background_fit: "Հարմարեցնել",
dir_published_as_website: "%strong% հրապարակվել է",
disassociate_dir: "Անջատել պանակը",
download: "Ներբեռնել",
downloading: "Ներբեռնում է",
email: "Էլեկտրոնային հասցե",
email_or_username: "Էլ․ հասցե կամ օգտանուն",
empty_trash: "Դատարկել աղբամանը",
empty_trash_confirmation: "Իսկապե՞ս ուզում եք ընդմիշտ ջնջել աղբարկղում գտնվող տարրերը:",
emptying_trash: "Աղբամանը դատարկվում է…",
feedback: "Հետադարձ կապ",
feedback_c2a: "Խնդրում ենք օգտագործել ստորև բերված ձևը ձեր կարծիքի, մեկնաբանությունների և վրիպակների մասին զեկուցելու համար:",
feedback_sent_confirmation: "Շնորհակալություն մեզ հետ կապնվելու համար: Եթե ​​ձեր հաշվի հետ կապված էլ. հասցե ունեք, հնարավորինս շուտ կպատասխանեք ձեզ:",
forgot_pass_c2a: "Մոռացե՞լ եք գաղտնաբառը",
from: "Ումից՝",
general: "Ընդհանուր",
get_a_copy_of_on_puter: "Ստանալ '%%'-ի պատճենը Puter.com-ում:",
get_copy_link: "Ստանալ պատճենված հղումը",
hide_all_windows: "Թաքցնել բոլոր պատուհանները",
html_document: "HTML նիշք",
image: "Պատկեր",
invite_link: "Հրավերի հղում",
items_in_trash_cannot_be_renamed: "Այս տարրը չի կարող վերանվանվել, քանի որ այն աղբարկղում է: Այս տարրը վերանվանելու համար նախ տեղափոխեք այն աղբարկղից:",
jpeg_image: "JPEG նիշք",
keep_in_taskbar: "Պահպանել խնդրագոտում",
log_in: "Մուտք գործել",
log_out: "Դուրս գալ",
move: "Տեղափոխել",
moving: "Տեղափոխվում է",
my_websites: "Իմ կայքերը",
name: "Անուն",
name_cannot_be_empty: "Անվան դաշտը չի կառող լինել դատարկ։",
name_cannot_contain_double_period: "Անունը չի կարող լինել '..' նիշը։",
name_cannot_contain_period: "Անունը չի կարող պարունակել '.' նիշը։",
name_cannot_contain_slash: "Անունը չի կարող պարունակել '/' նիշը։",
name_must_be_string: "Անունը կարող է լինել միայն տող:",
name_too_long: "Անունը չի կարող լինել ավելի քան %% նիշ:",
new: "Նոր",
new_folder: "Նոր պանակ",
new_password: "Նոր գաղտնաբառ",
new_username: "Նոր օգտանուն",
no_dir_associated_with_site: "Այս հասցեի հետ կապված պանակ չկա:",
no_websites_published: "Դուք դեռ ոչ մի կայք չեք հրապարակել։",
ok: "Լավ",
open: "Բացել",
open_in_new_tab: "Բացել նոր ներդիրով",
open_in_new_window: "Բացել նոր պատուհանում",
open_with: "Բացել հավելվածով",
password: "Գաղտնաբառ",
password_changed: "Գաղտնաբառը փոփոխված է",
passwords_do_not_match: "«Նոր գաղտնաբառ» և «Հաստատել նոր գաղտնաբառը» դաշտերը չեն համընկնում:",
paste: "Կպցնել",
paste_into_folder: "Տեղադրել պանակում",
pick_name_for_website: "Ընտրել անուն ձեր կայքի համար",
picture: "Նկար",
powered_by_puter_js: `Աջակցվում է <a href="https://docs.puter.com/" target="_blank">Puter.js</a>-ի կողմից`,
preparing: "Պատրաստվում է...",
preparing_for_upload: "Պատրաստվում է վերբեռնել...",
properties: "Հատկություններ",
publish: "Հրապարակել",
publish_as_website: "Հրապարակել որպես կայք",
recent: "Վերջին",
recover_password: "Վերականգնել գաղտնաբառը",
refer_friends_c2a: "Ստացեք 1 ԳԲ Փութերում յուրաքանչյուր հաշիվ ստեղծող և այն հաստատող ընկերոջ համար: Ձեր ընկերը նույնպես կստանա 1 ԳԲ պահեստ:",
refer_friends_social_media_c2a: "Ստացեք 1 ԳԲ անվճար պահեստ Puter.com-ում:",
refresh: "Թարմացնել",
release_address_confirmation: "Իսկապե՞ս ուզում եք ջնջել այս հասցեն:",
remove_from_taskbar: "Հանել խնդրագոտուց",
rename: "Վերանվանել",
repeat: "Կրկնել",
resend_confirmation_code: "Նորից ուղարկել հաստատման կոդը",
restore: "Վերականգնել",
save_account_to_get_copy_link: "Շարունակելու համար խնդրում ենք ստեղծել հաշիվ:",
save_account_to_publish: "Շարունակելու համար խնդրում ենք ստեղծել հաշիվ:",
save_session_c2a: "Ստեղծեք հաշիվ՝ ձեր ընթացիկ աշխատաշրջանը պահպանելու և աշխատանքը չկորցնելու համար:",
scan_qr_c2a: "Սկանավորեք ստորև նշված կոդը՝ այլ սարքերից այս աշխատաշրջան մուտք գործելու համար",
select: "Ընտրել",
select_color: "Ընտրել գույն…",
send: "Ուղարկել",
send_password_recovery_email: "Ուղարկել գաղտնաբառի վերականգնման էլ․փոստի նամակ",
session_saved: "Շնորհակալություն հաշիվ ստեղծելու համար: Այս աշխատաշրջանը պահպանվել է:",
set_new_password: "Սահմանել նոր գաղտնաբառ",
share_to: "Տարածել",
show_all_windows: "Ցույց տալ բոլոր պատուհանները",
show_hidden: "Ցույց տալ թաքնված տարրերը",
sign_in_with_puter: "Մուտք գործել Փութերի միջոցով",
sign_up: "Գրանցվել",
signing_in: "Մուտք է գործում",
size: "Չափ",
sort_by: "Տեսակավորել ըստ՝",
start: "Սկսել",
taking_longer_than_usual: "Սովորականից մի փոքր ավելի երկար է տևում: Խնդրում ենք սպասել...",
text_document: "Text նիշք",
tos_fineprint: `Սեղմելով «Ստեղծել անվճար հաշիվ»՝ դուք համաձայնում եք Փութերի <a href="https://puter.com/terms" target="_blank">ծառայությունների պայմաններին</a> և <a href="https://puter.com/privacy" target="_blank">գաղտնիության քաղաքականությանը</a>:`,
trash: "Աղբաման",
type: "Տեսակ",
undo: "Հետարկել",
unzip: "Դուրս բերել",
upload: "Վերբեռնել",
upload_here: "Վերբեռնել այստեղ",
username: "Օգտանուն",
username_changed: "Օգտանունը հաջողությամբ թարմացվել է:",
versions: "Տարբերակներ",
yes_release_it: "Այո, ջնջել",
you_have_been_referred_to_puter_by_a_friend: "Դուք ուղղորդվել եք Փութեր ձեր ընկերոջ կողմից:",
zip: "Սեղմել ZIP նիշքի",
},
};
export default hy;

View File

@ -16,8 +16,12 @@ const nb = {
change_password: "Endre passord", change_password: "Endre passord",
change_username: "Endre brukernavn", change_username: "Endre brukernavn",
close_all_windows: "Lukk alle vinduer", close_all_windows: "Lukk alle vinduer",
close_all_windows_and_log_out: 'Lukk alle vinduer og logg ut',
color: "Farge", 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_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", confirm_new_password: "Bekreft nytt passord",
contact_us: "Kontakt oss", contact_us: "Kontakt oss",
contain: "Inneholde", contain: "Inneholde",
@ -40,6 +44,7 @@ const nb = {
dir_published_as_website: "%strong% er publisert på:", dir_published_as_website: "%strong% er publisert på:",
disassociate_dir: "Fjern tilknytning fra mappe", disassociate_dir: "Fjern tilknytning fra mappe",
download: "Last ned", download: "Last ned",
download_file: 'Last ned fil',
downloading: "Laster ned", downloading: "Laster ned",
email: "E-post", email: "E-post",
email_or_username: "E-post eller brukernavn", email_or_username: "E-post eller brukernavn",
@ -58,10 +63,13 @@ const nb = {
html_document: "HTML-dokument", html_document: "HTML-dokument",
image: "Bilde", image: "Bilde",
invite_link: "Invitasjonslenke", 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.", 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", jpeg_image: "JPEG-bilde",
keep_in_taskbar: "Behold i oppgavelinjen", keep_in_taskbar: "Behold i oppgavelinjen",
loading: 'Laster',
log_in: "Logg inn", log_in: "Logg inn",
log_into_another_account_anyway: 'Logg inn på en annen bruker uansett',
log_out: "Logg ut", log_out: "Logg ut",
move: "Flytt", move: "Flytt",
moving: "Flytter", moving: "Flytter",
@ -77,6 +85,7 @@ const nb = {
new_folder: "Ny mappe", new_folder: "Ny mappe",
new_password: "Nytt passord", new_password: "Nytt passord",
new_username: "Nytt brukernavn", new_username: "Nytt brukernavn",
no: 'Nei',
no_dir_associated_with_site: "Ingen mappe er tilknyttet denne adressen.", no_dir_associated_with_site: "Ingen mappe er tilknyttet denne adressen.",
no_websites_published: "Du har ikke publisert noen nettsteder ennå.", no_websites_published: "Du har ikke publisert noen nettsteder ennå.",
ok: "OK", ok: "OK",
@ -95,8 +104,10 @@ const nb = {
preparing: "Forbereder...", preparing: "Forbereder...",
preparing_for_upload: "Forbereder opplasting...", preparing_for_upload: "Forbereder opplasting...",
properties: "Egenskaper", properties: "Egenskaper",
proceed_to_login: 'Fortsett til innlogging',
publish: "Publiser", publish: "Publiser",
publish_as_website: "Publiser som nettsted", publish_as_website: "Publiser som nettsted",
plural_suffix: 'er',
recent: "Nylig", recent: "Nylig",
recover_password: "Gjenopprett passord", 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.", 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", remove_from_taskbar: "Fjern fra oppgavelinjen",
rename: "Gi nytt navn", rename: "Gi nytt navn",
repeat: "Gjenta", repeat: "Gjenta",
replace: 'Erstatt',
replace_all: 'Erstatt alle',
resend_confirmation_code: "Send bekreftelseskoden på nytt", resend_confirmation_code: "Send bekreftelseskoden på nytt",
restore: "Gjenopprett", restore: "Gjenopprett",
save_account: 'Lagre konto',
save_account_to_get_copy_link: "Vennligst opprett en konto for å fortsette.", save_account_to_get_copy_link: "Vennligst opprett en konto for å fortsette.",
save_account_to_publish: "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.", 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", scan_qr_c2a: "Skann koden nedenfor for å logge inn på denne økten fra andre enheter",
select: "Velg", select: "Velg",
selected: 'valgt',
select_color: "Velg farge…", select_color: "Velg farge…",
send: "Send", send: "Send",
send_password_recovery_email: "Send e-post for gjenoppretting av passord", send_password_recovery_email: "Send e-post for gjenoppretting av passord",
@ -125,6 +141,7 @@ const nb = {
sign_up: "Registrer deg", sign_up: "Registrer deg",
signing_in: "Logger inn…", signing_in: "Logger inn…",
size: "Størrelse", size: "Størrelse",
skip: 'Hopp over',
sort_by: "Sorter etter", sort_by: "Sorter etter",
start: "Start", start: "Start",
taking_longer_than_usual: "Dette tar litt lenger tid enn vanlig. Vennligst vent...", taking_longer_than_usual: "Dette tar litt lenger tid enn vanlig. Vennligst vent...",
@ -140,6 +157,7 @@ const nb = {
username_changed: "Brukernavn oppdatert.", username_changed: "Brukernavn oppdatert.",
versions: "Versjoner", versions: "Versjoner",
yes_release_it: "Ja, frigi den", 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!", you_have_been_referred_to_puter_by_a_friend: "Du har blitt henvist til Puter av en venn!",
zip: "Zip" zip: "Zip"
} }

View File

@ -1,10 +1,13 @@
import ar from './ar.js';
import bn from './bn.js' import bn from './bn.js'
import da from './da.js'; import da from './da.js';
import de from './de.js' import de from './de.js'
import en from './en.js'; import en from './en.js';
import es from './es.js';
import fa from './fa.js'; import fa from './fa.js';
import fi from './fi.js'; import fi from './fi.js';
import fr from './fr.js'; import fr from './fr.js';
import hy from './hy.js';
import it from './it.js'; import it from './it.js';
import ko from './ko.js'; import ko from './ko.js';
import nb from './nb.js'; import nb from './nb.js';
@ -12,15 +15,19 @@ import nn from './nn.js';
import ro from './ro.js'; import ro from './ro.js';
import sv from './sv.js'; import sv from './sv.js';
import zh from './zh.js'; import zh from './zh.js';
import emoji from './emoji.js';
export default { export default {
ar,
bn, bn,
da, da,
de, de,
en, en,
es,
fa, fa,
fi, fi,
fr, fr,
hy,
it, it,
ko, ko,
nb, nb,
@ -28,4 +35,5 @@ export default {
ro, ro,
sv, sv,
zh, zh,
emoji
}; };

View File

@ -46,9 +46,6 @@ window.initgui = async function(){
if(window.api_origin && puter.APIOrigin !== window.api_origin) if(window.api_origin && puter.APIOrigin !== window.api_origin)
puter.setAPIOrigin(api_origin); puter.setAPIOrigin(api_origin);
// determine locale
window.locale = window.user_preferences.language;
// Checks the type of device the user is on (phone, tablet, or desktop). // Checks the type of device the user is on (phone, tablet, or desktop).
// Depending on the device type, it sets a class attribute on the body tag // Depending on the device type, it sets a class attribute on the body tag
// to style or script the page differently for each device type. // to style or script the page differently for each device type.
@ -530,12 +527,12 @@ window.initgui = async function(){
message: `<strong>${html_encode(err.entry_name)}</strong> already exists.`, message: `<strong>${html_encode(err.entry_name)}</strong> already exists.`,
buttons:[ buttons:[
{ {
label: 'Replace', label: i18n('replace'),
value: 'replace', value: 'replace',
type: 'primary', type: 'primary',
}, },
{ {
label: 'Cancel', label: i18n('cancel'),
value: 'cancel', value: 'cancel',
}, },
], ],
@ -887,12 +884,12 @@ window.initgui = async function(){
message: `<strong>${html_encode(err.entry_name)}</strong> already exists.`, message: `<strong>${html_encode(err.entry_name)}</strong> already exists.`,
buttons:[ buttons:[
{ {
label: 'Replace', label: i18n('replace'),
value: 'replace', value: 'replace',
type: 'primary', type: 'primary',
}, },
{ {
label: 'Cancel', label: i18n('cancel'),
value: 'cancel', value: 'cancel',
}, },
], ],
@ -1328,14 +1325,14 @@ window.initgui = async function(){
let $selected_items = $(active_element).closest(`.item-container`).find(`.item-selected`); let $selected_items = $(active_element).closest(`.item-container`).find(`.item-selected`);
if($selected_items.length > 0){ if($selected_items.length > 0){
const alert_resp = await UIAlert({ const alert_resp = await UIAlert({
message: `Are you sure you want to permanently delete these items?`, message: i18n('confirm_delete_multiple_items'),
buttons:[ buttons:[
{ {
label: 'Delete', label: i18n('delete'),
type: 'primary', type: 'primary',
}, },
{ {
label: 'Cancel' label: i18n('cancel')
}, },
] ]
}) })
@ -1357,14 +1354,14 @@ window.initgui = async function(){
let $selected_items = $(active_element).closest(`.item-container`).find(`.item-selected[data-path^="${trash_path + '/'}"]`); let $selected_items = $(active_element).closest(`.item-container`).find(`.item-selected[data-path^="${trash_path + '/'}"]`);
if($selected_items.length > 0){ if($selected_items.length > 0){
const alert_resp = await UIAlert({ const alert_resp = await UIAlert({
message: `Are you sure you want to permanently delete these items?`, message: i18n('confirm_delete_multiple_items'),
buttons:[ buttons:[
{ {
label: 'Delete', label: i18n('delete'),
type: 'primary', type: 'primary',
}, },
{ {
label: 'Cancel' label: i18n('cancel')
}, },
] ]
}) })
@ -1878,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>`, 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:[ buttons:[
{ {
label: 'Save Account', label: i18n('save_account'),
value: 'save_account',
type: 'primary', type: 'primary',
}, },
{ {
label: 'Log Out', label: i18n('log_out'),
value: 'log_out',
type: 'danger', type: 'danger',
}, },
{ {
label: 'Cancel', label: i18n('cancel'),
}, },
] ]
}) })
if(alert_resp === 'Save Account'){ if(alert_resp === 'save_account'){
let saved = await UIWindowSaveAccount({ let saved = await UIWindowSaveAccount({
send_confirmation_code: false, send_confirmation_code: false,
default_username: window.user.username default_username: window.user.username
}); });
if(saved) if(saved)
logout(); logout();
}else if (alert_resp === 'Log Out'){ }else if (alert_resp === 'log_out'){
logout(); logout();
} }
else{ else{