diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 00000000..7abc2777
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "docs/_sass/bulma"]
+ path = docs/_sass/bulma
+ url = https://github.com/jgthms/bulma.git
diff --git a/README.md b/README.md
index fbc109c1..b6e0add6 100644
--- a/README.md
+++ b/README.md
@@ -2,30 +2,17 @@
|macOS|Linux|Windows|
|---|---|---|
-|[![GitHub Actions Build Status](https://github.com/atomery/translatium/workflows/macOS/badge.svg)](https://github.com/atomery/translatium/actions)|[![GitHub Actions Build Status](https://github.com/atomery/translatium/workflows/Linux/badge.svg)](https://github.com/atomery/translatium/actions)|[![GitHub Actions Build Status](https://github.com/atomery/translatium/workflows/Windows/badge.svg)](https://github.com/atomery/translatium/actions)|
+|[![GitHub Actions Build Status](https://github.com/quanglam2807/translatium/workflows/macOS/badge.svg)](https://github.com/quanglam2807/translatium/actions)|[![GitHub Actions Build Status](https://github.com/quanglam2807/translatium/workflows/Linux/badge.svg)](https://github.com/quanglam2807/translatium/actions)|[![GitHub Actions Build Status](https://github.com/quanglam2807/translatium/workflows/Windows/badge.svg)](https://github.com/quanglam2807/translatium/actions)|
-**[Translatium](https://atomery.com/translatium)** - Translate Any Languages like a Pro.
+**[Translatium](https://translatiumapp.com)** - Translate Any Languages like a Pro.
**master** branch only includes the source code of Translatium 9 & up. For older versions, check out the **legacy-** branches.
----
-## Licensing
-### Usage
-**Translatium is paid software.** [Pay just $9.99](https://webcatalog.onfastspring.com/translatium) to unlock the app perpetually.
-
-The license:
-- Has no time limit and never expires.
-- Works with all versions (including major updates).
-- Permits uses on all of the devices you own (regardless of platforms or operating systems).
-
-### Source Code
-On the other hand, **the source code is freely available** for use, modification and distribution under the permissions, limitations and conditions listed in the [Mozilla Public License 2.0](LICENSE).
-
---
## Development
```
# First, clone the project:
-git clone https://github.com/atomery/translatium.git
+git clone https://github.com/quanglam2807/translatium.git
cd translatium
# set API keys
diff --git a/description-generator.js b/description-generator.js
index 4f4e235a..4669a0ba 100644
--- a/description-generator.js
+++ b/description-generator.js
@@ -19,7 +19,7 @@ Object.keys(displayLanguages).forEach((langCode) => {
const desc = rawDesc
.replace(/{appName}/g, 'Translatium')
.replace(/{operatingSystem}/g, operatingSystem)
- .replace(/{appUrl}/g, 'https://atomery.com/translatium')
+ .replace(/{appUrl}/g, 'https://translatiumapp.com')
.replace(/{supportedLanguages}/g, supportedLanguages.join(langCode === 'zh-CN' ? ',' : ', '));
const distDescFilePath = path.join(__dirname, 'dist', 'description', langCode, `${operatingSystem}.txt`);
fs.outputFileSync(distDescFilePath, desc, 'utf8');
diff --git a/dist.js b/dist.js
index 6400f39b..9a1f4cf8 100644
--- a/dist.js
+++ b/dist.js
@@ -50,7 +50,7 @@ switch (process.platform) {
break;
}
case 'win32': {
- targets = Platform.WINDOWS.createTarget(['nsis']);
+ targets = Platform.WINDOWS.createTarget(['appx', 'nsis']);
break;
}
default:
@@ -79,6 +79,11 @@ const opts = {
name: 'Translatium',
schemes: ['translatium'],
},
+ appx: {
+ applicationId: 'translatium',
+ identityName: '55974nhutquang97.5translate',
+ publisher: 'CN=C635F506-DEEB-41A4-8CAA-16689F486ED2',
+ },
mac: {
darkModeSupport: true,
// https://github.com/electron/electron/issues/15958#issuecomment-447685065
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 00000000..3effe622
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1,9 @@
+_site
+.sass-cache
+.jekyll-metadata
+.DS_Store
+.jekyll-cache
+node_modules
+_catalog_apps/*
+!_catalog_apps/gmail.md
+.env
diff --git a/docs/404.html b/docs/404.html
new file mode 100644
index 00000000..d529e990
--- /dev/null
+++ b/docs/404.html
@@ -0,0 +1,24 @@
+---
+title: '404'
+---
+
+
+
+
+ {% include head.html %}
+
+
+
+
+
+
+ 404 - Page Not Found
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/CNAME b/docs/CNAME
new file mode 100644
index 00000000..7314e1b7
--- /dev/null
+++ b/docs/CNAME
@@ -0,0 +1 @@
+translatiumapp.com
\ No newline at end of file
diff --git a/docs/Gemfile b/docs/Gemfile
new file mode 100755
index 00000000..bde8a64b
--- /dev/null
+++ b/docs/Gemfile
@@ -0,0 +1,25 @@
+source "https://rubygems.org"
+
+# Hello! This is where you manage which Jekyll version is used to run.
+# When you want to use a different version, change it below, save the
+# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
+#
+# bundle exec jekyll serve
+#
+# This will help ensure the proper Jekyll version is running.
+# Happy Jekylling!
+gem "jekyll", "~> 4.1.1"
+
+# This is the default theme for new Jekyll sites. You may change this to anything you like.
+gem "minima", "~> 2.0"
+
+# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
+# uncomment the line below. To upgrade, run `bundle update github-pages`.
+# gem "github-pages", group: :jekyll_plugins
+
+# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
+gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
+
+gem 'jekyll-sitemap'
+gem 'jekyll-feed'
+gem 'jekyll-paginate-v2'
\ No newline at end of file
diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock
new file mode 100644
index 00000000..73c68d83
--- /dev/null
+++ b/docs/Gemfile.lock
@@ -0,0 +1,84 @@
+GEM
+ remote: https://rubygems.org/
+ specs:
+ addressable (2.7.0)
+ public_suffix (>= 2.0.2, < 5.0)
+ colorator (1.1.0)
+ concurrent-ruby (1.1.7)
+ em-websocket (0.5.1)
+ eventmachine (>= 0.12.9)
+ http_parser.rb (~> 0.6.0)
+ eventmachine (1.2.7)
+ ffi (1.13.1)
+ forwardable-extended (2.6.0)
+ http_parser.rb (0.6.0)
+ i18n (1.8.5)
+ concurrent-ruby (~> 1.0)
+ jekyll (4.1.1)
+ addressable (~> 2.4)
+ colorator (~> 1.0)
+ em-websocket (~> 0.5)
+ i18n (~> 1.0)
+ jekyll-sass-converter (~> 2.0)
+ jekyll-watch (~> 2.0)
+ kramdown (~> 2.1)
+ kramdown-parser-gfm (~> 1.0)
+ liquid (~> 4.0)
+ mercenary (~> 0.4.0)
+ pathutil (~> 0.9)
+ rouge (~> 3.0)
+ safe_yaml (~> 1.0)
+ terminal-table (~> 1.8)
+ jekyll-feed (0.15.0)
+ jekyll (>= 3.7, < 5.0)
+ jekyll-paginate-v2 (3.0.0)
+ jekyll (>= 3.0, < 5.0)
+ jekyll-sass-converter (2.1.0)
+ sassc (> 2.0.1, < 3.0)
+ jekyll-seo-tag (2.6.1)
+ jekyll (>= 3.3, < 5.0)
+ jekyll-sitemap (1.4.0)
+ jekyll (>= 3.7, < 5.0)
+ jekyll-watch (2.2.1)
+ listen (~> 3.0)
+ kramdown (2.3.0)
+ rexml
+ kramdown-parser-gfm (1.1.0)
+ kramdown (~> 2.0)
+ liquid (4.0.3)
+ listen (3.2.1)
+ rb-fsevent (~> 0.10, >= 0.10.3)
+ rb-inotify (~> 0.9, >= 0.9.10)
+ mercenary (0.4.0)
+ minima (2.5.1)
+ jekyll (>= 3.5, < 5.0)
+ jekyll-feed (~> 0.9)
+ jekyll-seo-tag (~> 2.1)
+ pathutil (0.16.2)
+ forwardable-extended (~> 2.6)
+ public_suffix (4.0.6)
+ rb-fsevent (0.10.4)
+ rb-inotify (0.10.1)
+ ffi (~> 1.0)
+ rexml (3.2.4)
+ rouge (3.22.0)
+ safe_yaml (1.0.5)
+ sassc (2.4.0)
+ ffi (~> 1.9)
+ terminal-table (1.8.0)
+ unicode-display_width (~> 1.1, >= 1.1.1)
+ unicode-display_width (1.7.0)
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ jekyll (~> 4.1.1)
+ jekyll-feed
+ jekyll-paginate-v2
+ jekyll-sitemap
+ minima (~> 2.0)
+ tzinfo-data
+
+BUNDLED WITH
+ 2.1.2
diff --git a/docs/_config.yml b/docs/_config.yml
new file mode 100755
index 00000000..0cd6fe4f
--- /dev/null
+++ b/docs/_config.yml
@@ -0,0 +1,38 @@
+# Welcome to Jekyll!
+#
+# This config file is meant for settings that affect your whole blog, values
+# which you are expected to set up once and rarely edit after that. If you find
+# yourself editing this file very often, consider using Jekyll's data files
+# feature for the data you need to update frequently.
+#
+# For technical reasons, this file is *NOT* reloaded automatically when you use
+# 'bundle exec jekyll serve'. If you change this file, please restart the server process.
+
+# Site settings
+# These are used to personalize your new site. If you look in the HTML files,
+# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.
+# You can create any custom variable you would like, and they will be accessible
+# in the templates via {{ site.myvariable }}.
+title: Translatium
+description: Translatium lets you translate words, phrases and images between over 100 languages with dictionary, transliteration and voice output support.
+baseurl: "" # the subpath of your site, e.g. /blog
+url: "https://translatiumapp.com" # the base hostname & protocol for your site, e.g. http://example.com
+
+translatium_version: 13.8.2
+
+pagination:
+ enabled: true
+
+markdown: kramdown
+plugins:
+ - jekyll-sitemap
+ - jekyll-feed
+ - jekyll-paginate-v2
+
+exclude:
+ - yarn.lock
+ - package.json
+ - scripts
+
+include:
+ - _redirects
diff --git a/docs/_includes/google-analytics.html b/docs/_includes/google-analytics.html
new file mode 100644
index 00000000..38a1aebd
--- /dev/null
+++ b/docs/_includes/google-analytics.html
@@ -0,0 +1,14 @@
+{% if jekyll.environment == 'production' and site.google_analytics %}
+
+
+{% endif %}
\ No newline at end of file
diff --git a/docs/_includes/head.html b/docs/_includes/head.html
new file mode 100755
index 00000000..a83f9a9d
--- /dev/null
+++ b/docs/_includes/head.html
@@ -0,0 +1,28 @@
+{% assign page_description = site.description %}
+
+{% if page.id != 'landing' %}
+{% capture page_title %}{% if page.title %}{{ page.title }} - {% endif %}{{ site.title }}{% endcapture %}
+{% else %}
+{% capture page_title %}{% if page.title %}{{ page.title }}{% endif %}{% endcapture %}
+{% endif %}
+
+
+
+
+
+
+ {% include social-meta.html %}
+
+ {{ page_title | escape }}
+
+
+
+ {% if paginator.previous_page %}
+
+ {% endif %}
+ {% if paginator.next_page %}
+
+ {% endif %}
+
+
+
\ No newline at end of file
diff --git a/docs/_includes/social-meta.html b/docs/_includes/social-meta.html
new file mode 100644
index 00000000..38a4dc36
--- /dev/null
+++ b/docs/_includes/social-meta.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/_layouts/compress.html b/docs/_layouts/compress.html
new file mode 100644
index 00000000..bb34487d
--- /dev/null
+++ b/docs/_layouts/compress.html
@@ -0,0 +1,10 @@
+---
+# Jekyll layout that compresses HTML
+# v3.1.0
+# http://jch.penibelst.de/
+# © 2014–2015 Anatol Broder
+# MIT License
+---
+
+{% capture _LINE_FEED %}
+{% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment or site.compress_html.ignore.envs == "all" %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "
" %}{% endif %}{% unless _pre_before contains "
" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " ;; ;" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %} Step | Bytes |
raw | {{ content | size }}{% if _profile_endings %} |
endings | {{ _profile_endings }}{% endif %}{% if _profile_startings %} |
startings | {{ _profile_startings }}{% endif %}{% if _profile_comments %} |
comments | {{ _profile_comments }}{% endif %}{% if _profile_collapse %} |
collapse | {{ _profile_collapse }}{% endif %}{% if _profile_clippings %} |
clippings | {{ _profile_clippings }}{% endif %} |
{% endif %}{% endif %}
diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html
new file mode 100755
index 00000000..2d069cae
--- /dev/null
+++ b/docs/_layouts/default.html
@@ -0,0 +1,44 @@
+---
+layout: compress
+---
+
+
+
+ {% include head.html %}
+
+
+
+
+ {{ content }}
+
+
+ {% include google-analytics.html %}
+
+
diff --git a/docs/_layouts/post.html b/docs/_layouts/post.html
new file mode 100644
index 00000000..d8f5458f
--- /dev/null
+++ b/docs/_layouts/post.html
@@ -0,0 +1,25 @@
+---
+layout: default
+---
+
+
+
+
+
+
{{ page.title }}
+
+ {{ content }}
+
+
+
\ No newline at end of file
diff --git a/docs/_layouts/support.html b/docs/_layouts/support.html
new file mode 100644
index 00000000..cd395b2e
--- /dev/null
+++ b/docs/_layouts/support.html
@@ -0,0 +1,28 @@
+---
+layout: default
+---
+
+
+
+
Support
+
+
+
+
+
+
+
Frequently Asked Questions (FAQs)
+
+ {{ content }}
+
+
+
+
\ No newline at end of file
diff --git a/docs/_layouts/translatium.html b/docs/_layouts/translatium.html
new file mode 100644
index 00000000..3db506f6
--- /dev/null
+++ b/docs/_layouts/translatium.html
@@ -0,0 +1,166 @@
+---
+layout: default
+---
+
+
+
+
+
+
+
+
100+ languages
+
English, Spanish, French, German, Japanese, Chinese, Arabic, and many more. See them all.
+
+
+
Perfect pronunciation
+
Translatium speaks translations directly to you, accent and all. It also displays intuitive phonetics.
+
+
+
Phrasebook
+
Keep your translation history and favorite phrases. Look up anytime you need, even without the Internet.
+
+
+
Full-on reference
+
See word genders and scroll through synonyms to say what you mean and mean what you say.
+
+
+
Image translation
+
Translate text in images instantly with our powerful OCR tool. And yes, that includes screenshots.
+
+
+
Menu bar integration
+
Stay right there in your menu bar, just a shortcut away. No browser switching. No interruptions.
+
+
+
PopClip extension
+
Select text with your mouse and translate with just one click. Just install our PopClip extension.
+
+
+
Dark theme
+
Translatium blends in perfectly with your system with beautiful light and dark themes.
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/_sass/bulma b/docs/_sass/bulma
new file mode 160000
index 00000000..85f61f2d
--- /dev/null
+++ b/docs/_sass/bulma
@@ -0,0 +1 @@
+Subproject commit 85f61f2dfd9786ce690189f95d4061159b0ceef5
diff --git a/docs/_sass/bulma.sass b/docs/_sass/bulma.sass
new file mode 100755
index 00000000..c9ade6c4
--- /dev/null
+++ b/docs/_sass/bulma.sass
@@ -0,0 +1,59 @@
+@import "./bulma/sass/utilities/initial-variables"
+@import "./bulma/sass/utilities/functions"
+
+// set font-weight to only 400, 600 (to load less font data)
+$weight-light: 400
+$weight-normal: 400
+$weight-medium: 400
+$weight-semibold: 600
+$weight-bold: 600
+
+$green: #43A047
+$blue: #43A047
+
+@import "./bulma/sass/utilities/derived-variables"
+
+$footer-background-color: #fff
+$dropdown-item-active-background-color: $background
+$dropdown-item-active-color: $scheme-invert
+
+@import "./bulma/bulma.sass"
+
+html
+ height: 100%
+
+body
+ display: flex
+ flex-direction: column
+ min-height: 100%
+ // fix BUG: columns.is-variable overflow on iOS Safari
+ // https://github.com/jgthms/bulma/issues/1540
+ overflow-x: hidden
+
+main
+ flex-grow: 1
+
+picture
+ line-height: 1
+
+.app-icon-header
+ width: 128px
+ height: 128px
+
+.demo-header
+ max-width: #{'min(100%, 500px)'}
+ max-height: 500px
+ width: auto
+ height: auto
+
+.demo-main
+ max-width: 500px
+ width: 100%
+
+.buttons
+ &.is-left-desktop
+ +desktop
+ justify-content: flex-start
+ &.is-right-desktop
+ +desktop
+ justify-content: flex-end
\ No newline at end of file
diff --git a/docs/assets/app.js b/docs/assets/app.js
new file mode 100644
index 00000000..deff7695
--- /dev/null
+++ b/docs/assets/app.js
@@ -0,0 +1,20 @@
+document.addEventListener('DOMContentLoaded', () => {
+ // https://bulma.io/documentation/components/navbar/
+ // Get all "navbar-burger" elements
+ const navbarBurgers = Array.prototype.slice.call(document.querySelectorAll('.burger'), 0);
+
+ // Check if there are any navbar burgers
+ if (navbarBurgers.length > 0) {
+ // Add a click event on each of them
+ navbarBurgers.forEach((el) => {
+ el.addEventListener('click', () => {
+ // Get the target from the "data-target" attribute
+ const { target } = el.dataset;
+ const targetEl = document.getElementById(target);
+ // Toggle the "is-active" class on both the "navbar-burger" and the "navbar-menu"
+ el.classList.toggle('is-active');
+ targetEl.classList.toggle('is-active');
+ });
+ });
+ }
+});
diff --git a/docs/assets/app.min.js b/docs/assets/app.min.js
new file mode 100644
index 00000000..569e0c1d
--- /dev/null
+++ b/docs/assets/app.min.js
@@ -0,0 +1 @@
+"use strict";document.addEventListener("DOMContentLoaded",function(){var t=Array.prototype.slice.call(document.querySelectorAll(".burger"),0);0PopClip extension to open Translatium with the selected text.
+
+
+Download Extension
+
+
+The extension requires Translatium v8.6.0 or higher.
+
+To install the extension, you need to have PopClip installed. Then, just download the file, open it and follow the instructions.
\ No newline at end of file
diff --git a/docs/privacy.md b/docs/privacy.md
new file mode 100644
index 00000000..acae22ac
--- /dev/null
+++ b/docs/privacy.md
@@ -0,0 +1,19 @@
+---
+layout: post
+id: privacy
+title: Privacy Policy
+---
+
+Translatium does not track you by any means.
+
+But we employ third party companies and individuals to provide our services. These third-parties have already confirmed their commitment to GDPR compliance and have access to your personal information only to perform these tasks on our behalf and are obligated not to disclose or use it for any other purpose. These services include:
+
+- [Cloudflare](https://fastspring.com/privacy/) - DNS, CDN and domain management (US)
+- [GitHub](https://help.github.com/articles/github-privacy-statement/) - software distribution, engineering tools (US)
+- [Google](https://policies.google.com/privacy?hl=en) - machine translation service (US)
+- [OCR.Space](https://ocr.space/privacypolicy) - OCR service (Germany)
+
+This Privacy Policy was last updated on September 28, 2020.
+
+## 10. Contact Us
+If you have any questions feel free to contact us via .
\ No newline at end of file
diff --git a/docs/support.md b/docs/support.md
new file mode 100644
index 00000000..22bb4309
--- /dev/null
+++ b/docs/support.md
@@ -0,0 +1,20 @@
+---
+layout: support
+id: support
+title: Support
+app_id: translatium
+---
+##### How many languages does Translatim support?
+You can find the list of supported languages [here](/languages).
+
+##### Does Translatim require Internet connection?
+Yes, most features of Translatium require Internet connection to work.
+
+##### Does Translatium support PopClip?
+Yes, it does. You can download the Translatium PopClip extension from [here](/popclip).
+
+##### Where can I download previous versions of Translatium?
+Even though previous versions of Translatium are no longer officially supported, you can still download them from [here](https://github.com/quanglam2807/translatium/releases).
+
+##### Is Translatium open source?
+Yes, you can find the source code on [GitHub](https://github.com/quanglam2807/translatium) under the MPL-2 license.
\ No newline at end of file
diff --git a/package.json b/package.json
index 85ce0d60..c79a8539 100644
--- a/package.json
+++ b/package.json
@@ -47,14 +47,14 @@
"cross-env": "7.0.2",
"del": "5.1.0",
"dotenv": "8.2.0",
- "electron": "8.5.1",
+ "electron": "8.5.2",
"electron-builder": "22.8.1",
"electron-notarize": "1.0.0",
"eslint": "6.8.0",
"eslint-config-airbnb": "18.2.0",
- "eslint-plugin-import": "2.22.0",
+ "eslint-plugin-import": "2.22.1",
"eslint-plugin-jsx-a11y": "6.3.1",
- "eslint-plugin-react": "7.20.6",
+ "eslint-plugin-react": "7.21.2",
"eslint-plugin-react-hooks": "1.7.0",
"glob": "7.1.6",
"greek-utils": "1.2.2",
@@ -63,7 +63,6 @@
"pouchdb-quick-search": "1.3.0",
"prop-types": "15.7.2",
"react": "16.13.1",
- "react-countdown": "2.2.1",
"react-dom": "16.13.1",
"react-redux": "7.2.1",
"react-scripts": "3.4.3",
diff --git a/popclip/Translatium/Config.plist b/popclip/Translatium/Config.plist
index a553095f..539f32a0 100755
--- a/popclip/Translatium/Config.plist
+++ b/popclip/Translatium/Config.plist
@@ -31,7 +31,7 @@
Check Installed
Link
- https://atomery.com/translatium/
+ https://translatiumapp.com/
Name
Translatium
diff --git a/public/config.js b/public/config.js
index 6b983db2..fc04b69a 100644
--- a/public/config.js
+++ b/public/config.js
@@ -2,7 +2,7 @@ const path = require('path');
const APP_NAME = 'Translatium';
const APP_TEAM = 'Quang Lam';
-const APP_URL = 'https://atomery.com/translatium';
+const APP_URL = 'https://translatiumapp.com';
const IMAGE_PATH = path.join(__dirname, '..', 'images');
diff --git a/public/electron.js b/public/electron.js
index ff73586f..0851da4a 100644
--- a/public/electron.js
+++ b/public/electron.js
@@ -95,7 +95,7 @@ if (!gotTheLock) {
// setImage after Tray instance is created to avoid
// "Segmentation fault (core dumped)" bug on Linux
// https://github.com/electron/electron/issues/22137#issuecomment-586105622
- // https://github.com/atomery/translatium/issues/164
+ // https://github.com/quanglam2807/translatium/issues/164
const tray = new Tray(nativeImage.createEmpty());
// icon template is not supported on Windows & Linux
const iconPath = path.resolve(__dirname, 'images', process.platform === 'darwin' ? 'menubarTemplate.png' : 'menubar.png');
diff --git a/public/libs/create-menu.js b/public/libs/create-menu.js
index b861ad69..e6f74910 100644
--- a/public/libs/create-menu.js
+++ b/public/libs/create-menu.js
@@ -10,7 +10,6 @@ const config = require('../config');
const sendToAllWindows = require('./send-to-all-windows');
const { getLocale } = require('./locales');
-const { getPreference } = require('./preferences');
const createMenu = () => {
const updaterEnabled = process.env.SNAP == null && !process.mas && !process.windowsStore;
@@ -144,7 +143,7 @@ const createMenu = () => {
submenu: [
{
label: getLocale('appNameSupport'),
- click: () => shell.openExternal('https://atomery.com/support?app=translatium'),
+ click: () => shell.openExternal('https://translatiumapp.com/support'),
},
{
label: getLocale('reportAnIssueViaGitHub'),
@@ -158,7 +157,6 @@ const createMenu = () => {
},
];
- const registered = getPreference('registered');
if (process.platform === 'darwin') {
template.unshift({
label: config.APP_NAME,
@@ -172,16 +170,6 @@ const createMenu = () => {
visible: updaterEnabled,
},
updaterMenuItem,
- {
- type: 'separator',
- visible: !process.mas,
- },
- {
- label: registered ? getLocale('registered') : getLocale('registration'),
- enabled: !registered,
- click: registered ? null : () => sendToAllWindows('open-license-registration-dialog'),
- visible: !process.mas,
- },
{ type: 'separator' },
{
label: getLocale('preferencesMenuItem'),
@@ -212,16 +200,6 @@ const createMenu = () => {
label: getLocale('about'),
click: () => sendToAllWindows('open-dialog-about'),
},
- {
- type: 'separator',
- visible: !process.windowsStore,
- },
- {
- label: registered ? getLocale('registered') : getLocale('registration'),
- enabled: !registered,
- click: registered ? null : () => sendToAllWindows('open-license-registration-dialog'),
- visible: !process.windowsStore,
- },
{
type: 'separator',
},
diff --git a/public/libs/locales/de/ui.json b/public/libs/locales/de/ui.json
index 9cdbfdee..9cb9197e 100644
--- a/public/libs/locales/de/ui.json
+++ b/public/libs/locales/de/ui.json
@@ -41,8 +41,6 @@
"noMatchingResults": "Keine passenden Ergebnisse",
"preferences": "Einstellungen",
"preferencesMenuItem": "Einstellungen...",
- "registered": "Registriert",
- "registration": "Registrierung...",
"ok": "OK",
"updateAvailable": "Ein Update ist verfügbar",
"updateAvailableDesc": "Ein Update ist verfügbar. Es wird gerade heruntergeladen. Wir werden Sie informieren, wenn es fertig ist.",
@@ -102,6 +100,7 @@
"translateWhenPressingEnter": "Bei Drücken der Eingabetaste übersetzen",
"showTransliteration": "Transliteration anzeigen",
"rateMacAppStore": "{appName} im Mac App Store bewerten",
+ "rateMicrosoftStore": "{appName} im Microsoft Store bewerten",
"displayLanguage": "Sprache anzeigen",
"close": "Schließen",
"general": "Allgemein",
@@ -126,15 +125,6 @@
"removeShortcut": "Kurzbefehl entfernen",
"cancel": "Abbrechen",
"popclipExtension": "PopClip-Erweiterung",
- "licenseRegistration": "Lizenzregistrierung",
- "licenseKey": "Lizenzschlüssel",
- "licenseContentText": "Um fortzufahren, erwerben Sie bitte einen unbefristeten Lizenzschlüssel ({price}) in unserem Shop.",
- "licenseHelper": "Wenn Sie {appName} bereits in unserem Shop gekauft haben, sollten Sie einen Lizenzschlüssel erhalten haben, der oben einzugeben ist.",
- "licenseRegistered": "Registrierung abgeschlossen! Vielen Dank für Ihre Unterstützung der Weiterentwicklung von {appName}.",
- "trialExpired": "Ihre Testphase ist abgelaufen.",
- "trialExpireIn": "Ihre Testphase läuft in {time} ab.",
- "visitStore": "Zum Shop...",
- "register": "Registrieren",
"history": "Verlauf",
"historyDesc": "Hier zuvor übersetzte Wörter und Redewendungen anzeigen.",
"clearHistory": "Verlauf löschen",
diff --git a/public/libs/locales/en/ui.json b/public/libs/locales/en/ui.json
index 31b973aa..b15b4c68 100644
--- a/public/libs/locales/en/ui.json
+++ b/public/libs/locales/en/ui.json
@@ -41,8 +41,6 @@
"noMatchingResults": "No Matching Results",
"preferences": "Preferences",
"preferencesMenuItem": "Preferences...",
- "registered": "Registered",
- "registration": "Registration...",
"ok": "OK",
"updateAvailable": "An Update is Available",
"updateAvailableDesc": "There is an available update. It is being downloaded. We will let you know when it is ready.",
@@ -102,6 +100,7 @@
"translateWhenPressingEnter": "Translate when pressing Enter",
"showTransliteration": "Show transliteration",
"rateMacAppStore": "Rate {appName} on Mac App Store",
+ "rateMicrosoftStore": "Rate {appName} on Microsoft Store",
"displayLanguage": "Display language",
"close": "Close",
"general": "General",
@@ -126,15 +125,6 @@
"removeShortcut": "Remove shortcut",
"cancel": "Cancel",
"popclipExtension": "PopClip Extension",
- "licenseRegistration": "License Registration",
- "licenseKey": "License key",
- "licenseContentText": "To continue, please purchase a perpetual license key ({price}) from our store.",
- "licenseHelper": "If you have already purchased {appName} from our store, you should have received a license key via email to enter above.",
- "licenseRegistered": "Registration Complete! Thank you for supporting the future development of {appName}.",
- "trialExpired": "Your trial period has expired.",
- "trialExpireIn": "Your trial period will expire in {time}.",
- "visitStore": "Visit Store...",
- "register": "Register",
"history": "History",
"historyDesc": "View previously translated words and phrases here.",
"clearHistory": "Clear history",
diff --git a/public/libs/locales/es/ui.json b/public/libs/locales/es/ui.json
index adb1698a..bbf14161 100644
--- a/public/libs/locales/es/ui.json
+++ b/public/libs/locales/es/ui.json
@@ -41,8 +41,6 @@
"noMatchingResults": "Sin resultados coincidentes",
"preferences": "Preferencias",
"preferencesMenuItem": "Preferencias...",
- "registered": "Registrado",
- "registration": "Registro...",
"ok": "Aceptar",
"updateAvailable": "Hay una actualización disponible",
"updateAvailableDesc": "Hay una actualización disponible. Se está descargando. Le avisaremos cuando esté lista.",
@@ -102,6 +100,7 @@
"translateWhenPressingEnter": "Traducir al pulsar Enter",
"showTransliteration": "Mostrar transliteración",
"rateMacAppStore": "Califique a {appName} en Mac App Store",
+ "rateMicrosoftStore": "Califique a {appName} en Microsoft Store",
"displayLanguage": "Mostrar idioma",
"close": "Cerrar",
"general": "General",
@@ -126,15 +125,6 @@
"removeShortcut": "Quitar acceso directo",
"cancel": "Cancelar",
"popclipExtension": "Extensión PopClip",
- "licenseRegistration": "Registro de licencia",
- "licenseKey": "Clave de licencia",
- "licenseContentText": "Para continuar, compre una clave de licencia perpetua por ({price}) en nuestra tienda.",
- "licenseHelper": "Si ya ha comprado {appName} en nuestra tienda, debería haber recibido una clave de licencia por correo electrónico para introducirla arriba.",
- "licenseRegistered": "¡Registro completado! Gracias por apoyar el desarrollo futuro de {appName}.",
- "trialExpired": "Su período de prueba ha terminado.",
- "trialExpireIn": "Su periodo de prueba terminará en {time}.",
- "visitStore": "Visite la tienda...",
- "register": "Registrarse",
"history": "Historial",
"historyDesc": "Vea aquí las palabras y frases traducidas anteriormente.",
"clearHistory": "Borrar historial",
diff --git a/public/libs/locales/fr/ui.json b/public/libs/locales/fr/ui.json
index 10bc97d6..1aba622e 100644
--- a/public/libs/locales/fr/ui.json
+++ b/public/libs/locales/fr/ui.json
@@ -41,8 +41,6 @@
"noMatchingResults": "Aucun résultat correspondant n'a été trouvé",
"preferences": "Préférences",
"preferencesMenuItem": "Préférences...",
- "registered": "Inscrit",
- "registration": "Inscription...",
"ok": "OK",
"updateAvailable": "Une mise à jour est disponible",
"updateAvailableDesc": "Il y a une mise à jour disponible. Elle est en cours de téléchargement. Nous vous informerons quand elle sera prête.",
@@ -102,6 +100,7 @@
"translateWhenPressingEnter": "Traduire lorsque vous appuyez sur Entrée",
"showTransliteration": "Afficher la translittération",
"rateMacAppStore": "Évaluez {appName} sur l'App Store Mac",
+ "rateMicrosoftStore": "Évaluez {appName} sur le Microsoft Store",
"displayLanguage": "Langue d'affichage",
"close": "Fermer",
"general": "Général",
@@ -126,15 +125,6 @@
"removeShortcut": "Supprimer le raccourci",
"cancel": "Annuler",
"popclipExtension": "Extension PopClip",
- "licenseRegistration": "Enregistrement de licence",
- "licenseKey": "Clé de licence",
- "licenseContentText": "Pour continuer, veuillez acheter une clé de licence perpétuelle ({price}) dans notre boutique.",
- "licenseHelper": "Si vous avez déjà acheté {appName} dans notre boutique, vous devriez avoir reçu une clé de licence par e-mail à entrer ci-dessus.",
- "licenseRegistered": "Enregistrement terminé ! Merci de soutenir le développement futur de {appName}.",
- "trialExpired": "Votre période d'essai a expiré.",
- "trialExpireIn": "Votre période d'essai expirera dans {time}.",
- "visitStore": "Visiter la boutique...",
- "register": "Enregistrer",
"history": "Historique",
"historyDesc": "Consultez les mots et phrases précédemment traduits ici.",
"clearHistory": "Effacer l'historique",
diff --git a/public/libs/locales/it/ui.json b/public/libs/locales/it/ui.json
index 2db4dd24..5c19a33e 100644
--- a/public/libs/locales/it/ui.json
+++ b/public/libs/locales/it/ui.json
@@ -41,8 +41,6 @@
"noMatchingResults": "Nessun risultato corrispondente",
"preferences": "Preferenze",
"preferencesMenuItem": "Preferenze...",
- "registered": "Registrato",
- "registration": "Registrazione...",
"ok": "OK",
"updateAvailable": "È disponibile un aggiornamento",
"updateAvailableDesc": "È presente un aggiornamento disponibile. È in fase di download. L'utente sarà avvisato quando sarà pronto.",
@@ -102,6 +100,7 @@
"translateWhenPressingEnter": "Tradurre alla pressione di Invio",
"showTransliteration": "Mostrare traslitterazione",
"rateMacAppStore": "Valutare {appName} su Mac App Store",
+ "rateMicrosoftStore": "Valutare {appName} su Microsoft Store",
"displayLanguage": "Visualizzare lingua",
"close": "Chiudere",
"general": "Generali",
@@ -126,15 +125,6 @@
"removeShortcut": "Rimuovere scelta rapida",
"cancel": "Annullare",
"popclipExtension": "Estensione PopClip",
- "licenseRegistration": "Registrazione licenza",
- "licenseKey": "Chiave di licenza",
- "licenseContentText": "Per continuare, acquistare una chiave di licenza perpetua ({price}) dal nostro store.",
- "licenseHelper": "Se ha già acquistato {appName} dal nostro store, l'utente dovrebbe avere ricevuto una chiave di licenza tramite e-mail da inserire sopra.",
- "licenseRegistered": "Registrazione completata! Grazie per avere supportato il futuro sviluppo di {appName}.",
- "trialExpired": "Il periodo di prova è scaduto.",
- "trialExpireIn": "Il periodo di prova scadrà tra {time}.",
- "visitStore": "Visitare store...",
- "register": "Registrarsi",
"history": "Cronologia",
"historyDesc": "Visualizzare qui parole e frasi tradotte in precedenza.",
"clearHistory": "Cancellare cronologia",
diff --git a/public/libs/locales/ko/ui.json b/public/libs/locales/ko/ui.json
index fec51594..1ed4de44 100644
--- a/public/libs/locales/ko/ui.json
+++ b/public/libs/locales/ko/ui.json
@@ -41,8 +41,6 @@
"noMatchingResults": "일치 결과 없음",
"preferences": "기본 설정",
"preferencesMenuItem": "기본 설정...",
- "registered": "등록됨",
- "registration": "등록...",
"ok": "확인",
"updateAvailable": "사용 가능한 업데이트가 있습니다",
"updateAvailableDesc": "사용 가능한 업데이트가 있습니다. 업데이트를 다운로드 중입니다. 준비되면 알려드리겠습니다.",
@@ -102,6 +100,7 @@
"translateWhenPressingEnter": "Enter 키를 누르면 번역",
"showTransliteration": "음역 표시",
"rateMacAppStore": "Mac App Store에서 {appName} 평가하기",
+ "rateMicrosoftStore": "Microsoft Store에서 {appName} 평가하기",
"displayLanguage": "표시 언어",
"close": "닫기",
"general": "일반",
@@ -126,15 +125,6 @@
"removeShortcut": "바로 가기 제거",
"cancel": "최소",
"popclipExtension": "PopClip 확장",
- "licenseRegistration": "라이선스 등록",
- "licenseKey": "라이선스 키",
- "licenseContentText": "계속하려면 스토어에서 영구 라이선스 키({price})를 구입하세요.",
- "licenseHelper": "이미 스토어에서 {appName} 구매를 하셨다면, 위에 입력할 라이선스 키가 이메일로 전송되었습니다.",
- "licenseRegistered": "등록이 완료되었습니다. {appName}의 향후 개발에 도움을 주셔서 감사합니다.",
- "trialExpired": "평가판 기간이 만료되었습니다.",
- "trialExpireIn": "평가판 기간이 {time} 후 만료됩니다.",
- "visitStore": "스토어 방문...",
- "register": "등록",
"history": "기록",
"historyDesc": "이전에 번역된 단어와 구를 여기서 보세요..",
"clearHistory": "기록 지우기",
diff --git a/public/libs/locales/ru/ui.json b/public/libs/locales/ru/ui.json
index b3e41898..388a6a38 100644
--- a/public/libs/locales/ru/ui.json
+++ b/public/libs/locales/ru/ui.json
@@ -41,8 +41,6 @@
"noMatchingResults": "Результатов не найдено",
"preferences": "Настройки",
"preferencesMenuItem": "Настройки…",
- "registered": "Зарегистрировано",
- "registration": "Регистрация...",
"ok": "OK",
"updateAvailable": "Есть обновление",
"updateAvailableDesc": "Загружается обновление. Мы сообщим, когда оно будет готово.",
@@ -102,6 +100,7 @@
"translateWhenPressingEnter": "Переводить по нажатию Enter",
"showTransliteration": "Показывать транслитерацию",
"rateMacAppStore": "Оценить {appName} в Mac App Store",
+ "rateMicrosoftStore": "Оценить {appName} в Microsoft Store",
"displayLanguage": "Язык интерфейса",
"close": "Закрыть",
"general": "Общие",
@@ -126,15 +125,6 @@
"removeShortcut": "Удалить сочетание клавиш",
"cancel": "Отмена",
"popclipExtension": "Расширение PopClip",
- "licenseRegistration": "Регистрация лицензии",
- "licenseKey": "Лицензионный ключ",
- "licenseContentText": "Чтобы продолжить, купите бессрочный лицензионный ключ ({price}) в нашем магазине.",
- "licenseHelper": "Если вы уже купили {appName} в нашем магазине, лицензионный ключ должен был прийти на адрес электронной почты, введенный выше.",
- "licenseRegistered": "Регистрация выполнена! Благодарим за поддержку в разработке {appName}.",
- "trialExpired": "Пробный период истек.",
- "trialExpireIn": "Пробный период истекает через {time}.",
- "visitStore": "Открыть магазин…",
- "register": "Зарегистрировать",
"history": "Журнал",
"historyDesc": "Здесь можно посмотреть ранее переведенные слова и фразы.",
"clearHistory": "Очистить журнал",
diff --git a/public/libs/locales/vi/ui.json b/public/libs/locales/vi/ui.json
index 5c31068f..919edfa1 100644
--- a/public/libs/locales/vi/ui.json
+++ b/public/libs/locales/vi/ui.json
@@ -41,8 +41,6 @@
"noMatchingResults": "Không tìm thấy Kết quả Phù hợp",
"preferences": "Tuỳ chọn",
"preferencesMenuItem": "Tuỳ chọn...",
- "registered": "Đã Đăng ký Bản quyền",
- "registration": "Đăng ký Bản quyền...",
"ok": "Đồng ý",
"updateAvailable": "Có Cập nhật mới",
"updateAvailableDesc": "Hiện có một bản cập nhật mới đang được tải về. Chúng tôi sẽ cho bạn biết khi nào nó sẵn sàng.\n",
@@ -102,6 +100,7 @@
"translateWhenPressingEnter": "Dịch khi nhấn Enter",
"showTransliteration": "Hiển thị phiên âm",
"rateMacAppStore": "Đánh giá {appName} trên Mac App Store",
+ "rateMicrosoftStore": "Đánh giá {appName} trên Microsoft Store",
"displayLanguage": "Ngôn ngữ hiển thị",
"close": "Đóng",
"general": "Cài đặt chung",
@@ -126,15 +125,6 @@
"removeShortcut": "Xoá phím tắt",
"cancel": "Huỷ",
"popclipExtension": "PopClip Extension",
- "licenseRegistration": "Đăng ký Bản quyền",
- "licenseKey": "Mã bản quyền",
- "licenseContentText": "Để tiếp tục, vui lòng mua bản quyền ({price}) từ cửa hàng của chúng tôi.",
- "licenseHelper": "Nếu bạn đã mua bản quyền {appName} từ cửa hàng của chúng tôi, tôi sẽ nhận được mã bản quyền thông qua email để nhập vào ô trên.",
- "licenseRegistered": "Đăng ký bản quyền thành công! Cảm ơn bạn đã ủng hộ {appName}.",
- "trialExpired": "Thời gian dùng thử của bạn đã kết thúc.",
- "trialExpireIn": "Thời gian dùng thử của bạn sẽ kết thúc trong {time}.",
- "visitStore": "Ghé thăm Cửa hàng...",
- "register": "Đăng ký",
"history": "Lịch sử",
"historyDesc": "Xem các từ và cụm từ đã dịch trong quá khứ tại đây.",
"clearHistory": "Xóa lịch sử",
diff --git a/public/libs/locales/zh-CN/ui.json b/public/libs/locales/zh-CN/ui.json
index 396a23e2..d77ae287 100644
--- a/public/libs/locales/zh-CN/ui.json
+++ b/public/libs/locales/zh-CN/ui.json
@@ -41,8 +41,6 @@
"noMatchingResults": "无匹配结果",
"preferences": "首选项",
"preferencesMenuItem": "首选项...",
- "registered": "已注册",
- "registration": "注册...",
"ok": "确定",
"updateAvailable": "有可用更新",
"updateAvailableDesc": "有可用更新,正在进行下载。我们将在其准备就绪时通知您。",
@@ -102,6 +100,7 @@
"translateWhenPressingEnter": "按 Enter 键时翻译",
"showTransliteration": "显示音译",
"rateMacAppStore": "在 Mac App Store 上评价 {appName}",
+ "rateMicrosoftStore": "在 Microsoft Store 上评价 {appName}",
"displayLanguage": "显示语言",
"close": "关闭",
"general": "常规",
@@ -126,15 +125,6 @@
"removeShortcut": "删除快捷键",
"cancel": "取消",
"popclipExtension": "PopClip 扩展",
- "licenseRegistration": "许可证注册",
- "licenseKey": "许可证密钥",
- "licenseContentText": "若要继续,请从我们的商店购买永久许可证密钥 ({price})。",
- "licenseHelper": "如果您已经从我们的商店购买 {appName},您应该已通过电子邮件收到一个许可证密钥,可在上方输入该密钥。",
- "licenseRegistered": "注册完成!感谢您支持 {appName} 的未来发展。",
- "trialExpired": "您的试用期已到期。",
- "trialExpireIn": "您的试用期将在 {time} 到期。",
- "visitStore": "访问商店...",
- "register": "注册",
"history": "历史记录",
"historyDesc": "在此处查看先前翻译的单词和短语。",
"clearHistory": "清除历史记录",
diff --git a/public/libs/preferences.js b/public/libs/preferences.js
index 5d08d065..b3b0d35c 100644
--- a/public/libs/preferences.js
+++ b/public/libs/preferences.js
@@ -4,13 +4,6 @@ const settings = require('electron-settings');
const sendToAllWindows = require('./send-to-all-windows');
const displayLanguages = require('./locales/languages');
-const shouldSkipLicenseCheck = () => {
- if (!app.isPackaged) return true;
-
- // skip license check if it is Mac App Store/Microsoft Store distribution
- return (process.windowsStore || process.mas);
-};
-
const getDefaultDisplayLanguage = () => {
const appLocale = app.getLocale(); // vi-VN, en-US, etc
// by default, strip away country code
@@ -57,7 +50,6 @@ const initCachedPreferences = () => {
ratingCardLastClicked: 0,
ratingCardDidRate: false,
recentLanguages: ['en', 'zh-CN'],
- registered: false,
showTransliteration: true,
themeSource: 'system',
translateClipboardOnShortcut: false,
@@ -70,9 +62,6 @@ const initCachedPreferences = () => {
if (cachedPreferences.displayLanguage === 'es-ES') {
cachedPreferences.displayLanguage = 'es';
}
- if (shouldSkipLicenseCheck()) {
- cachedPreferences.registered = true;
- }
};
const getPreferences = () => {
diff --git a/src/assets/singlebox-icon.png b/src/assets/singlebox-icon.png
deleted file mode 100644
index c8b783f2..00000000
Binary files a/src/assets/singlebox-icon.png and /dev/null differ
diff --git a/src/assets/switchbar-icon.png b/src/assets/switchbar-icon.png
deleted file mode 100644
index 3f85e27c..00000000
Binary files a/src/assets/switchbar-icon.png and /dev/null differ
diff --git a/src/components/app.js b/src/components/app.js
index 488d41da..96855483 100644
--- a/src/components/app.js
+++ b/src/components/app.js
@@ -20,11 +20,9 @@ import getLocale from '../helpers/get-locale';
import { screenResize } from '../state/root/screen/actions';
import { closeSnackbar } from '../state/root/snackbar/actions';
import { changeRoute } from '../state/root/router/actions';
-import { open as openDialogLicenseRegistration } from '../state/root/dialog-license-registration/actions';
import Alert from './root/alert';
import DialogAbout from './root/dialog-about';
-import DialogLicenseRegistration from './root/dialog-license-registration';
import Home from './pages/home';
import History from './pages/history';
@@ -42,8 +40,6 @@ import {
ROUTE_OCR,
} from '../constants/routes';
-import getTrialExpirationTime from '../helpers/get-trial-expiration-time';
-
const styles = (theme) => ({
container: {
height: '100vh',
@@ -99,13 +95,6 @@ const styles = (theme) => ({
});
class App extends React.Component {
- componentDidMount() {
- const { registered, onOpenDialogLicenseRegistration } = this.props;
- if (!registered && new Date() > getTrialExpirationTime()) {
- onOpenDialogLicenseRegistration();
- }
- }
-
componentWillUnmount() {
const { onScreenResize } = this.props;
window.removeEventListener('resize', () => onScreenResize(window.innerWidth));
@@ -181,7 +170,6 @@ class App extends React.Component {
)}
-
({
fullPageLoading: Boolean(state.pages.ocr && state.pages.ocr.status === 'loading'),
isFullScreen: state.general.isFullScreen,
- registered: state.preferences.registered,
route: state.router.route,
shouldShowBottomNav: true,
snackbarMessage: state.snackbar.message,
@@ -295,7 +280,6 @@ const actionCreators = {
screenResize,
changeRoute,
closeSnackbar,
- openDialogLicenseRegistration,
};
export default connectComponent(
diff --git a/src/components/pages/home/index.js b/src/components/pages/home/index.js
index be842850..b6bbea68 100644
--- a/src/components/pages/home/index.js
+++ b/src/components/pages/home/index.js
@@ -27,8 +27,6 @@ import ToggleStarBorder from '@material-ui/icons/StarBorder';
import Tooltip from '@material-ui/core/Tooltip';
import FileCopy from '@material-ui/icons/FileCopy';
-import Countdown from 'react-countdown';
-
import connectComponent from '../../../helpers/connect-component';
import getLocale from '../../../helpers/get-locale';
@@ -56,12 +54,9 @@ import {
endTextToSpeech,
} from '../../../state/pages/home/text-to-speech/actions';
import { updateLanguageListMode } from '../../../state/pages/language-list/actions';
-import { open as openDialogLicenseRegistration } from '../../../state/root/dialog-license-registration/actions';
import { ROUTE_LANGUAGE_LIST } from '../../../constants/routes';
-import getTrialExpirationTime from '../../../helpers/get-trial-expiration-time';
-
import Dictionary from './dictionary';
import History from './history';
import RatingCard from './rating-card';
@@ -180,14 +175,6 @@ const styles = (theme) => ({
toolbarIconButton: {
padding: theme.spacing(1),
},
- trialCountdown: {
- color: theme.palette.text.disabled,
- fontWeight: 400,
- fontSize: '0.8rem',
- marginTop: theme.spacing(1),
- marginLeft: 12,
- marginRight: 12,
- },
outputText: {
whiteSpace: 'pre-wrap',
},
@@ -219,43 +206,6 @@ class Home extends React.Component {
this.inputRef.current.select();
}
- renderCountdown() {
- const { classes, registered, onOpenDialogLicenseRegistration } = this.props;
-
- if (registered) return null;
-
- return (
-
- {
- if (completed) {
- // Render a completed state
- return getLocale('trialExpired');
- }
- // Render a countdown
- // eslint-disable-next-line react/jsx-one-expression-per-line
- return getLocale('trialExpireIn').replace('{time}', `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`);
- }}
- onComplete={() => {
- onOpenDialogLicenseRegistration();
- }}
- onMount={({ completed }) => {
- if (completed) {
- onOpenDialogLicenseRegistration();
- }
- }}
- />
-
- );
- }
-
renderOutput() {
const {
classes,
@@ -383,7 +333,6 @@ class Home extends React.Component {
{output.outputDict && output.source === 'translate.googleapis.com' && }
- {this.renderCountdown()}
);
}
@@ -661,7 +610,6 @@ Home.propTypes = {
onChangeRoute: PropTypes.func.isRequired,
onEndTextToSpeech: PropTypes.func.isRequired,
onLoadImage: PropTypes.func.isRequired,
- onOpenDialogLicenseRegistration: PropTypes.func.isRequired,
onOpenSnackbar: PropTypes.func.isRequired,
onStartTextToSpeech: PropTypes.func.isRequired,
onSwapLanguages: PropTypes.func.isRequired,
@@ -674,7 +622,6 @@ Home.propTypes = {
onUpdateOutputLang: PropTypes.func.isRequired,
output: PropTypes.object,
outputLang: PropTypes.string.isRequired,
- registered: PropTypes.bool.isRequired,
showTransliteration: PropTypes.bool.isRequired,
textToSpeechPlaying: PropTypes.bool.isRequired,
translateWhenPressingEnter: PropTypes.bool.isRequired,
@@ -686,7 +633,6 @@ const mapStateToProps = (state) => ({
inputText: state.pages.home.inputText,
output: state.pages.home.output,
outputLang: state.preferences.outputLang,
- registered: state.preferences.registered,
showTransliteration: state.preferences.showTransliteration,
textToSpeechPlaying: state.pages.home.textToSpeech.textToSpeechPlaying,
translateWhenPressingEnter: state.preferences.translateWhenPressingEnter,
@@ -696,7 +642,6 @@ const actionCreators = {
changeRoute,
endTextToSpeech,
loadImage,
- openDialogLicenseRegistration,
openSnackbar,
startTextToSpeech,
swapLanguages,
diff --git a/src/components/pages/home/rating-card.js b/src/components/pages/home/rating-card.js
index 7e677e3b..73a7b7a4 100644
--- a/src/components/pages/home/rating-card.js
+++ b/src/components/pages/home/rating-card.js
@@ -32,7 +32,7 @@ const RatingCard = ({
ratingCardLastClicked,
ratingCardDidRate,
}) => {
- if (!window.process.mas) return null;
+ if (!window.process.mas && !window.process.windowsStore) return null;
// time gap between rating card request
// 3 months if user has rated the app, 1 week if user has not
@@ -44,20 +44,38 @@ const RatingCard = ({
return (
-
+ {window.process.mas && (
+
+ )}
+ {window.process.windowsStore && (
+
+ )}