Skip to content

Commit

Permalink
Add: Support Multi-Language (#14)
Browse files Browse the repository at this point in the history
  • Loading branch information
nutti committed Nov 25, 2017
1 parent 31a058d commit 93f3707
Show file tree
Hide file tree
Showing 18 changed files with 149 additions and 26 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ You can install/uninstall/update all add-on's released on GitHub with this appli

|Version|Download URL|
|---|---|
|1.1|[Download](https://github.com/nutti/Blender-Add-on-Manager/releases/tag/v1.1)|
|1.0|[Download](https://github.com/nutti/Blender-Add-on-Manager/releases/tag/v1.0)|
|0.3|[Download](https://github.com/nutti/Blender-Add-on-Manager/releases/tag/v0.3)|
|0.2|[Download](https://github.com/nutti/Blender-Add-on-Manager/releases/tag/v0.2)|
Expand Down
8 changes: 4 additions & 4 deletions src/client/html/partials/addon-info/buttons.html
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
<div class="text-button-wrapper">
<div class="link text-button" data-repo-index="{{i}}" ng-click="onLnBtnClicked($event); $event.stopPropagation();">
Link
{{blamTranslate('Link');}}
</div>
</div>
<div class="text-button-wrapper" ng-if="getAddonStatus(key) === 'NOT_INSTALLED'">
<div class="download text-button" data-repo-index="{{i}}" ng-click="!isOpsLocked && onDlBtnClicked($event); $event.stopPropagation();" ng-class="{locked: isOpsLocked}">
Install
{{blamTranslate('Install');}}
</div>
</div>
<div class="text-button-wrapper" ng-if="getAddonStatus(key) === 'UPDATABLE'">
<div class="update text-button" data-repo-index="{{i}}" ng-click="!isOpsLocked && onUpBtnClicked($event); $event.stopPropagation();" ng-class="{locked: isOpsLocked}">
Update
{{blamTranslate('Update');}}
</div>
</div>
<div class="text-button-wrapper" ng-if="getAddonStatus(key) === 'INSTALLED' || getAddonStatus(key) === 'UPDATABLE'">
<div class="remove text-button" data-repo-index="{{i}}" ng-click="!isOpsLocked && onRmBtnClicked($event); $event.stopPropagation();" ng-class="{locked: isOpsLocked}">
Remove
{{blamTranslate('Remove');}}
</div>
</div>
2 changes: 1 addition & 1 deletion src/client/html/partials/addon-info/github.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
</div>
</div>
<div class="description">
{{blStr('description', addonStatus[key].github.bl_info.description);}}
{{blamTranslate(blStr('description', addonStatus[key].github.bl_info.description));}}
</div>
<div class="author">
{{blStr('author', addonStatus[key].github.bl_info.author);}}
Expand Down
2 changes: 1 addition & 1 deletion src/client/html/partials/addon-info/installed.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
</div>
</div>
<div class="description">
{{blStr('description', addonStatus[key].installed[targetDir].bl_info.description);}}
{{blamTranslate(blStr('description', addonStatus[key].installed[targetDir].bl_info.description));}}
</div>
<div class="author">
{{blStr('author', addonStatus[key].installed[targetDir].bl_info.author);}}
Expand Down
2 changes: 1 addition & 1 deletion src/client/html/partials/customdir-list-popup.html
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ <h4>Add New Custom Directory</h4>
<div class="close-button-wrapper">
<div class="text-button-wrapper">
<div class="remove text-button" ng-click="closeCustomDirListPopup();">
Close
{{blamTranslate('Close');}}
</div>
</div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion src/client/html/partials/error-popup.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ <h4>{{ errMsg }}</h4>
<div class="close-button-wrapper">
<div class="text-button-wrapper">
<div class="remove text-button" ng-click="closeErrorPopup();">
Close
{{blamTranslate('Close');}}
</div>
</div>
</div>
Expand Down
8 changes: 7 additions & 1 deletion src/client/html/partials/footer.html
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
<div class="language-panel">
<div class="selectbox-wrapper" ng-show="true">
<select class="selectbox" name="langSelect" ng-change="onLangSelectorChanged()" ng-model="$parent.langSelect" ng-options="lang as lang for lang in langList">
</select>
</div>
</div>
<div class="progress-panel">
<div class="progressbar">
<div class="progressbar-complete" style="width: {{ task.progressRate * 100 }}%"></div>
</div>
<div class="progress">
{{ task.progress }}
{{ task.progress }} <font color="#000000">.</font>
</div>
</div>
6 changes: 3 additions & 3 deletions src/client/html/partials/header.html
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,16 @@
<div class="sort">
<div class="sort-item">
<div class="selectbox-wrapper" ng-show="true">
<select class="selectbox" name="addonOrderItemSelect" ng-change="onAddonSelectorChanged()" ng-model="$parent.addonOrderItemSelect" ng-options="order as order.name for order in addonOrderItemList">
<select class="selectbox" name="addonOrderItemSelect" ng-change="onAddonSelectorChanged()" ng-model="$parent.addonOrderItemSelect" ng-options="order as blamTranslate(order.name) for order in addonOrderItemList">
</select>
</div>
</div>
<div class="sort-order">
<div class="radiobutton">
<input type="radio" id="ascend" ng-model="$parent.addonOrder" value="ASCEND" ng-change="onAddonSelectorChanged()">
<label for="ascend">Ascend</label><br>
<label for="ascend">{{blamTranslate('Ascend');}}</label><br>
<input type="radio" id="descend" ng-model="$parent.addonOrder" value="DESCEND" ng-change="onAddonSelectorChanged()">
<label for="descend">Descend</label>
<label for="descend">{{blamTranslate('Descend');}}</label>
</div>
</div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion src/client/html/partials/ignore-list-popup.html
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ <h4>Ignored Add-on List</h4>
<div class="close-button-wrapper">
<div class="text-button-wrapper">
<div class="remove text-button" ng-click="closeIgnoreListPopup();">
Close
{{blamTranslate('Close');}}
</div>
</div>
</div>
Expand Down
10 changes: 5 additions & 5 deletions src/client/html/partials/menu.html
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
<div class="menu-item-title">
Version
{{blamTranslate('Version');}}
</div>
<div class="blender-version selectbox-wrapper" ng-show="showBlVerSelect">
<select class="selectbox" name="blVerSelect" ng-change="onAddonSelectorChanged()" ng-model="$parent.blVerSelect" ng-options="ver as ver for ver in blVerList">
</select>
</div>
<div class="menu-item-title">
Addon List
{{blamTranslate('Addon List');}}
</div>
<div class="menu-selector">
<li ng-repeat="list in addonLists" class="addon-list-selector-item" ng-class="{addonListActive: isAddonListActive($index)}" ng-click="onAddonListSelectorChanged($index)">
{{list.name}}
{{blamTranslate(list.name);}}
</li>
</div>
<div class="menu-item-title">
Category
{{blamTranslate('Category');}}
</div>
<div class="menu-selector">
<li ng-repeat="category in addonCategories" class="addon-category-selector-item" ng-class="{addonCategoryActive: isAddonCategoryActive($index)}" ng-click="onAddonCategorySelectorChanged($index)">
{{category.name}}
{{blamTranslate(category.name)}}
</li>
</div>
2 changes: 1 addition & 1 deletion src/client/html/partials/migrate-addon-popup.html
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ <h4>Target Version</h4>
</div>
<div class="text-button-wrapper">
<div class="remove text-button" ng-click="closeMigAddonPopup();">
Close
{{blamTranslate('Close');}}
</div>
</div>
</div>
Expand Down
17 changes: 17 additions & 0 deletions src/client/js/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ import BlamFavorite from 'blam-favorite';
const blamFavorite = new BlamFavorite();
import BlamIgnore from 'blam-ignore';
const blamIgnore = new BlamIgnore();
import BlamTranslations from 'blam-translations';
const blamTranslations = new BlamTranslations();
import TaskMgr from 'task';
const taskMgr = new TaskMgr();
import Logger from 'logger';
Expand Down Expand Up @@ -60,6 +62,21 @@ app.controller('MainController', function ($scope, $timeout) {
$scope.blVerSelect = $scope.blVerList[0];
$scope.showBlVerSelect = true;

$scope.langList = ['Language:'];
Array.prototype.push.apply($scope.langList, blamTranslations.supportedLanguages());
$scope.langSelect = 'Language:';
blamTranslations.setLanguage('Default (English)');

$scope.blamTranslate = (key) => {
return blamTranslations.translate(key);
};

$scope.onLangSelectorChanged = () => {
if ($scope.langSelect != 'Language:') {
blamTranslations.setLanguage($scope.langSelect);
}
};

$scope.addonOrderItemList = [
{name: 'Sort:', value: ''},
{name: 'Add-on Name', value: 'ADDON_NAME'},
Expand Down
5 changes: 2 additions & 3 deletions src/client/js/task.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ function updateTask($scope)
{
setTimeout(function () {
$scope.task = {
'progress': taskMgr.genProgressString(),
'progress': taskMgr.genProgressString($scope.blamTranslate),
'progressRate': taskMgr.getCurTaskProgressRate()
};
$scope.$apply();
Expand All @@ -28,7 +28,7 @@ function completeTask($scope, addon)
advanceProgressAndUpdate($scope);
setTimeout(function () {
$scope.task = {
'progress': taskMgr.genProgressString() + " '" + addon + "'",
'progress': taskMgr.genProgressString($scope.blamTranslate) + " '" + addon + "'",
'progressRate': 1.0
};
$scope.$apply();
Expand Down Expand Up @@ -73,4 +73,3 @@ taskMgr.addItems(
]
)
taskMgr.setCompletionString('UPDATE', 'Updated Add-on');

2 changes: 1 addition & 1 deletion src/client/sass/lib/_variables.scss
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ $selectbox-bgcolor: $button-bgcolor;
$selectbox-hover-bgcolor: $button-hover-bgcolor;

$header-height: 5.0rem;
$footer-height: 3.0rem;
$footer-height: 3.5rem;

$progressbar-color: #333366;
$progressbar-complete-color: $progressbar-color + #777799;
Expand Down
7 changes: 7 additions & 0 deletions src/client/sass/modules/_footer.scss
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,19 @@
width: 100%;
height: $footer-height;
background-color: $footer-bgcolor;
.language-panel {
@include selectbox(80%);
width: 20%;
padding-left: 0.5rem;
display: inline-block;
}
.progress-panel {
width: 70%;
height: $footer-height - 0.8rem;
margin-left: auto;
margin-right: auto;
padding-top: 0.8rem;
display: inline-block;
.progress {
width: 80%;
margin-left: auto;
Expand Down
54 changes: 54 additions & 0 deletions src/lib/js/blam-translations.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
'use strict';

// external modules
import * as LangES from 'lang/lang-es';

// own modules
import Logger from 'logger';
const logger = new Logger();

export default class BlamTranslations
{
constructor() {
this['dict'] = { "Default (English)": {} };
this['currentLang'] = "Default (English)";

this._buildDict();
}

_buildDict() {
for (let key in LangES.langESDict) {
this['dict'][key] = LangES.langESDict[key];
}
}

supportedLanguages() {
let langs = []
for (let key in this['dict']) {
langs.push(key);
}
return langs;
}

setLanguage(lang) {
let supported = this.supportedLanguages();
for (let i = 0; i < supported.length; ++i) {
if (supported[i] == lang) {
this['currentLang'] = lang;
return true;
}
}

return false; // not supported
}

translate(key) {
let lang = this['currentLang'];

if (this['dict'][lang][key] === undefined) {
return key;
}

return this['dict'][lang][key];
}
}
39 changes: 39 additions & 0 deletions src/lib/js/lang/lang-es.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
export const langESDict = {
"Spanish": {
"Version": "Versión",
"Addon List": "Lista de Añadidos",
"Installed": "Instalado",
"Update": "Actualizar",
"Category": "Categoría",
"All": "Todo",
"3D View": "Vista 3D",
"Add Curve": "Añadir Curva",
"Add Mesh": "Añadir Malla",
"Animation": "Animación",
"Development": "Desarrollo",
"Game Engine": "Motor de Juegos",
"Import-Export": "Importar-Exportar",
"Mesh": "Malla",
"Node": "Nodo",
"Object": "Objeto",
"Paint": "Pintar",
"Pie Menu": "Menú Circular",
"Render": "Renderizar",
"Rigging": "Rigging",
"System": "Sistema",
"UI": "Interfaz",
"Sort:": "Ordenar:",
"Add-on Name": "Nombre de Añadido",
"Author": "Autor",
"Ascend": "Ascendente",
"Descend": "Descendente",
"(No Description)": "(Sin Descripción)",
"Link": "Enlace",
"Install": "Instalar",
"Remove": "Eliminar",
"Downloading Add-on ...": "Descargando Añadido",
"Installed Add-on": "Añadido Instalado",
"Deleted Add-on": "Añadido Borrado",
"Close": "Cerrar"
}
};
6 changes: 3 additions & 3 deletions src/lib/js/task.js
Original file line number Diff line number Diff line change
Expand Up @@ -86,16 +86,16 @@ export default class TaskMgr
return (progress + 1) * 1.0 / taskList[curTask]['items'].length;
}

genProgressString() {
genProgressString(translator) {
let curTask = this['curTask'];
let taskList = this['taskList'];

if (!taskList[curTask]) { return ""; }
if (this.taskInProgress(curTask)) {
return this.getCurTaskItem() + " (" + this.getCurTaskProgress() + "/" + this.getTaskItemTotal() + ")";
return translator(this.getCurTaskItem()) + " (" + this.getCurTaskProgress() + "/" + this.getTaskItemTotal() + ")";
}
else if (this.taskCompleted(curTask)) {
return taskList[curTask]['completion'];
return translator(taskList[curTask]['completion']);
}

return "";
Expand Down

0 comments on commit 93f3707

Please sign in to comment.