diff --git a/app/js/app.js b/app/js/app.js index 1dfcd0e7..a704a99e 100755 --- a/app/js/app.js +++ b/app/js/app.js @@ -1,6 +1,6 @@ angular.module('app', ['ui.router', 'ct.ui.router.extras.sticky', 'ui.sortable', 'shipyard', 'ngLodash', 'app.templates', 'pascalprecht.translate']) -.run(['$rootScope', '$location', '$window', '$document', '$state', '$translate', 'localeFormat', 'Persist', 'Discounts', -function($rootScope, $location, $window, $doc, $state, $translate, localeFormat, Persist, Discounts) { +.run(['$rootScope', '$location', '$window', '$document', '$state', '$translate', 'localeFormat', 'Persist', 'Discounts', 'Languages', +function($rootScope, $location, $window, $doc, $state, $translate, localeFormat, Persist, Discounts, Languages) { // App is running as a standalone web app on tablet/mobile var isStandAlone; // This was causing issues on Windows phones ($window.external was causing Angular js to throw an exception). Backup is to try this and set isStandAlone to false if this fails. @@ -33,16 +33,9 @@ function($rootScope, $location, $window, $doc, $state, $translate, localeFormat, }); $rootScope.language = { - opts: { - en: 'English', - de: 'Deutsh', - es: 'Español', - fr: 'Français', - ru: 'ру́сский язы́к' - }, - current: Persist.getLangCode() + opts: Languages, + current: Languages[Persist.getLangCode()] ? Persist.getLangCode() : 'en' }; - $rootScope.localeFormat = d3.locale(localeFormat.get($rootScope.language.current)); updateNumberFormat(); diff --git a/app/js/config.js b/app/js/config.js index a54fa661..243e6e8d 100755 --- a/app/js/config.js +++ b/app/js/config.js @@ -1,17 +1,10 @@ /** * Sets up the routes and handlers before the Angular app is kicked off. */ -angular.module('app').config(['$provide', '$stateProvider', '$urlRouterProvider', '$locationProvider', '$translateProvider', 'ShipsDB', function($provide, $stateProvider, $urlRouterProvider, $locationProvider, $translateProvider, ships) { +angular.module('app').config(['$provide', '$stateProvider', '$urlRouterProvider', '$locationProvider', 'ShipsDB', function($provide, $stateProvider, $urlRouterProvider, $locationProvider, ships) { // Use HTML5 push and replace state if possible $locationProvider.html5Mode({ enabled: true, requireBase: false }); - // Use English as default/fallback language - $translateProvider - .useSanitizeValueStrategy('escapeParameters') - .useStorage('Persist') - .fallbackLanguage('en') - .determinePreferredLanguage(); - /** * Set up all states and their routes. */ diff --git a/app/js/directives/directive-bar-chart.js b/app/js/directives/directive-bar-chart.js index 02030696..dc95ce3b 100755 --- a/app/js/directives/directive-bar-chart.js +++ b/app/js/directives/directive-bar-chart.js @@ -28,7 +28,7 @@ angular.module('app').directive('barChart', ['$window', '$translate', '$rootScop fmt = null, unit = null, properties = scope.facet.props, - margin = { top: 10, right: 20, bottom: 35, left: 150 }, + margin = { top: 10, right: 20, bottom: 40, left: 150 }, y0 = d3.scale.ordinal(), y1 = d3.scale.ordinal(), x = d3.scale.linear(), @@ -55,18 +55,12 @@ angular.module('app').directive('barChart', ['$window', '$translate', '$rootScop var xAxisLbl = vis.append('g') .attr('class', 'x axis cap') .append('text') - .attr('y', 30) + .attr('y', 33) .attr('dy', '.1em') .style('text-anchor', 'middle'); updateFormats(); - /** - * Watch for changes in the comparison array (ships added/removed, sorting) - */ - scope.$watchCollection('data', render); - angular.element($window).bind('orientationchange resize render', render); - function render() { var data = scope.data, width = element[0].offsetWidth, @@ -125,8 +119,9 @@ angular.module('app').directive('barChart', ['$window', '$translate', '$rootScop render(); } + angular.element($window).bind('orientationchange resize render', render); + scope.$watchCollection('data', render); // Watch for changes in the comparison array scope.$on('languageChanged', updateFormats); - scope.$on('$destroy', function() { angular.element($window).unbind('orientationchange resize render', render); tip.destroy(); // Remove the tooltip from the DOM diff --git a/app/js/directives/directive-header.js b/app/js/directives/directive-header.js index 2a7e806c..1a56c196 100755 --- a/app/js/directives/directive-header.js +++ b/app/js/directives/directive-header.js @@ -82,10 +82,19 @@ angular.module('app').directive('shipyardHeader', ['lodash', '$window', '$rootSc }); scope.textSizeChange = function(size) { - $rootScope.sizeRatio = size; - document.getElementById('main').style.fontSize = size + 'em'; - Persist.setSizeRatio(size); - win.triggerHandler('resize'); + if (size != $rootScope.sizeRatio) { + $rootScope.sizeRatio = size; + document.getElementById('main').style.fontSize = size + 'em'; + Persist.setSizeRatio(size); + win.triggerHandler('resize'); + } + }; + + scope.resetTextSize = function() { + if ($rootScope.sizeRatio != 1) { + scope.textSizeChange(1); + scope.$broadcast('reset'); + } }; scope.$watchCollection('allBuilds', function() { diff --git a/app/js/directives/directive-line-chart.js b/app/js/directives/directive-line-chart.js index d52687d3..4a75c306 100644 --- a/app/js/directives/directive-line-chart.js +++ b/app/js/directives/directive-line-chart.js @@ -75,12 +75,6 @@ angular.module('app').directive('lineChart', ['$window', '$translate', '$rootSco updateFormats(); - /** - * Watch for changes in the series data (mass changes, etc) - */ - scope.$watchCollection('series', render); - angular.element($window).bind('orientationchange resize render', render); - function render() { var width = element[0].parentElement.offsetWidth, height = width * 0.5 * $rootScope.sizeRatio, @@ -193,8 +187,9 @@ angular.module('app').directive('lineChart', ['$window', '$translate', '$rootSco render(); } + angular.element($window).bind('orientationchange resize render', render); + scope.$watchCollection('series', render); // Watch for changes in the series data scope.$on('languageChanged', updateFormats); - scope.$on('$destroy', function() { angular.element($window).unbind('orientationchange resize render', render); }); diff --git a/app/js/directives/directive-power-bands.js b/app/js/directives/directive-power-bands.js index 35dd7a1b..3c787369 100644 --- a/app/js/directives/directive-power-bands.js +++ b/app/js/directives/directive-power-bands.js @@ -16,10 +16,10 @@ angular.module('app').directive('powerBands', ['$window', '$translate', '$rootSc depBandsSelected = false, wattScale = d3.scale.linear(), pctScale = d3.scale.linear().domain([0, 1]), - wattFmt = d3.format('.2f'), - pctFmt = d3.format('.1%'), - wattAxis = d3.svg.axis().scale(wattScale).outerTickSize(0).orient('top').tickFormat(d3.format('.2r')), - pctAxis = d3.svg.axis().scale(pctScale).outerTickSize(0).orient('bottom').tickFormat(d3.format('%')), + wattFmt, + pctFmt, + wattAxis = d3.svg.axis().scale(wattScale).outerTickSize(0).orient('top'), + pctAxis = d3.svg.axis().scale(pctScale).outerTickSize(0).orient('bottom'), // Create chart svg = d3.select(element[0]).append('svg'), vis = svg.append('g'), @@ -40,20 +40,14 @@ angular.module('app').directive('powerBands', ['$window', '$translate', '$rootSc // Create Y Axis SVG Elements vis.append('g').attr('class', 'watt axis'); vis.append('g').attr('class', 'pct axis'); + var retText = vis.append('text').attr('x', -3).style('text-anchor', 'end').attr('dy', '0.5em').attr('class', 'primary upp'); + var depText = vis.append('text').attr('x', -3).style('text-anchor', 'end').attr('dy', '0.5em').attr('class', 'primary upp'); + var retLbl = vis.append('text').attr('dy', '0.5em'); + var depLbl = vis.append('text').attr('dy', '0.5em'); - var retLbl = vis.append('text').attr('x', -35).attr('y', 16).attr('class', 'primary upp'); - var depLbl = vis.append('text').attr('x', -35).attr('y', barHeight + 18).attr('class', 'primary upp'); - var retVal = vis.append('text').attr('y', 16); - var depVal = vis.append('text').attr('y', barHeight + 18); + updateFormats(true); - // Watch for changes to data and events - scope.$watchCollection('available', dataChange); - angular.element($window).bind('pwrchange', dataChange); - angular.element($window).bind('orientationchange resize', render); - - updateFormats(); - - function render() { + function dataChange() { bands = scope.bands; available = scope.available; maxBand = bands[bands.length - 1]; @@ -82,7 +76,7 @@ angular.module('app').directive('powerBands', ['$window', '$translate', '$rootSc mTop = Math.round(25 * size), mRight = Math.round(130 * size), mBottom = Math.round(25 * size), - mLeft = Math.round(40 * size), + mLeft = Math.round(45 * size), barHeight = Math.round(20 * size), width = element[0].offsetWidth, innerHeight = (barHeight * 2) + 2, @@ -107,19 +101,10 @@ angular.module('app').directive('powerBands', ['$window', '$translate', '$rootSc vis.selectAll('.watt.axis').call(wattAxis); vis.selectAll('.pct.axis').attr('transform', 'translate(0,' + innerHeight + ')').call(pctAxis); - for (var b = 0, l = bands.length; b < l; b++) { - if (bands[b].retSelected) { - retractedSum += bands[b].retracted + bands[b].retOnly; - retBandsSelected = true; - } - if (bands[b].depSelected) { - deployedSum += bands[b].deployed + bands[b].retracted; - depBandsSelected = true; - } - } - - updateLabel(retVal, w, retBandsSelected, retBandsSelected ? retractedSum : maxBand.retractedSum, available); - updateLabel(depVal, w, depBandsSelected, depBandsSelected ? deployedSum : maxBand.deployedSum, available); + retText.attr('y', repY); + depText.attr('y', depY); + updateLabel(retLbl, w, repY, retBandsSelected, retBandsSelected ? retractedSum : maxBand.retractedSum, available); + updateLabel(depLbl, w, depY, depBandsSelected, depBandsSelected ? deployedSum : maxBand.deployedSum, available); retracted.selectAll('rect').data(bands).enter().append('rect') .attr('height', barHeight) @@ -166,7 +151,6 @@ angular.module('app').directive('powerBands', ['$window', '$translate', '$rootSc dataChange(); }) .text(function(d, i) { return bandText(d.deployed + d.retracted, i); }); - } function updateLabel(lbl, width, y, selected, sum, avail) { @@ -188,18 +172,23 @@ angular.module('app').directive('powerBands', ['$window', '$translate', '$rootSc return ''; } - function updateFormats() { - retLbl.text($translate.instant('ret')); - depLbl.text($translate.instant('dep')); + function updateFormats(preventRender) { + retText.text($translate.instant('ret')); + depText.text($translate.instant('dep')); wattFmt = $rootScope.localeFormat.numberFormat('.2f'); pctFmt = $rootScope.localeFormat.numberFormat('.1%'); wattAxis.tickFormat($rootScope.localeFormat.numberFormat('.2r')); pctAxis.tickFormat($rootScope.localeFormat.numberFormat('%')); - render(); + if (!preventRender) { + render(); + } } + // Watch for changes to data and events + angular.element($window).bind('pwrchange', dataChange); + angular.element($window).bind('orientationchange resize', render); + scope.$watchCollection('available', dataChange); scope.$on('languageChanged', updateFormats); - scope.$on('$destroy', function() { angular.element($window).unbind('orientationchange resize pwrchange', render); }); diff --git a/app/js/directives/directive-slider.js b/app/js/directives/directive-slider.js index f6ad4a9a..f6e6951c 100644 --- a/app/js/directives/directive-slider.js +++ b/app/js/directives/directive-slider.js @@ -7,7 +7,8 @@ angular.module('app').directive('slider', ['$window', function($window) { def: '=', max: '=', unit: '=', - change: '&onChange' + change: '&onChange', + ignoreResize: '=' }, link: function(scope, element) { var unit = scope.unit, @@ -16,7 +17,8 @@ angular.module('app').directive('slider', ['$window', function($window) { h = height - margin.top, fmt = d3.format('.2f'), pct = d3.format('.1%'), - val = scope.def !== undefined ? scope.def : scope.max, + def = scope.def !== undefined ? scope.def : scope.max, + val = def, svg = d3.select(element[0]).append('svg'), vis = svg.append('g').attr('transform', 'translate(' + margin.left + ',' + margin.top + ')'), xAxisContainer = vis.append('g').attr('class', 'x slider-axis').attr('transform', 'translate(0,' + h / 2 + ')'), @@ -32,16 +34,6 @@ angular.module('app').directive('slider', ['$window', function($window) { slider.select('.background').attr('height', h); handle.attr('transform', 'translate(0,' + h / 2 + ')'); - /** - * Watch for changes in the max, window size - */ - scope.$watch('max', function(newMax, oldMax) { - val = newMax * (val / oldMax); // Retain percentage filled - render(); - }); - - //angular.element($window).bind('orientationchange resize', render); - function render() { var width = element[0].offsetWidth, w = width - margin.left - margin.right; svg.attr('width', width).attr('height', height); @@ -51,16 +43,18 @@ angular.module('app').directive('slider', ['$window', function($window) { xAxisContainer.call(xAxis.tickValues([0, scope.max / 4, scope.max / 2, (3 * scope.max) / 4, scope.max])); lbl.attr('x', w + 20); } - slider.call(brush.extent([val, val])).call(brush.event); + slider.call(brush.extent([val, val])); + drawBrush(); slider.selectAll('.extent,.resize').remove(); } function brushed() { - val = brush.extent()[0]; - if (d3.event.sourceEvent) { // not a programmatic event - val = x.invert(d3.mouse(this)[0]); - brush.extent([val, val]); - } + val = x.invert(d3.mouse(this)[0]); + brush.extent([val, val]); + drawBrush(); + } + + function drawBrush() { if (unit) { lbl.text(fmt(val) + ' ' + unit + ' ' + pct(val / scope.max)); } @@ -69,6 +63,23 @@ angular.module('app').directive('slider', ['$window', function($window) { filled.attr('d', 'M0,0V0H' + x(val) + 'V0'); } + /** + * Watch for changes in the max, window size + */ + scope.$watch('max', function(newMax, oldMax) { + val = newMax * (val / oldMax); // Retain percentage filled + render(); + }); + + if (!scope.ignoreResize) { + angular.element($window).bind('orientationchange resize', render); + } + + scope.$on('reset', function() { + val = def; + render(); + }); + scope.$on('$destroy', function() { angular.element($window).unbind('orientationchange resize render', render); }); diff --git a/app/js/i18n/de.js b/app/js/i18n/de.js index c6ec5bcf..c5db8091 100644 --- a/app/js/i18n/de.js +++ b/app/js/i18n/de.js @@ -1,5 +1,4 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', function($translateProvider, localeFormatProvider) { - // Declare number format settings localeFormatProvider.addFormat('de', { decimal: ',', @@ -15,7 +14,6 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func months: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'], shortMonths: ['Jan', 'Feb', 'Mrz', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'] }); - $translateProvider.translations('de', { PHRASE_EXPORT_DESC: 'Ein detaillierter JSON-Export Ihrer Konfiguration für die Verwendung in anderen Websites und Tools', 'A-Rated': 'A-Klasse', @@ -24,7 +22,7 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func added: 'Hinzugefügt', Advanced: 'Verbessert', 'Advanced Discovery Scanner': 'Fortgeschrittener Aufklärungsscanner', - agility: 'Beweglichkeit', + agility: 'Manövrierbarkeit', ammo: 'Munition', PHRASE_CONFIRMATION: 'Sind Sie sicher?', armour: 'Panzerung', @@ -44,7 +42,7 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func buy: 'Kaufen', cancel: 'Abbrechen', c: 'Kanone', - capital: 'kapital', + capital: 'Kapital', cargo: 'Fracht', 'Cargo Hatch': 'Frachtluke', cr: 'Frachtgestell', @@ -61,16 +59,15 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func cost: 'Preis', costs: 'Kosten', cm: 'Gegenmaßnahme', - CR: 'CR', create: 'Erstellen', 'create new': 'Neu Erstellen', Cytoscrambler: 'Zytostreuer', damage: 'Schaden', delete: 'Löschen', 'delete all': 'Alles Löschen', - dep: 'ausg', + dep: 'Ausg', deployed: 'Ausgefahren', - 'detailed export': 'Detailiertes Exportieren', + 'detailed export': 'Detailierter Export', 'Detailed Surface Scanner': 'Detailoberflächenscanner', disabled: 'Deaktiviert', discount: 'Rabatt', @@ -84,7 +81,8 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func Enforcer: 'Vollstrecker', ENG: 'ANT', 'enter name': 'Namen eingeben', - export: 'exportieren', + export: 'Export', + fixed: 'Fixiert', forum: 'Forum', fc: 'Splitterkanone', fd: 'Frameshiftantrieb', @@ -108,11 +106,11 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func import: 'Importieren', 'import all': 'Alles Importieren', insurance: 'Versicherung', - 'Intermediate Discover Scanner': 'Mittlerer Aufklärungsscanner', - 'internal compartments': 'Innenbereichkabine', + 'Intermediate Discovery Scanner': 'Mittlerer Aufklärungsscanner', + 'internal compartments': 'Innenbereichskabine', 'jump range': 'Sprungreichweite', jumps: 'Sprünge', - kw: 'Tötungsbefehlscanner', + kw: 'Tötungsbefehl-Scanner', L: 'G', laden: 'Beladen', language: 'Sprache', @@ -120,12 +118,9 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func ls: 'Lebenserhaltung', 'Lightweight Alloy': 'Leichte Legierung', 'lock factor': 'Massensperrefaktor', - LS: 'LS', - LY: 'LJ', - M: 'M', - 'm/s': 'M/Sec.', + LS: 'Ls', + LY: 'Lj', mass: 'Masse', - max: 'max', 'max mass': 'maximale Masse', medium: 'Mittel', 'Military Grade Composite': 'Militär-Komposit', @@ -140,10 +135,9 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func PHRASE_NO_BUILDS: 'Keine Konfigurationen zum Vergleich ausgewählt!', PHRASE_NO_RETROCH: 'Keine Umrüständerungen', none: 'Nichts', - 'none created': 'Nichts erstellt', + 'none created': 'Leer', off: 'Aus', on: 'An', - optimal: 'optimal', 'optimal mass': 'optimale Masse', 'optimize mass': 'Masse optimieren', overwrite: 'Überschreiben', @@ -164,7 +158,7 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func proceed: 'Fortfahren', pc: 'Krallensteuerung: Erzsucher', pl: 'Impulslaser', - PWR: 'En.', + PWR: 'En', rg: 'Schienenkanone', range: 'Reichweite', rate: 'Rate', @@ -179,17 +173,17 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func reset: 'Zurücksetzen', ret: 'Eing', retracted: 'Eingefahren', - 'retrofit costs': 'Nachrüstkosten', + 'retrofit costs': 'Änderungskosten', 'retrofit from': 'Nachrüsten von', ROF: 'Kad', S: 'K', save: 'Speichern', sc: 'Scanner', - PHRASE_SELECT_BUILDS: 'Wähle Konfigurationen zum Vergleichen', + PHRASE_SELECT_BUILDS: 'Ausstattung zum Vergleich auswählen', sell: 'Verkaufen', s: 'Sensoren', - settings: 'Konfigurationen', - sb: 'Schildverstärker', + settings: 'Einstellungen', + sb: 'Schild-Booster', scb: 'Schildzellenbank', sg: 'Schildgenerator', shields: 'Schilde', @@ -203,8 +197,7 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func standard: 'Standard', 'Standard Docking Computer': 'Standard-Landecomputer', Stock: 'Standard', - SYS: 'SYS', - T: 'T', + T: 't', T_LOAD: 'T-Lad', 'The Retributor': 'Retributor', t: 'Schubdüsen', @@ -217,14 +210,10 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func U: 'W', unladen: 'Unbeladen', PHRASE_UPDATE_RDY: 'Update verfügbar! Klicken zum Aktualisieren', - URL: 'URL', utility: 'Werkzeug', 'utility mounts': 'Werkzeug-Steckplätze', - version: 'Version', WEP: 'WAF', yes: 'Ja', - PHRASE_BACKUP_DESC: 'Sicherung aller Coriolis Daten zu speichern oder auf einen anderen Browser / Gerät' - }) - .registerAvailableLanguageKeys(['de'], { 'de_DE': 'de' }); - + PHRASE_BACKUP_DESC: 'Export aller Coriolis-Daten, um sie zu sichern oder oder um sie zu einem anderen Browser/Gerät zu übertragen.' + }); }]); diff --git a/app/js/i18n/en.js b/app/js/i18n/en.js index a8d03c7c..5c5777b7 100644 --- a/app/js/i18n/en.js +++ b/app/js/i18n/en.js @@ -51,7 +51,5 @@ angular.module('app').config(['$translateProvider', function($translateProvider) PHRASE_CONFIRMATION: 'Are You Sure?', PHRASE_UPDATE_RDY: 'Update Available! Click to Refresh', PHRASE_BACKUP_DESC: 'Backup of all Coriolis data to save or transfer to another browser/device' - }) - .registerAvailableLanguageKeys(['en'], { 'en_US': 'en', 'en_UK': 'en', 'en_GB': 'en', 'en_CA': 'en' }); - + }); }]); diff --git a/app/js/i18n/es.js b/app/js/i18n/es.js index 214b38d8..3f789e8b 100644 --- a/app/js/i18n/es.js +++ b/app/js/i18n/es.js @@ -259,7 +259,5 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func VULTURE: 'Vulture', WEP: 'WAF', YES: 'Ja' - }) - .registerAvailableLanguageKeys(['es'], { 'es_ES': 'es' }); - + }); }]); diff --git a/app/js/i18n/fr.js b/app/js/i18n/fr.js index 8149bf88..680624ee 100644 --- a/app/js/i18n/fr.js +++ b/app/js/i18n/fr.js @@ -1,5 +1,4 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', function($translateProvider, localeFormatProvider) { - // Declare number format settings localeFormatProvider.addFormat('fr', { decimal: ',', @@ -15,250 +14,187 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func months: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'], shortMonths: ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'] }); - $translateProvider.translations('fr', { - PHRASE_EXPORT_DESC: 'Ein detaillierter JSON-Export Ihrer Konfiguration für die Verwendung in anderen Websites und Tools', - A_RATED: 'A-Klasse', - ABOUT: 'Über', - ACTION: 'Aktion', - ADDED: 'Hinzugefügt', - ADDER: 'Adder', - ADVANCED: 'Fortgeschritten', - 'Advanced Discovery Scanner': 'Fortgeschrittener Aufklärungsscanner', - 'Advanced Plasma Laser': 'Fortgeschrittener Plasma-Laser', - AGILITY: 'Beweglichkeit', - ALPHA: 'Alpha', - AMMO: 'Munition', - ANACONDA: 'Anaconda', - PHRASE_CONFIRMATION: 'Sind Sie sicher?', - ARMOUR: 'Panzerung', - ASP_EXPLORER: 'Asp Explorer', - am: 'Automatische Feldwartungseinheit', - AVAILABLE: 'Verfügbar', - BACKUP: 'Sicherungsdatei', - 'Basic Discovery Scanner': 'Einfacher Aufklärungsscanner', - bl: 'Strahlenlaser', - BELUGA_LINER: 'Beluga Liner', - BETA: 'beta', - BINS: 'Behälter', - BOOST: 'Boost', - BUILD: 'Konfiguration', - BUILD_NAME: 'Konfigurationsname', - BUILDS: 'Konfigurationen', - BULKHEADS: 'Rumpfhüllenverstärkung', - ul: 'Salvenlaser', - BUY: 'Kaufen', - CANCEL: 'Abbrechen', - c: 'Kanone', - CAPITAL: 'kapital', - CARGO: 'Fracht', - CARGO_HATCH: 'Frachtluke', - cr: 'Frachtgestell', - cs: 'Frachtscanner', - CELLS: 'Zellen', - CHAFF_LAUNCHER: 'Düppel-Werfer', - CLOSE: 'Schließen', - COBRA_MK_III: 'Cobra MK III', - COBRA_MK_IV: 'Cobra MK IV', - cc: 'Krallensteuerung: Sammler', - COMPARE: 'Vergleichen', - COMPARE_ALL: 'Alles Vergleichen', - COMPARISON: 'Vergleich', - COMPARISONS: 'Vergleiche', - COMPONENT: 'Komponente', - COST: 'Kostet', - COSTS: 'Kosten', - cm: 'Gegenmaßnahme', - CR: 'CR', - CREATE: 'Erstellen', - CREATE_NEW: 'Neu Erstellen', - CREDITS: 'Credits', - Cytoscrambler: 'Zytostreuer', - DAMAGE: 'Schaden', - DELETE: 'Löschen', - DELETE_ALL: 'Alles Löschen', - DEP: 'Ausg', - DEPLOYED: 'Ausgefahren', - DETAILED_EXPORT: 'Detailiertes Exportieren', - 'Detailed Surface Scanner': 'Detailoberflächenscanner', - DIAMONDBACK_EXPLORER: 'Diamondback-Erkunder', - DIAMONDBACK_SCOUT: 'Diamondback-Aufklärer', - DISABLED: 'Deaktiviert', - DISCOUNT: 'Rabatt', - Distruptor: 'Disruptor', - dc: 'Standard-Landecomputer', - DOLPHIN: 'Dolphin', - DONE: 'Fertig', - DPS: 'DPS', - EAGLE: 'Eagle', - EDIT_DATA: 'Bearbeiten', - EFFICIENCY: 'Effizienz', - 'Electronic Countermeasure': 'Elektronische Gegenmaßnahme', - EMPTY: 'leer', - ENFORCER: 'Vollstrecker', - ENG: 'FAH', - PHRASE_ENTER_BUILD_NAME: '', - EPS: 'en/s', - EXPORT: 'Exportieren', - FEDERAL_CORVETTE: 'Föderale Korvette', - FEDERAL_DROPSHIP: 'Föderales Abwurfschiff', - FEDERAL_DROPSHIP_MK_II: 'Föderales Abwurfschiff Mk II', - FEDERAL_GUNSHIP: 'Föderales Kanonenschiff', - FER_DE_LANCE: 'Fer-de-Lance', - FIXED: '', - FORUM: 'Forum', - fc: 'Splitterkanone', - fd: 'Frameshift-Antrieb', - ws: 'Sogwolkenscanner', - FSD: 'FSA', - fi: 'FSA-Unterbrecher', - FUEL: 'Treibstoff', - fs: 'Treibstoffsammler', - ft: 'Treibstofftank', - fx: 'Krallensteuerung Treibstoffstransfer', - FULL_TANK: 'Tank voll', - GIMBALLED: 'Kardianisch', - H: 'H', - HARDPOINTS: 'Waffenaufhängungen', - hb: 'Krallen-Steuereinheit (Ladelukenöffner)', - HAULER: 'Hauler', - 'Heat Sink Launcher': 'Kühlkörperwerfer', - HUGE: 'Riesig', - HULL: 'Hülle', - hr: 'Rumpfhüllenverstärkung (Paket)', - IMPERIAL_CLIPPER: 'Imperialer Clipper', - IMPERIAL_COURIER: 'Imperialer Kurier', - IMPERIAL_CUTTER: 'Imperialer Cutter', - IMPERIAL_EAGLE: 'Imperialer Eagle', - IMPERIAL_HAMMER: 'Imperialer Hammer', - IMPORT: 'Importieren', - IMPORT_ALL: 'Alles Importieren', - INSURANCE: 'Versicherung', - 'Intermediate Discover Scanner': 'Mittlerer Aufklärungsscanner', - INTERNAL_COMPARTMENTS: 'Innenbereichkabine', - JUMP_RANGE: 'Sprungreichweite', - JUMPS: 'Sprünge', - kw: 'Tötungsbefehlscanner', - KRAIT: 'Krait', - L: 'L', - LADEN: 'Beladen', - LANGUAGE: 'Sprache', - LARGE: 'Groß', - ls: 'Lebenserhaltung', - 'Lightweight Alloy': 'Leichte Legierung', - LOCK_FACTOR: 'Massensperrefaktor', - LS: 'LS', - LY: 'LJ', - M: 'M', - 'm/s': 'M/Sec.', - MASS: 'Masse', - MAX: 'max', - MAX_MASS: 'maximale Masse', - MEDIUM: 'Mittel', - 'Military Grade Composite': 'Militär-Komposit', - nl: 'Minenwerfer', - 'Mining Lance': 'Lanzenabbaulaser', - ml: 'Abbaulaser', - 'Mirrored Surface Composite': 'Gespiegelte-Oberfläche-Komposit', - mr: 'Raketenbatterie', - mc: 'Mehrfachgeschütz', - NET_COST: 'Nettokosten', - NO: 'Nein', - NO_RETROFITTING_CHANGES: 'Keine Umrüständerungen', - NONE: 'Nichts', - NONE_CREATED: 'Nichts erstellt', - OFF: 'Aus', - ON: 'An', - OPTIMAL: 'optimal', - OPTIMAL_MASS: 'optimale Masse', - OPTIMIZE_MASS: 'Masse optimieren', - ORCA: 'Orca', - OVERWRITE: 'Überschreiben', - Pacifier: 'Friedensstifter', - 'Pack-Hound': 'Schwarmwerfer', - PANTHER_CLIPPER: 'Panter Clipper', - PHRASE_IMPORT: 'JSON hier einfügen oder hier importieren', - PEN: 'Durchdr', - PENETRATION: 'Durchdringung', - PERMALINK: 'Permalink', - pa: 'Plasmabeschleuniger', - POINT_DEFENCE: 'Punktverteidigung', - POWER: 'Energie', - pd: 'Energieverteiler', - pp: 'Kraftwerk', - PRI: 'Prio', - PRIORITY: 'Priorität', - psg: 'Prismaschildgenerator', - PROCEED: 'Fortfahren', - pc: 'Krallensteuerung: Erzsucher', - pl: 'Impulslaser', - PWR: 'En', - PYTHON: 'Python', - rg: 'Schienenkanone', - RANGE: 'Reichweite', - RATE: 'Rate', - 'Reactive Surface Composite': 'Reaktive-Oberfläche-Komposit', - RECHARGE: 'Aufladen', + PHRASE_EXPORT_DESC: 'Un export détaillé en JSON de votre configuration pour l\'utilisation dans d\'autres sites et outils', + 'A-Rated': 'Classe-A ', + about: 'à propos', + added: 'ajouté', + Advanced: 'Avancé', + 'Advanced Discovery Scanner': 'Scanner de découverte avancé', + agility: 'agilité', + ammo: 'munition', + PHRASE_CONFIRMATION: 'Êtes-vous sûr?', + armour: 'Armure', + am: 'Unité de réparation automatique', + available: 'Disponibilité', + backup: 'sauvegarde', + 'Basic Discovery Scanner': 'Scanner de découverte de base', + bl: 'Laser rayon', + bins: 'bacs', + build: 'Configuration', + 'build name': 'Nom de la configuration', + builds: 'Configurations', + bh: 'Coque', + ul: 'Laser salves', + buy: 'Acheter', + cancel: 'Annuler', + c: 'Canon', + cargo: 'Soute', + 'Cargo Hatch': 'hublot de chargement', + cr: 'Compartiment de soute', + cs: 'Scanner de soute', + cells: 'Cellule', + 'Chaff Launcher': 'Lanceur de paillettes', + close: 'fermer', + cc: 'Contrôleur de prospecteur', + compare: 'comparer', + 'compare all': 'tout comparer', + comparison: 'comparaison', + comparisons: 'comparaisons', + component: 'composant', + cost: 'coût', + costs: 'coûts', + cm: 'Contre-mesure', + create: 'Créer', + 'create new': 'Créer nouveau', + credits: 'crédits', + damage: 'Dégâts', + delete: 'supprimer', + 'delete all': 'tout supprimer', + dep: 'depl', + deployed: 'déployé', + 'detailed export': 'export détaillé', + 'Detailed Surface Scanner': 'Scanner de surface détaillé', + disabled: 'désactivé', + discount: 'ristourne', + Distruptor: 'Disrupteur', + dc: 'Ordinateur d\'appontage', + done: 'Fait', + 'edit data': 'Editer donnée', + efficiency: 'efficience', + 'Electronic Countermeasure': 'Contre mesure électronique', + empty: 'Vide', + 'enter name': 'Entrer nom', + fixed: 'fixé', + fc: 'Canon à fragmentation', + fd: 'Réacteur FSD', + ws: 'Détecteur de sillage FSD', + fi: 'Intercepteur de réacteur FSD', + fuel: 'carburant', + fs: 'Récupérateur de carburant', + ft: 'Réservoir de carburant', + fx: 'Drone de ravitaillement', + 'full tank': 'Réservoir plein', + Gimballed: 'Point', + hardpoints: 'Points d\'emport', + hb: 'Contrôle de patelle perce-soute', + 'Heat Sink Launcher': 'Ejecteur de dissipateur thermique', + huge: 'Très grand', + hull: 'Coque', + hr: 'Renfort de soute', + 'Imperial Hammer': 'Marteau impérial', + import: 'Importer', + 'import all': 'Importer tout', + insurance: 'Assurance', + 'Intermediate Discovery Scanner': 'Scanner de découverte de portée intermédiaire', + 'internal compartments': 'compartiments internes', + 'jump range': 'Distance de saut', + jumps: 'Sauts', + kw: 'Détecteur d\'avis de recherche', + L: 'Langage', + laden: 'chargé', + language: 'Langage', + large: 'grand', + ls: 'Support vital', + 'Lightweight Alloy': 'alliage léger', + 'lock factor': 'facteur inhibition de masse', + LS: 'SL', + LY: 'AL', + mass: 'Masse', + 'max mass': 'masse max', + 'Military Grade Composite': 'Composite militaire', + nl: 'Lance-mines', + 'Mining Lance': 'Lance de minage', + ml: 'Laser minier', + 'Mirrored Surface Composite': 'Composite à surface mirroir', + mr: 'Lance missiles', + mc: 'Canon multiple', + 'net cost': 'coûts nets', + no: 'non', + PHRASE_NO_BUILDS: 'Défaut de configuration pour comparaison', + PHRASE_NO_RETROCH: 'configuration non modifiée', + none: 'aucun', + 'none created': 'Rien de créé', + off: 'éteint', + on: 'allumé', + 'optimal mass': 'masse optimale', + 'optimize mass': 'optimiser masse', + overwrite: 'écraser', + Pacifier: 'Pacificateur', + PHRASE_IMPORT: 'Coller JSON ou importer ici', + pen: 'pén.', + penetration: 'pénétration', + permalink: 'lien durable', + pa: 'accélérateur plasma', + 'Point Defence': 'Défense ponctuelle', + power: 'énergie', + pd: 'distributeur d\'énérgie', + pp: 'centrale d\'énergie', + priority: 'priorité', + psg: 'générateur de bouclier prisme', + proceed: 'continuer', + pc: 'Drône de minage', + pl: 'Laser à impulsion', + PWR: 'Puissance', + rg: 'Canon électromagnétique', + range: 'portée', + rate: 'cadence', + 'Reactive Surface Composite': 'Composite à surface réactive', + recharge: 'recharger', rf: 'Raffinerie', - REFUEL_TIME: 'Auftankzeit', - 'Reinforced Alloy': 'Verstärkte Legierungen', - RELOAD: 'Aktualisieren', - RENAME: 'Umbenennen', - REPAIR: 'Reparieren', - RESET: 'Zurücksetzen', - RET: 'eing', - RETRACTED: 'Eingefahren', - RETROFIT_COSTS: 'Nachrüstkosten', - RETROFIT_FROM: 'Nachrüsten von', - ROF: 'Kad', - S: 'S', - SAVE: 'Speichern', - sc: 'Scanner', - PHRASE_SELECT_BUILDS: 'Wähle Konfigurationen zum Vergleichen', - SELL: 'Verkaufen', - s: 'Sensoren', - SETTINGS: 'Konfiguration', - sb: 'Schildverstärker', - scb: 'Schildzellenbank', - sg: 'Schildgenerator', - SHIELDS: 'Schilde', - SHIP: 'Schiff', - SHIPS: 'Schiffe', - SHORTENED: 'Gekürzt', - SIDEWINDER: 'Sidewinder', - SIZE: 'Größe', - SKIP: 'Überspringen', - SMALL: 'S', - SPEED: 'Geschwindigkeit', - STANDARD: 'Standard', - STANDARD_DOCKING_COMPUTER: 'Landecomputer', - STOCK: 'Standard', - SYS: 'SYS', - T: 'T', - T_LOAD: 'T-Lad', - THE_HUNTER: 'The Hunter', - 'The Retributor': 'Retributor', - t: 'Schubdüsen', - TIME: 'Dauer', - tp: 'Torpedoaufhängung', - TOTAL: 'Gesamt', - TOTAL_RANGE: 'Maximale Reichweite', - TURRET: 'Geschützturm', - TYPE: 'Typ', - TYPE_6_TRANSPORTER: 'Typ-6 Transporter', - TYPE_7_TRANSPORTER: 'Typ-7 Transporter', - TYPE_9_HEAVY: 'Typ-9 Transporter (schwer)', - U: 'U', - UNLADEN: 'Unbeladen', - UPDATE_NOTIFICATION: 'Update verfügbar! Klicken zum Aktualisieren', - URL: 'URL', - UTILITY: 'Werkzeug', - UTILITY_MOUNTS: 'Werkzeug-Steckplatz', - VERSION: 'Version', - VIPER: 'Viper', - VULTURE: 'Vulture', - WEP: 'WAF', - YES: 'Ja' - }) - .registerAvailableLanguageKeys(['fr'], { 'fr_FR': 'fr', 'fr_CA': 'fr' }); + 'refuel time': 'Temps de remplissage', + 'Reinforced Alloy': 'alliage renforcé', + reload: 'recharger', + rename: 'renommer', + repair: 'réparer', + reset: 'Réinitialisation', + ret: 'esc', + retracted: 'escamoté', + 'retrofit costs': 'Valeur de rachat', + 'retrofit from': 'Racheter de', + ROF: 'cadence', + save: 'sauvegarder', + sc: 'scanner', + PHRASE_SELECT_BUILDS: 'Sélectionner configurations à comparer', + sell: 'vendre', + s: 'détecteurs', + settings: 'paramètres', + sb: 'Survolteur de bouclier', + scb: 'Réserve de cellules d\'énergie', + sg: 'Générateur de bouclier', + shields: 'boucliers', + ship: 'vaisseau', + ships: 'vaisseaux', + shortened: 'raccourci', + size: 'taille', + skip: 'Suivant', + small: 'petit', + speed: 'vitesse', + 'Standard Docking Computer': 'ordinateur amarrage standard', + Stock: 'de base', + T_LOAD: 'degrés', + 'The Retributor': 'Le Rétributeur', + t: 'propulseurs', + time: 'temps', + tp: 'Tube lance-torpille', + 'total range': 'Distance maximale', + turret: 'tourelle', + unladen: 'Non chargé', + PHRASE_UPDATE_RDY: 'Mise à jour disponible ! Cliquez pour rafraichir', + utility: 'utilitaire', + 'utility mounts': 'Support utilitaire', + WEP: 'ARM', + yes: 'oui', + PHRASE_BACKUP_DESC: 'Exportation détaillée des données Coriolis pour l\'utilisation dans d\'autres sites et outils' + }); }]); diff --git a/app/js/i18n/languages.js b/app/js/i18n/languages.js new file mode 100644 index 00000000..d6a35b37 --- /dev/null +++ b/app/js/i18n/languages.js @@ -0,0 +1,21 @@ +angular.module('app').config(['$translateProvider', function($translateProvider) { + $translateProvider + .useSanitizeValueStrategy('escapeParameters') + .useStorage('Persist') + .fallbackLanguage('en') // Use English as default/fallback language + .registerAvailableLanguageKeys(['en', 'de', 'fr', 'ru'], { // TODO: add 'es' to the array when ready + 'en*': 'en', + 'de*': 'de', + //'es*': 'es', + 'fr*': 'fr', + 'ru*': 'ru' + }) + .determinePreferredLanguage(); +}]) +.value('Languages', { + en: 'English', + de: 'Deutsh', + //es: 'Español', + fr: 'Français', + ru: 'ру́сский язы́к' +}); diff --git a/app/js/i18n/ru.js b/app/js/i18n/ru.js index f68c4e46..1f3670ed 100644 --- a/app/js/i18n/ru.js +++ b/app/js/i18n/ru.js @@ -17,241 +17,217 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func }); $translateProvider.translations('ru', { - PHRASE_EXPORT_DESC: '', - A_RATED: 'А-Класса', - ABOUT: 'О сайте', - ACTION: 'Действие', - ADDED: 'Добавлено', - ADVANCED: 'Продвинутый', - 'Advanced Discovery Scanner': 'Продвинутый исследовательский сканер', - 'Advanced Plasma Laser': 'Продвинутый плазменный лазер', - AGILITY: 'Маневренность', - ALPHA: 'Альфа', - AMMO: 'Боекомплект', - ANACONDA: 'Анаконда', + PHRASE_EXPORT_DESC: 'Подробный экспорта JSON вашего телосложения для использования в других местах и инструментов', + 'A-Rated': 'А-Класса', + about: 'О сайте', + action: 'Действие', + added: 'Добавлено', + Advanced: 'Продвинутый', + 'Advanced Discovery Scanner': 'Продвинутый астросканер', + agility: 'Маневренность', + alpha: 'Альфа', + ammo: 'Боекомплект', PHRASE_CONFIRMATION: 'Вы уверены?', - ARMOUR: 'Броня', - ASP_EXPLORER: 'Асп Эксплорер', - am: 'Устройство авторемонта', - AVAILABLE: 'доступно', - BACKUP: 'Поддержка / запас / бэкап', - 'Basic Discovery Scanner': 'Базовый исследовательский сканер', + armour: 'Броня', + am: 'Ремонтный модуль', + available: 'доступно', + backup: 'бэкап', + 'Basic Discovery Scanner': 'Стандартный исследовательский сканер', bl: 'Лучевой лазер', - BELUGA_LINER: 'Лайнер Белуга', - BETA: 'Бета', - BINS: '', - BOOST: 'форсаж', - BUILD: 'cборка', - BUILD_NAME: 'название сборки', - BUILDS: 'cборки', - BULKHEADS: 'Переборки', - ul: 'пульс-лазер', - BUY: 'купить', - CANCEL: 'отменить', - c: 'Пушка', - CAPITAL: 'Крупный', - CARGO: 'Груз', - CARGO_HATCH: 'Грузовой трюм', - cr: 'Грузовой модуль', + beta: 'Бета', + bins: 'контейнеры', + boost: 'форсаж', + build: 'cборка', + 'build name': 'название сборки', + builds: 'cборки', + bh: 'Переборки', + ul: 'Мультиимпульсный лазер', + buy: 'купить', + cancel: 'отменить', + c: 'Крупнокалиберное орудие', + capital: 'Крупный', + cargo: 'Груз', + 'Cargo Hatch': 'Грузовой люк', + cr: 'Грузовой отсек', cs: 'Сканер груза', - CELLS: 'Ячейки', + cells: 'Ячейки', 'Chaff Launcher': 'Постановщик помех', - CLOSE: 'закрыть', - COBRA_MK_III: 'Кобра МК-III', - COBRA_MK_IV: 'Кобра МК-IV', + close: 'закрыть', cc: 'Контроллер "дрон-сборщик"', - COMPARE: 'сравнить ', - COMPARE_ALL: 'сравнить все', - COMPARISON: 'сравнение', - COMPARISONS: 'сравнения', - COMPONENT: 'Компонент', - COST: 'Стоимость/Цена', - COSTS: 'Расходы', + compare: 'сравнить ', + 'compare all': 'сравнить все', + comparison: 'сравнение', + comparisons: 'сравнения', + component: 'Компонент', + cost: 'Стоимость', + costs: 'Расходы', cm: 'Контрмеры', CR: 'кр.', - CREATE: 'создать', - CREATE_NEW: 'Создать снова', - CREDITS: 'Кредиты', - Cytoscrambler: 'Weapon PP - In game name', - DAMAGE: 'Урон', - DELETE: 'Удалить', - DELETE_ALL: 'Удалить все', - DEP: 'Вып.', - DEPLOYED: 'Готово', - DETAILED_EXPORT: 'Подробный экспорт', + create: 'создать', + 'create new': 'Создать новый', + credits: 'Кредиты', + Cytoscrambler: 'сайтоскрамблер', + damage: 'Урон', + delete: 'Удалить', + 'delete all': 'Удалить все', + dep: 'Вып', + deployed: 'Готово', + 'detailed export': 'Подробный экспорт', 'Detailed Surface Scanner': 'Подробный сканер поверхности', - DIAMONDBACK_EXPLORER: 'Даймондбэк Эксплорер', - DIAMONDBACK_SCOUT: 'Даймондбэк Скаут', - DISABLED: 'Отключено', - DISCOUNT: 'Скидка', + disabled: 'Отключено', + discount: 'Скидка', Distruptor: 'Дисраптор', dc: 'Стыковочный компьютер', - DOLPHIN: 'Дельфин', - DONE: 'готово', - DPS: 'Урон в секунду', - EAGLE: 'Орел', - EDIT_DATA: 'Редактирование', - EFFICIENCY: 'Эффективность', + done: 'готово', + DPS: 'ПВС', + 'edit data': 'Редактирование', + efficiency: 'Эффективность', 'Electronic Countermeasure': 'Электронное противодействие', - EMPTY: 'пусто', - ENFORCER: 'Weapon PP - In game name', + empty: 'пусто', + Enforcer: 'Энфорсер', ENG: 'ДВГ', - PHRASE_ENTER_NAME: '', + 'enter name': 'Введите имя', EPS: 'э/с', - EXPORT: 'Экспорт', - FEDERAL_CORVETTE: 'Федеральный Корвет', - FEDERAL_DROPSHIP: 'Федеральный Десантный Корабль', - FEDERAL_DROPSHIP_MK_II: 'Федеральный Десантный Корабль мод.II', - FEDERAL_GUNSHIP: 'Федеральный Боевой Корабль', - FER_DE_LANCE: 'Фер-де-Ланс', - FIXED: 'Фиксированое', - FORUM: 'Форум', + export: 'Экспорт', + fixed: 'Фиксированое', + forum: 'Форум', fc: 'Осколочное Орудие', - fd: 'ФСД', - ws: 'Сканер следа', - FSD: 'ФСД', - fi: 'ФСД Перехватчик', - FUEL: 'Топливо', + fd: 'Двигатель FSD', + ws: 'FSD Сканнер', + + fi: 'Перехватчик FSD', + fuel: 'Топливо', fs: 'Топливозаборник', ft: 'Топливный бак', - fx: 'Устройство передачи топлива', - FULL_TANK: 'Полный бак', - GIMBALLED: 'Доводимое', - HARDPOINTS: 'точки установки вооружения', + fx: 'Контроллер Дрона-заправщика', + 'full tank': 'Полный бак', + Gimballed: 'Доводимое', + H: 'O', + hardpoints: 'Орудийные порты', hb: 'Контроллер "дрон-взломщик"', - HAULER: 'Хаулер', - 'Heat Sink Launcher': 'Охладитель', - HULL: 'Корпус', + 'Heat Sink Launcher': 'Теплоотводная ПУ', + huge: 'огромный', + hull: 'Корпус', hr: 'Набор усиления корпуса', - IMPERIAL_CLIPPER: 'Имперский Клипер', - IMPERIAL_COURIER: 'Имперский Курьер', - IMPERIAL_CUTTER: 'Имперский Куттер', - IMPERIAL_EAGLE: 'Имперский Орёл', - IMPERIAL_HAMMER: 'Имперский Молот', - IMPORT: 'импортировать ', - IMPORT_ALL: 'импортировать все', - INSURANCE: 'Страховка', - 'Intermediate Discover Scanner': 'Средний Исследовательский Сканер', - INTERNAL_COMPARTMENTS: 'внутренние отсеки', - JUMP_RANGE: 'Дальность прыжка', - JUMPS: 'Прыжки', - kw: 'Сканер преступников', - KRAIT: 'Крэйт', - LADEN: 'Груженый', - LANGUAGE: 'Язык', + 'Imperial Hammer': 'Имперский Молот', + import: 'импортировать ', + 'import all': 'импортировать все', + insurance: 'Страховка', + 'Intermediate Discovery Scanner': 'Средний исследовательский сканер', + 'internal compartments': 'внутренние отсеки', + 'jump range': 'Дальность прыжка', + jumps: 'Прыжков', + kw: 'Полицейский сканер', + L: 'б', + laden: 'Груженый', + language: 'Язык', + large: 'большой', ls: 'Система жизнеобеспечения', 'Lightweight Alloy': 'Легкий сплав', - LOCK_FACTOR: 'Блокирующий Фактор (Фактор массы)', + 'lock factor': 'Масс. блок', LS: 'Св.сек', LY: 'Св.лет', + M: 'С', 'm/s': 'м/с', - MASS: 'Масса', - MAX: 'Макс', - MAX_MASS: 'Максимальная масса', - MEDIUM: 'Средний', - 'Military Grade Composite': 'Композит боевого класса', - nl: 'Миномет', + mass: 'Масса', + max: 'Макс', + 'max mass': 'Максимальная масса', + medium: 'Средний', + 'Military Grade Composite': 'Композит военного класса', + nl: 'Минный аппарат', 'Mining Lance': 'Бурильная сулица', - ml: 'Шахтерский лазер', + ml: 'Горный лазер', 'Mirrored Surface Composite': 'Композит с зеркальной поверхностью', mr: 'Ракетная установка', - mc: 'Многоствольная пушка', - NET_COST: 'разница в цене', - NO: 'Нет', - PHRASE_NO_BUILDS: '', - NO_RETROFITTING_CHANGES: 'нет ранних версий сборки\конфигурации', - NONE: 'ни один', - NONE_CREATED: 'не создано', - OFF: 'выкл.', - ON: 'вкл.', - OPTIMAL: 'Оптимальный', - OPTIMAL_MASS: 'Оптимальная масса', - OPTIMIZE_MASS: 'Оптимизировать массу', - ORCA: 'Орка', - OVERWRITE: 'перезаписать', + mc: 'Скорострельное орудие', + 'net cost': 'разница в цене', + no: 'Нет', + PHRASE_NO_BUILDS: 'Нечего сравнивать', + PHRASE_NO_RETROCH: 'нет ранних версий сборки\конфигурации', + none: 'ни один', + 'none created': 'не создано', + off: 'выкл', + on: 'вкл', + optimal: 'Оптимальный', + 'optimal mass': 'Оптимальная масса', + 'optimize mass': 'Оптимизировать массу', + overwrite: 'перезаписать', Pacifier: 'Миротворец', 'Pack-Hound': 'Ракеты "Собачья стая" or original name(eng)', - PANTHER_CLIPPER: 'Клипер Пантера', PHRASE_IMPORT: 'Для импорта вставьте код в эту форму', - PEN: 'Класс бронепробития. short - "прбт."', - PENETRATION: 'Пробитие', - PERMALINK: 'Постоянная ссылка', + pen: 'ПБ', + penetration: 'Пробитие', + permalink: 'Постоянная ссылка', pa: 'Ускоритель плазмы', 'Point Defence': 'Противоракетная защита', - POWER: 'Мощность/сила/энергия', + power: 'Мощность', pd: 'Распределитель энергии', - pp: 'Силовая установка / реактор', - PRI: 'Осн', - PRIORITY: 'Приоритет', + pp: 'Реактор', + pri: 'Осн', + priority: 'Приоритет', psg: 'Генератор призматического щита', - PROCEED: 'продолжить', + proceed: 'продолжить', pc: 'Контроллер "Дрон-исследователь"', pl: 'Импульсный лазер', - PWR: 'Е', - PYTHON: 'Питон', + PWR: 'Эн', rg: 'Рельсовая пушка', - RANGE: 'Дальность', - RATE: 'скорость', + range: 'Дальность', + rate: 'скорость', 'Reactive Surface Composite': 'Композитно-реактивная поверхность', - RECHARGE: 'Перезарядка', + recharge: 'Перезарядка', rf: 'Переработка', - REFUEL_TIME: 'Время дозаправки', + 'refuel time': 'Время дозаправки', 'Reinforced Alloy': 'Усиленный сплав', - RELOAD: 'Перезарядить', - RENAME: 'Переименовать', - REPAIR: 'Починка', - RESET: 'Сброс', - RET: 'сокр', - RETRACTED: 'Убрано', - RETROFIT_COSTS: 'цена модификации', - RETROFIT_FROM: 'модификация от', - ROF: 'скорость стрельбы', - SAVE: 'Сохранить', + reload: 'Перезарядить', + rename: 'Переименовать', + repair: 'Починка', + reset: 'Сброс', + ret: 'Убр.', + retracted: 'Убрано', + 'retrofit costs': 'цена модификации', + 'retrofit from': 'модификация от', + ROF: 'В/сек', + S: 'М', + save: 'Сохранить', sc: 'Сканер', PHRASE_SELECT_BUILDS: 'Выберите конфигурацию для сравнения', - SELL: 'Продать', + sell: 'Продать', s: 'Сенсоры', - SETTINGS: 'Настройки', + settings: 'Настройки', sb: 'Усилитель щита', scb: 'Батареи перезарядки щита', sg: 'Генератор щита', - SHIELDS: 'Щиты', - SHIP: 'Корабль', - SHIPS: 'Корабли', - SHORTENED: 'Укороченный', - SIDEWINDER: 'Сайдвиндер', - SIZE: 'размер', - SKIP: 'пропустить', - SMALL: 'Малый', - SPEED: 'скорость', - STANDARD: 'Стандартный', + shields: 'Щиты', + ship: 'Корабль', + ships: 'Корабли', + shortened: 'Укороченный', + size: 'размер', + skip: 'пропустить', + small: 'Малый', + speed: 'скорость', + standard: 'Стандартный', 'Standard Docking Computer': 'Стандартный стыковочный компьютер', - STOCK: 'Стандартная комплектация', - SYS: 'Сис', + Stock: 'Стандартная комплектация', + SYS: 'СИС', T: 'Т', - T_LOAD: 'Тепловая нагрузка', - THE_HUNTER: 'Охотник', + T_LOAD: 'Тепл.', 'The Retributor': 'Орудие Возмездия', t: 'Ускорители', - TIME: 'Время', - tp: 'Торпедная установка', - TOTAL: 'Всего', - TOTAL_RANGE: 'Полный радиус', - TURRET: 'Туррель', - TYPE: 'Тип', - TYPE_6_TRANSPORTER: 'Перевозчик Тип-6', - TYPE_7_TRANSPORTER: 'Перевозчик Тип-7', - TYPE_9_HEAVY: 'Перевозчик Тип-9 Тяжелый', - UNLADEN: 'Пустой', - UPDATE_NOTIFICATION: 'Доступно обновление. Нажмите для обновления.', + time: 'Время', + tp: 'Торпедный аппарат', + total: 'Всего', + 'total range': 'Общий радиус', + turret: 'Туррель', + type: 'Тип', + U: 'В', + unladen: 'Пустой', + PHRASE_UPDATE_RDY: 'Доступно обновление. Нажмите для обновления.', URL: 'Ссылка', - UTILITY: '', - UTILITY_MOUNTS: 'Вспомогательное оборудование', - VERSION: 'Версия', - VIPER: 'Вайпер', - VULTURE: 'Вультура', - YES: 'Да' - }) - .registerAvailableLanguageKeys(['ru'], { 'ru_RU': 'ru' }); - + utility: 'Вспомогательное', + 'utility mounts': 'Вспомогательное оборудование', + version: 'Версия', + WEP: 'ОРУ', + yes: 'Да', + PHRASE_BACKUP_DESC: 'Сохраните все данные перед переносом в другой браузер или устройство' + }); }]); diff --git a/app/js/service-persist.js b/app/js/service-persist.js index 5c98223c..bcca430c 100755 --- a/app/js/service-persist.js +++ b/app/js/service-persist.js @@ -45,7 +45,7 @@ angular.module('app').service('Persist', ['$window', 'lodash', function($window, }; this.getLangCode = function() { - return this.lsEnabled ? localStorage.getItem(LS_KEY_LANG) : 'en'; + return this.lsEnabled ? localStorage.getItem(LS_KEY_LANG) : null; }; /** @@ -287,7 +287,7 @@ angular.module('app').service('Persist', ['$window', 'lodash', function($window, if (this.lsEnabled) { var ratio = localStorage.getItem('sizeRatio'); if (!isNaN(ratio) && ratio > 0.6) { - return ratio + return ratio; } } return 1; diff --git a/app/less/header.less b/app/less/header.less index c36cbf0a..7a4589a2 100755 --- a/app/less/header.less +++ b/app/less/header.less @@ -65,7 +65,7 @@ header { .menu-item-label { margin-left: 1em; - .largePhone({ + .smallTablet({ display: none; }); } diff --git a/app/less/select.less b/app/less/select.less index 93abae7c..d92bb095 100755 --- a/app/less/select.less +++ b/app/less/select.less @@ -63,6 +63,8 @@ select { padding-left: 5px; border-top: 1px solid @primary-disabled; border-bottom: 1px solid @primary-disabled; + overflow: hidden; + text-overflow: ellipsis; } @optionSpacing: 2em; @@ -114,6 +116,7 @@ select { } .lc { + overflow: hidden; text-overflow: ellipsis; } @@ -130,6 +133,7 @@ select { display: inline-block; text-align: left; min-width: 16em; + max-width: 100%; margin: 0 auto; padding: 0; list-style: none; diff --git a/app/less/slot.less b/app/less/slot.less index 4a4c7fa6..6f64dafa 100755 --- a/app/less/slot.less +++ b/app/less/slot.less @@ -52,7 +52,7 @@ border-right: 1px solid @primary-disabled; box-sizing: border-box; padding-top: 0.2em; - padding-left: 0.1em; + padding-left: 0.05em; } .empty { diff --git a/app/views/_header.html b/app/views/_header.html index 819f8719..cd499eb4 100755 --- a/app/views/_header.html +++ b/app/views/_header.html @@ -76,11 +76,12 @@
| A | -+ | + | A | ||
| Reset | + |