lesli_babel 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +5 -0
  3. data/app/assets/config/lesli_babel_manifest.js +7 -0
  4. data/app/assets/images/lesli_babel/babel-logo.svg +157 -0
  5. data/app/assets/javascripts/lesli_babel/application.js +3288 -0
  6. data/app/assets/stylesheets/lesli_babel/application.scss +41 -0
  7. data/app/assets/stylesheets/lesli_babel/dashboards.scss +55 -0
  8. data/app/assets/stylesheets/lesli_babel/modules.scss +33 -0
  9. data/app/assets/stylesheets/lesli_babel/translations.scss +58 -0
  10. data/app/controllers/lesli_babel/application_controller.rb +37 -0
  11. data/app/controllers/lesli_babel/buckets_controller.rb +79 -0
  12. data/app/controllers/lesli_babel/clones_controller.rb +80 -0
  13. data/app/controllers/lesli_babel/dashboards_controller.rb +38 -0
  14. data/app/controllers/lesli_babel/modules_controller.rb +91 -0
  15. data/app/controllers/lesli_babel/relevants_controller.rb +38 -0
  16. data/app/controllers/lesli_babel/strings_controller.rb +142 -0
  17. data/app/controllers/lesli_babel/translations_controller.rb +134 -0
  18. data/app/jobs/lesli_babel/application_job.rb +7 -0
  19. data/app/mailers/lesli_babel/application_mailer.rb +6 -0
  20. data/app/models/lesli_babel/application_record.rb +36 -0
  21. data/app/models/lesli_babel/bucket.rb +6 -0
  22. data/app/models/lesli_babel/clone.rb +24 -0
  23. data/app/models/lesli_babel/dashboard.rb +35 -0
  24. data/app/models/lesli_babel/module.rb +35 -0
  25. data/app/models/lesli_babel/relevant.rb +21 -0
  26. data/app/models/lesli_babel/string/activity.rb +5 -0
  27. data/app/models/lesli_babel/string/discussion.rb +68 -0
  28. data/app/models/lesli_babel/string.rb +225 -0
  29. data/app/models/lesli_babel/translation.rb +5 -0
  30. data/app/services/lesli_babel/module_service.rb +18 -0
  31. data/app/services/lesli_babel/old/translations_android_service.rb +82 -0
  32. data/app/services/lesli_babel/old/translations_clone_service.rb +161 -0
  33. data/app/services/lesli_babel/old/translations_flutter_service.rb +102 -0
  34. data/app/services/lesli_babel/old/translations_ios_service.rb +119 -0
  35. data/app/services/lesli_babel/old/translations_js_service.rb +114 -0
  36. data/app/services/lesli_babel/old/translations_middleman_service.rb +77 -0
  37. data/app/services/lesli_babel/old/translations_rails_service.rb +119 -0
  38. data/app/services/lesli_babel/old/translations_service.rb +97 -0
  39. data/app/services/lesli_babel/old/translations_synchronization_service.rb +215 -0
  40. data/app/services/lesli_babel/string_service.rb +80 -0
  41. data/app/views/lesli_babel/buckets/_form.html.erb +17 -0
  42. data/app/views/lesli_babel/buckets/edit.html.erb +6 -0
  43. data/app/views/lesli_babel/buckets/index.html.erb +25 -0
  44. data/app/views/lesli_babel/buckets/new.html.erb +5 -0
  45. data/app/views/lesli_babel/buckets/show.html.erb +4 -0
  46. data/app/views/lesli_babel/clones/_form.html.erb +19 -0
  47. data/app/views/lesli_babel/clones/edit.html.erb +20 -0
  48. data/app/views/lesli_babel/clones/index.html.erb +20 -0
  49. data/app/views/lesli_babel/clones/new.html.erb +20 -0
  50. data/app/views/lesli_babel/clones/show.html.erb +20 -0
  51. data/app/views/lesli_babel/dashboards/show.html.erb +1 -0
  52. data/app/views/lesli_babel/dashboards/stats..html.erb +1 -0
  53. data/app/views/lesli_babel/modules/_form.html.erb +17 -0
  54. data/app/views/lesli_babel/modules/edit.html.erb +1 -0
  55. data/app/views/lesli_babel/modules/index.html.erb +1 -0
  56. data/app/views/lesli_babel/modules/new.html.erb +1 -0
  57. data/app/views/lesli_babel/modules/show.html.erb +1 -0
  58. data/app/views/lesli_babel/partials/_engine-navigation.html.erb +37 -0
  59. data/app/views/lesli_babel/partials/_engine-sidebar.html.erb +45 -0
  60. data/app/views/lesli_babel/relevants/edit.html.erb +20 -0
  61. data/app/views/lesli_babel/relevants/index.html.erb +21 -0
  62. data/app/views/lesli_babel/relevants/new.html.erb +20 -0
  63. data/app/views/lesli_babel/relevants/show.html.erb +20 -0
  64. data/app/views/lesli_babel/string/activities/_form.html.erb +17 -0
  65. data/app/views/lesli_babel/string/activities/edit.html.erb +6 -0
  66. data/app/views/lesli_babel/string/activities/index.html.erb +25 -0
  67. data/app/views/lesli_babel/string/activities/new.html.erb +5 -0
  68. data/app/views/lesli_babel/string/activities/show.html.erb +4 -0
  69. data/app/views/lesli_babel/string/discussions/_form.html.erb +17 -0
  70. data/app/views/lesli_babel/string/discussions/edit.html.erb +6 -0
  71. data/app/views/lesli_babel/string/discussions/index.html.erb +25 -0
  72. data/app/views/lesli_babel/string/discussions/new.html.erb +5 -0
  73. data/app/views/lesli_babel/string/discussions/show.html.erb +4 -0
  74. data/app/views/lesli_babel/strings/_form.html.erb +17 -0
  75. data/app/views/lesli_babel/strings/edit.html.erb +6 -0
  76. data/app/views/lesli_babel/strings/index.html.erb +25 -0
  77. data/app/views/lesli_babel/strings/new.html.erb +5 -0
  78. data/app/views/lesli_babel/strings/show.html.erb +4 -0
  79. data/app/views/lesli_babel/translations/_form.html.erb +17 -0
  80. data/app/views/lesli_babel/translations/edit.html.erb +6 -0
  81. data/app/views/lesli_babel/translations/index.html.erb +1 -0
  82. data/app/views/lesli_babel/translations/new.html.erb +5 -0
  83. data/app/views/lesli_babel/translations/show.html.erb +1 -0
  84. data/config/routes.rb +63 -0
  85. data/db/migrate/v1.0/0901100110_create_lesli_babel_modules.rb +42 -0
  86. data/db/migrate/v1.0/0901110110_create_lesli_babel_buckets.rb +43 -0
  87. data/db/migrate/v1.0/0901120110_create_lesli_babel_strings.rb +80 -0
  88. data/lib/lesli_babel/engine.rb +54 -0
  89. data/lib/lesli_babel/version.rb +3 -0
  90. data/lib/lesli_babel.rb +6 -0
  91. data/lib/tasks/lesli_babel_tasks.rake +121 -0
  92. data/lib/vue/application.js +46 -0
  93. data/lib/vue/apps/dashboards/show.vue +85 -0
  94. data/lib/vue/apps/modules/show.vue +97 -0
  95. data/lib/vue/apps/relevants/index.vue +47 -0
  96. data/lib/vue/apps/translations/index.vue +64 -0
  97. data/lib/vue/components/actions.vue +29 -0
  98. data/lib/vue/components/form-label-editor.vue +439 -0
  99. data/lib/vue/components/form-string-new.vue +171 -0
  100. data/lib/vue/stores/module.js +49 -0
  101. data/lib/vue/stores/statistics.js +42 -0
  102. data/lib/vue/stores/strings.js +141 -0
  103. data/lib/vue/stores/translations.js +73 -0
  104. data/license +674 -0
  105. data/readme.md +19 -0
  106. metadata +149 -0
@@ -0,0 +1,80 @@
1
+ =begin
2
+
3
+ Lesli
4
+
5
+ Copyright (c) 2023, Lesli Technologies, S. A.
6
+
7
+ This program is free software: you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation, either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program. If not, see http://www.gnu.org/licenses/.
19
+
20
+ Lesli · Ruby on Rails SaaS Development Framework.
21
+
22
+ Made with ♥ by https://www.lesli.tech
23
+ Building a better future, one line of code at a time.
24
+
25
+ @contact hello@lesli.tech
26
+ @website https://www.lesli.tech
27
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
28
+
29
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
30
+ // ·
31
+ =end
32
+
33
+ class CreateLesliBabelStrings < ActiveRecord::Migration[6.0]
34
+ def change
35
+ create_table :lesli_babel_strings do |t|
36
+
37
+ t.string :label
38
+ t.string :es # spanish
39
+ t.string :en # english
40
+ t.string :de # deutsch/german
41
+ t.string :fr # french
42
+ t.string :nl # nederlands/netherlands/holanda
43
+ t.string :pl # polski/polish/poland
44
+ t.string :pt # portuguese
45
+ t.string :it # italian
46
+ t.string :tr # turkish
47
+ t.string :ro # romanian
48
+ t.string :bg # bulgarian
49
+ t.string :uk # Ukrainian
50
+ t.string :sr # Serbian
51
+ t.string :hr # Hrvatski/Croatian
52
+
53
+ t.integer :status # 0 disabled, 1 ok, 2 need help, 3 need translation
54
+ t.string :context
55
+
56
+ t.datetime :last_update_es
57
+ t.datetime :last_update_en
58
+ t.datetime :last_update_de
59
+ t.datetime :last_update_fr
60
+ t.datetime :last_update_nl
61
+ t.datetime :last_update_pl
62
+ t.datetime :last_update_pt
63
+ t.datetime :last_update_it
64
+ t.datetime :last_update_tr
65
+ t.datetime :last_update_ro
66
+ t.datetime :last_update_bg
67
+ t.datetime :last_update_uk
68
+ t.datetime :last_update_sr
69
+ t.datetime :last_update_hr
70
+
71
+ t.datetime :last_update_status
72
+ t.datetime :last_update_context
73
+
74
+ t.string :reference_bucket
75
+ t.datetime :deleted_at
76
+ t.timestamps
77
+ end
78
+ add_reference(:lesli_babel_strings, :bucket, foreign_key: { to_table: :lesli_babel_buckets })
79
+ end
80
+ end
@@ -0,0 +1,54 @@
1
+ =begin
2
+
3
+ Lesli
4
+
5
+ Copyright (c) 2023, Lesli Technologies, S. A.
6
+
7
+ This program is free software: you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation, either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program. If not, see http://www.gnu.org/licenses/.
19
+
20
+ Lesli · Ruby on Rails SaaS Development Framework.
21
+
22
+ Made with ♥ by https://www.lesli.tech
23
+ Building a better future, one line of code at a time.
24
+
25
+ @contact hello@lesli.tech
26
+ @website https://www.lesli.dev
27
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
28
+
29
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
30
+ // ·
31
+ =end
32
+
33
+ module LesliBabel
34
+ class Engine < ::Rails::Engine
35
+ isolate_namespace LesliBabel
36
+
37
+ initializer :lesli_babel do |app|
38
+
39
+ # register assets manifest
40
+ config.assets.precompile += %w[lesli_babel_manifest.js]
41
+
42
+ # set locales (from initializer)
43
+ config.i18n.default_locale = Lesli.config.locales.keys.first || :en
44
+ config.i18n.available_locales = Lesli.config.locales.keys || [:en]
45
+
46
+ # register engine migrations path
47
+ unless app.root.to_s.match root.to_s
48
+ config.paths["db/migrate"].expanded.each do |expanded_path|
49
+ app.config.paths["db/migrate"] << expanded_path
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,3 @@
1
+ module LesliBabel
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,6 @@
1
+ require "lesli_babel/version"
2
+ require "lesli_babel/engine"
3
+
4
+ module LesliBabel
5
+ # Your code goes here...
6
+ end
@@ -0,0 +1,121 @@
1
+ =begin
2
+
3
+ Lesli
4
+
5
+ Copyright (c) 2023, Lesli Technologies, S. A.
6
+
7
+ This program is free software: you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation, either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program. If not, see http://www.gnu.org/licenses/.
19
+
20
+ Lesli · Ruby on Rails SaaS Development Framework.
21
+
22
+ Made with ♥ by https://www.lesli.tech
23
+ Building a better future, one line of code at a time.
24
+
25
+ @contact hello@lesli.tech
26
+ @website https://www.lesli.tech
27
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
28
+
29
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
30
+ // ·
31
+ =end
32
+
33
+ require "json"
34
+
35
+ namespace :lesli_babel do
36
+
37
+ desc "Delete translations files"
38
+ task clean: [:environment] do
39
+
40
+ result = CloudBabel::TranslationsService.clean
41
+ result.payload.each do |file_path|
42
+ p "delete translations for: #{file_path.to_s}"
43
+ end
44
+
45
+ end
46
+
47
+ desc "Create standard structure for translations according to the objects in the app"
48
+ task scan: [:environment] do
49
+
50
+ engines = Lesli::SystemController.index(matrix: false)
51
+
52
+ engines.each do |t|
53
+
54
+ platform = "lesli_engine"
55
+ platform = "lesli_core" if t[:engine] == "lesli"
56
+
57
+ # add object to the translation workflow
58
+ translation_module = LesliBabel::Module.find_or_create_by(name: t[:engine], platform: platform)
59
+ translation_bucket = LesliBabel::Bucket.find_or_create_by(name: t[:controller], module: translation_module, reference_module: translation_module.name)
60
+ translation_bucket = LesliBabel::Bucket.find_or_create_by({ name: "shared", module: translation_module, reference_module: translation_module.name })
61
+
62
+ end
63
+
64
+ L2.msg "CloudBabel: Module/Controllers scanned and registered"
65
+
66
+ end
67
+
68
+ desc "Scan for descriptors and register labels for translations for them"
69
+ task descriptors: [:environment] do
70
+
71
+ puts "scan for descriptors"
72
+
73
+ translation_module = CloudBabel::Module.find_or_create_by({ name: "Core", platform: "rails_core" })
74
+ translation_bucket = CloudBabel::Bucket.find_or_create_by({
75
+ name: "descriptors",
76
+ module: translation_module,
77
+ reference_module: translation_module.name
78
+ })
79
+
80
+ Descriptor.all.each do |descriptor|
81
+ CloudBabel::String.find_or_create_by({
82
+ :label => "descriptor_#{descriptor["name"]}",
83
+ :bucket => translation_bucket
84
+ })
85
+ end
86
+
87
+
88
+ end
89
+
90
+ def scan_for_engines
91
+ controller_list = {}
92
+
93
+ Rails.application.routes.routes.each do |route|
94
+ route = route.defaults
95
+
96
+ next if route[:controller].blank?
97
+ next if route[:controller].include? "rails"
98
+ next if route[:controller].include? "action_mailbox"
99
+ next if route[:controller].include? "active_storage"
100
+
101
+ controller_list[route[:controller]] = [] unless controller_list[route[:controller]]
102
+
103
+ controller_list[route[:controller]].push(route[:action])
104
+ end
105
+
106
+ Rails.configuration.lesli.dig(:engines).each do |engine|
107
+ platform = "rails_engine"
108
+ platform = "rails_builder" if engine[:type] == "builder"
109
+ routes = "#{engine[:name]}::Engine".constantize.routes.routes.each do |route|
110
+ route = route.defaults
111
+
112
+ controller_list[route[:controller]] = [] if controller_list[route[:controller]].blank?
113
+
114
+ controller_list[route[:controller]].push(route[:action])
115
+
116
+ end
117
+ end
118
+
119
+ return controller_list
120
+ end
121
+ end
@@ -0,0 +1,46 @@
1
+ /*
2
+ Copyright (c) 2020, all rights reserved.
3
+
4
+ All the information provided by this platform is protected by international laws related to
5
+ industrial property, intellectual property, copyright and relative international laws.
6
+ All intellectual or industrial property rights of the code, texts, trade mark, design,
7
+ pictures and any other information belongs to the owner of this platform.
8
+
9
+ Without the written permission of the owner, any replication, modification,
10
+ transmission, publication is strictly forbidden.
11
+
12
+ For more information read the license file including with this software.
13
+
14
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
15
+ // ·
16
+ */
17
+
18
+
19
+ // ·
20
+ import application from "Lesli/application"
21
+
22
+
23
+ // ·
24
+ import appDashboardShow from "LesliBabel/apps/dashboards/show.vue"
25
+ import appRelevantsIndex from "LesliBabel/apps/relevants/index.vue"
26
+ import appTranslationsIndex from "LesliBabel/apps/translations/index.vue"
27
+ import appModulesShow from "LesliBabel/apps/modules/show.vue"
28
+
29
+
30
+ // ·
31
+ application("LesliBabel", [{
32
+ path: "/",
33
+ component: appDashboardShow
34
+ }, {
35
+ path: "/dashboard",
36
+ component: appDashboardShow
37
+ }, {
38
+ path: "/translations",
39
+ component: appTranslationsIndex
40
+ }, {
41
+ path: "/relevants",
42
+ component: appRelevantsIndex
43
+ }, {
44
+ path: "/modules/:id",
45
+ component: appModulesShow
46
+ }])
@@ -0,0 +1,85 @@
1
+ <script setup>
2
+ /*
3
+ Copyright (c) 2022, all rights reserved.
4
+
5
+ All the information provided by this platform is protected by international laws related to
6
+ industrial property, intellectual property, copyright and relative international laws.
7
+ All intellectual or industrial property rights of the code, texts, trade mark, design,
8
+ pictures and any other information belongs to the owner of this platform.
9
+
10
+ Without the written permission of the owner, any replication, modification,
11
+ transmission, publication is strictly forbidden.
12
+
13
+ For more information read the license file including with this software.
14
+
15
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
16
+ // ·
17
+ */
18
+
19
+
20
+ // · import vue tools
21
+ import { ref, reactive, onMounted, watch, computed, inject } from "vue"
22
+ import { useRouter, useRoute } from 'vue-router'
23
+
24
+
25
+ // · Import components
26
+ import componentActions from "LesliBabel/components/actions.vue"
27
+
28
+
29
+ // · initialize/inject plugins
30
+ const router = useRouter()
31
+ const msg = inject("msg")
32
+ const url = inject("url")
33
+
34
+
35
+ // · import lesli stores
36
+ import { useStatistics } from "LesliBabel/stores/statistics"
37
+ import { useStrings } from "LesliBabel/stores/strings"
38
+
39
+
40
+ // · implement stores
41
+ const storeStatistics = useStatistics()
42
+ const storeStrings = useStrings()
43
+
44
+
45
+ // ·
46
+ onMounted(() => {
47
+ storeStatistics.fetch()
48
+ })
49
+
50
+
51
+ // ·
52
+ function flag(language) {
53
+ if (language == 'en') { return 'flag-icon-gb' }
54
+ if (language == 'uk') { return 'flag-icon-ua' }
55
+ return 'flag-icon-'+language
56
+ }
57
+
58
+
59
+ // ·
60
+ function search(string) {
61
+ router.push({ path: "translations", query: { search: string }})
62
+ }
63
+ </script>
64
+ <template>
65
+ <lesli-application-container>
66
+ <lesli-header :title="`Found ${ storeStatistics.totalStrings } registered labels`">
67
+ <component-actions></component-actions>
68
+ </lesli-header>
69
+ <lesli-toolbar @search="search"></lesli-toolbar>
70
+ <div class="locales mt-2">
71
+ <router-link class="card mr-5 mb-5"
72
+ v-for="locale in storeStatistics.languages"
73
+ :key="locale.code"
74
+ :to="url.babel('translations', { locale: locale.code }).s" >
75
+ <span :class="['mb-2', 'is-size-2','flag-icon', flag(locale.code)]"></span>
76
+ <p class="is-size-5">
77
+ {{ locale.name }}: {{ locale.total }}
78
+ </p>
79
+ <small>
80
+ missing: {{ storeStatistics.totalStrings - locale.total }} translations
81
+ </small>
82
+ </router-link>
83
+ </div>
84
+ </lesli-application-container>
85
+ </template>
@@ -0,0 +1,97 @@
1
+ <script setup>
2
+ /*
3
+ Copyright (c) 2022, all rights reserved.
4
+
5
+ All the information provided by this platform is protected by international laws related to
6
+ industrial property, intellectual property, copyright and relative international laws.
7
+ All intellectual or industrial property rights of the code, texts, trade mark, design,
8
+ pictures and any other information belongs to the owner of this platform.
9
+
10
+ Without the written permission of the owner, any replication, modification,
11
+ transmission, publication is strictly forbidden.
12
+
13
+ For more information read the license file including with this software.
14
+
15
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
16
+ // ·
17
+ */
18
+
19
+
20
+ // · import vue tools
21
+ import { ref, reactive, onMounted, watch, computed, onUnmounted } from "vue"
22
+ import { useRouter, useRoute } from 'vue-router'
23
+
24
+
25
+ // · import components
26
+ import formStringNew from "LesliBabel/components/form-string-new.vue"
27
+ import formLabelEditor from "LesliBabel/components/form-label-editor.vue"
28
+ import componentActions from "LesliBabel/components/actions.vue"
29
+
30
+
31
+ // · import lesli stores
32
+ import { useModule } from "LesliBabel/stores/module"
33
+ import { useStrings } from "LesliBabel/stores/strings"
34
+
35
+
36
+ // · implement stores
37
+ const storeModule = useModule()
38
+ const storeStrings = useStrings()
39
+ const router = useRouter()
40
+ const route = useRoute()
41
+
42
+
43
+ // ·
44
+ onMounted(() => {
45
+ storeModule.fetchModule(route.params.id)
46
+ })
47
+
48
+
49
+ // ·
50
+ function getModule() {
51
+ return route.params?.id
52
+ }
53
+
54
+
55
+ // ·
56
+ function search(string) {
57
+ router.push({ query: { search: string }})
58
+ }
59
+
60
+
61
+ // ·
62
+ watch(() => route.params.id, () => {
63
+ storeModule.fetchModule(route.params.id)
64
+ })
65
+
66
+ </script>
67
+ <template>
68
+ <section class="application-component">
69
+ <lesli-header :title="storeModule.name">
70
+ <component-actions></component-actions>
71
+ <lesli-button solid icon="add" @click="storeStrings.showPanel = true">
72
+ add new string
73
+ </lesli-button>
74
+ </lesli-header>
75
+
76
+ <lesli-toolbar @search="search">
77
+ </lesli-toolbar>
78
+
79
+ <formLabelEditor :module="getModule()">
80
+ </formLabelEditor>
81
+
82
+ <lesli-panel v-model:open="storeStrings.showPanel">
83
+ <template #header>
84
+ <span class="icon">
85
+ <span class="material-icons">
86
+ translate
87
+ </span>
88
+ </span>
89
+ Add new string to translate
90
+ </template>
91
+ <template #default>
92
+ <formStringNew v-if="storeModule.id" :module-id="storeModule.id">
93
+ </formStringNew>
94
+ </template>
95
+ </lesli-panel>
96
+ </section>
97
+ </template>
@@ -0,0 +1,47 @@
1
+ <script setup>
2
+ /*
3
+ Copyright (c) 2022, all rights reserved.
4
+
5
+ All the information provided by this platform is protected by international laws related to
6
+ industrial property, intellectual property, copyright and relative international laws.
7
+ All intellectual or industrial property rights of the code, texts, trade mark, design,
8
+ pictures and any other information belongs to the owner of this platform.
9
+
10
+ Without the written permission of the owner, any replication, modification,
11
+ transmission, publication is strictly forbidden.
12
+
13
+ For more information read the license file including with this software.
14
+
15
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
16
+ // ·
17
+ */
18
+
19
+
20
+ // · import vue tools
21
+ import { ref, reactive, onMounted, watch, computed, inject } from "vue"
22
+ import { useRouter, useRoute } from 'vue-router'
23
+
24
+
25
+ // · initialize/inject plugins
26
+ const router = useRouter()
27
+ const route = useRoute()
28
+ const msg = inject("msg")
29
+ const url = inject("url")
30
+
31
+
32
+ // · import components
33
+ import componentLabelEditor from "LesliBabel/components/form-label-editor.vue"
34
+ import componentActions from "LesliBabel/components/actions.vue"
35
+
36
+
37
+ </script>
38
+ <template>
39
+ <section class="application-component">
40
+ <lesli-header title="Relevant translations">
41
+ <component-actions></component-actions>
42
+ </lesli-header>
43
+
44
+ <component-label-editor module="relevants">
45
+ </component-label-editor>
46
+ </section>
47
+ </template>
@@ -0,0 +1,64 @@
1
+ <script setup>
2
+ /*
3
+ Copyright (c) 2022, all rights reserved.
4
+
5
+ All the information provided by this platform is protected by international laws related to
6
+ industrial property, intellectual property, copyright and relative international laws.
7
+ All intellectual or industrial property rights of the code, texts, trade mark, design,
8
+ pictures and any other information belongs to the owner of this platform.
9
+
10
+ Without the written permission of the owner, any replication, modification,
11
+ transmission, publication is strictly forbidden.
12
+
13
+ For more information read the license file including with this software.
14
+
15
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
16
+ // ·
17
+ */
18
+
19
+
20
+ // · import vue tools
21
+ import { ref, reactive, onMounted, watch, computed, inject } from "vue"
22
+ import { useRouter, useRoute } from 'vue-router'
23
+
24
+
25
+ // · initialize/inject plugins
26
+ const router = useRouter()
27
+ const route = useRoute()
28
+ const msg = inject("msg")
29
+ const url = inject("url")
30
+
31
+
32
+ // · import components
33
+ import componentLabelEditor from "LesliBabel/components/form-label-editor.vue"
34
+ import componentActions from "LesliBabel/components/actions.vue"
35
+
36
+
37
+ // · import lesli stores
38
+ import { useStrings } from "LesliBabel/stores/strings"
39
+ import { useTranslations } from "LesliBabel/stores/translations"
40
+
41
+
42
+ // · implement stores
43
+ const storeStrings = useStrings()
44
+ const storeTranslations = useTranslations()
45
+
46
+
47
+ // ·
48
+ function search(string) {
49
+ router.push({ path: "translations", query: { search: string }})
50
+ }
51
+ </script>
52
+ <template>
53
+ <lesli-application-container>
54
+ <lesli-header title="Translations">
55
+ <component-actions></component-actions>
56
+ </lesli-header>
57
+
58
+ <lesli-toolbar :initial-value="storeStrings.search" @search="search">
59
+ </lesli-toolbar>
60
+
61
+ <component-label-editor>
62
+ </component-label-editor>
63
+ </lesli-application-container>
64
+ </template>
@@ -0,0 +1,29 @@
1
+ <script setup>
2
+
3
+ // · import lesli stores
4
+ import { useTranslations } from "LesliBabel/stores/translations"
5
+
6
+
7
+ // · implement stores
8
+ const storeTranslations = useTranslations()
9
+
10
+ </script>
11
+ <template>
12
+ <lesli-button icon="download" @click="storeTranslations.postRenovate()">
13
+ update
14
+ </lesli-button>
15
+ <lesli-button icon="rocket_launch" @click="storeTranslations.postDeploy()">
16
+ deploy
17
+ </lesli-button>
18
+ <lesli-button icon="sync" @click="storeTranslations.postSync()">
19
+ sync
20
+ </lesli-button>
21
+ <!--
22
+ <lesli-button icon="code">
23
+ javascript
24
+ </lesli-button>
25
+ <lesli-button icon="code">
26
+ flutter
27
+ </lesli-button>
28
+ -->
29
+ </template>