From c36002d85192a38ddc4418f477996d8f9fabb3f3 Mon Sep 17 00:00:00 2001 From: djoate <56777051+djoate@users.noreply.github.com> Date: Mon, 18 Nov 2019 00:09:19 +0000 Subject: [PATCH 01/16] Add jekyll-simple-i18n plugin with example Adds in support for https://github.com/signalapp/jekyll-simple-i18n. The plugin did not work with the github-pages gem, so github-pages was switched with jekyll (which is what the current i18n branch does anyway). --- .gitignore | 1 + Gemfile | 3 +- Gemfile.lock | 194 +------------------------- _config.yml | 3 +- _data/language_map.yml | 47 +++++++ _data/languages/en.yml | 13 ++ _data/languages/es.yml | 13 ++ _plugins/hreflang-tag.rb | 35 +++++ _plugins/translate-tag.rb | 38 +++++ _plugins/translated-page-generator.rb | 47 +++++++ _plugins/weblate-source-file.rb | 49 +++++++ index.html | 5 +- 12 files changed, 256 insertions(+), 192 deletions(-) create mode 100644 _data/language_map.yml create mode 100644 _data/languages/en.yml create mode 100644 _data/languages/es.yml create mode 100644 _plugins/hreflang-tag.rb create mode 100644 _plugins/translate-tag.rb create mode 100644 _plugins/translated-page-generator.rb create mode 100644 _plugins/weblate-source-file.rb diff --git a/.gitignore b/.gitignore index e6cb179f..4170d373 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ font/assets/ font/_sass/ font/.fontcustom-manifest.json assets/webfonts/ptio-font-preview.html +weblate-source-file.yml diff --git a/Gemfile b/Gemfile index 70f8d954..8410b95b 100644 --- a/Gemfile +++ b/Gemfile @@ -1,11 +1,12 @@ source "https://rubygems.org" # Install github-pages gem (https://jekyllrb.com/docs/github-pages/) -gem "github-pages", group: :jekyll_plugins +gem "jekyll", group: :jekyll_plugins # Plugins group :jekyll_plugins do # example: gem "jekyll-feed", "~> 0.6" + gem "jekyll-sitemap" end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem diff --git a/Gemfile.lock b/Gemfile.lock index 05594934..8ec995d9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,89 +1,16 @@ GEM remote: https://rubygems.org/ specs: - activesupport (4.2.11.1) - i18n (~> 0.7) - minitest (~> 5.1) - thread_safe (~> 0.3, >= 0.3.4) - tzinfo (~> 1.1) - addressable (2.6.0) - public_suffix (>= 2.0.2, < 4.0) - coffee-script (2.4.1) - coffee-script-source - execjs - coffee-script-source (1.11.1) + addressable (2.7.0) + public_suffix (>= 2.0.2, < 5.0) colorator (1.1.0) - commonmarker (0.17.13) - ruby-enum (~> 0.5) concurrent-ruby (1.1.5) - dnsruby (1.61.3) - addressable (~> 2.5) em-websocket (0.5.1) eventmachine (>= 0.12.9) http_parser.rb (~> 0.6.0) - ethon (0.12.0) - ffi (>= 1.3.0) eventmachine (1.2.7) - execjs (2.7.0) - faraday (0.15.4) - multipart-post (>= 1.2, < 3) - ffi (1.11.1) + ffi (1.11.2) forwardable-extended (2.6.0) - gemoji (3.0.1) - github-pages (198) - activesupport (= 4.2.11.1) - github-pages-health-check (= 1.16.1) - jekyll (= 3.8.5) - jekyll-avatar (= 0.6.0) - jekyll-coffeescript (= 1.1.1) - jekyll-commonmark-ghpages (= 0.1.5) - jekyll-default-layout (= 0.1.4) - jekyll-feed (= 0.11.0) - jekyll-gist (= 1.5.0) - jekyll-github-metadata (= 2.12.1) - jekyll-mentions (= 1.4.1) - jekyll-optional-front-matter (= 0.3.0) - jekyll-paginate (= 1.1.0) - jekyll-readme-index (= 0.2.0) - jekyll-redirect-from (= 0.14.0) - jekyll-relative-links (= 0.6.0) - jekyll-remote-theme (= 0.3.1) - jekyll-sass-converter (= 1.5.2) - jekyll-seo-tag (= 2.5.0) - jekyll-sitemap (= 1.2.0) - jekyll-swiss (= 0.4.0) - jekyll-theme-architect (= 0.1.1) - jekyll-theme-cayman (= 0.1.1) - jekyll-theme-dinky (= 0.1.1) - jekyll-theme-hacker (= 0.1.1) - jekyll-theme-leap-day (= 0.1.1) - jekyll-theme-merlot (= 0.1.1) - jekyll-theme-midnight (= 0.1.1) - jekyll-theme-minimal (= 0.1.1) - jekyll-theme-modernist (= 0.1.1) - jekyll-theme-primer (= 0.5.3) - jekyll-theme-slate (= 0.1.1) - jekyll-theme-tactile (= 0.1.1) - jekyll-theme-time-machine (= 0.1.1) - jekyll-titles-from-headings (= 0.5.1) - jemoji (= 0.10.2) - kramdown (= 1.17.0) - liquid (= 4.0.0) - listen (= 3.1.5) - mercenary (~> 0.3) - minima (= 2.5.0) - nokogiri (>= 1.8.5, < 2.0) - rouge (= 2.2.1) - terminal-table (~> 1.4) - github-pages-health-check (1.16.1) - addressable (~> 2.3) - dnsruby (~> 1.60) - octokit (~> 4.0) - public_suffix (~> 3.0) - typhoeus (~> 1.3) - html-pipeline (2.12.0) - activesupport (>= 2) - nokogiri (>= 1.4) http_parser.rb (0.6.0) i18n (0.9.5) concurrent-ruby (~> 1.0) @@ -100,97 +27,12 @@ GEM pathutil (~> 0.9) rouge (>= 1.7, < 4) safe_yaml (~> 1.0) - jekyll-avatar (0.6.0) - jekyll (~> 3.0) - jekyll-coffeescript (1.1.1) - coffee-script (~> 2.2) - coffee-script-source (~> 1.11.1) - jekyll-commonmark (1.3.1) - commonmarker (~> 0.14) - jekyll (>= 3.7, < 5.0) - jekyll-commonmark-ghpages (0.1.5) - commonmarker (~> 0.17.6) - jekyll-commonmark (~> 1) - rouge (~> 2) - jekyll-default-layout (0.1.4) - jekyll (~> 3.0) - jekyll-feed (0.11.0) - jekyll (~> 3.3) - jekyll-gist (1.5.0) - octokit (~> 4.2) - jekyll-github-metadata (2.12.1) - jekyll (~> 3.4) - octokit (~> 4.0, != 4.4.0) - jekyll-mentions (1.4.1) - html-pipeline (~> 2.3) - jekyll (~> 3.0) - jekyll-optional-front-matter (0.3.0) - jekyll (~> 3.0) - jekyll-paginate (1.1.0) - jekyll-readme-index (0.2.0) - jekyll (~> 3.0) - jekyll-redirect-from (0.14.0) - jekyll (~> 3.3) - jekyll-relative-links (0.6.0) - jekyll (~> 3.3) - jekyll-remote-theme (0.3.1) - jekyll (~> 3.5) - rubyzip (>= 1.2.1, < 3.0) jekyll-sass-converter (1.5.2) sass (~> 3.4) - jekyll-seo-tag (2.5.0) - jekyll (~> 3.3) jekyll-sitemap (1.2.0) jekyll (~> 3.3) - jekyll-swiss (0.4.0) - jekyll-theme-architect (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-cayman (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-dinky (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-hacker (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-leap-day (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-merlot (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-midnight (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-minimal (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-modernist (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-primer (0.5.3) - jekyll (~> 3.5) - jekyll-github-metadata (~> 2.9) - jekyll-seo-tag (~> 2.0) - jekyll-theme-slate (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-tactile (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-time-machine (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-titles-from-headings (0.5.1) - jekyll (~> 3.3) jekyll-watch (2.2.1) listen (~> 3.0) - jemoji (0.10.2) - gemoji (~> 3.0) - html-pipeline (~> 2.2) - jekyll (~> 3.0) kramdown (1.17.0) liquid (4.0.0) listen (3.1.5) @@ -198,51 +40,27 @@ GEM rb-inotify (~> 0.9, >= 0.9.7) ruby_dep (~> 1.2) mercenary (0.3.6) - mini_portile2 (2.4.0) - minima (2.5.0) - jekyll (~> 3.5) - jekyll-feed (~> 0.9) - jekyll-seo-tag (~> 2.1) - minitest (5.11.3) - multipart-post (2.1.1) - nokogiri (1.10.4) - mini_portile2 (~> 2.4.0) - octokit (4.14.0) - sawyer (~> 0.8.0, >= 0.5.3) pathutil (0.16.2) forwardable-extended (~> 2.6) public_suffix (3.1.1) rb-fsevent (0.10.3) rb-inotify (0.10.0) ffi (~> 1.0) - rouge (2.2.1) - ruby-enum (0.7.2) - i18n + rouge (3.11.0) ruby_dep (1.5.0) - rubyzip (1.2.3) safe_yaml (1.0.5) sass (3.7.4) sass-listen (~> 4.0.0) sass-listen (4.0.0) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) - sawyer (0.8.2) - addressable (>= 2.3.5) - faraday (> 0.8, < 2.0) - terminal-table (1.8.0) - unicode-display_width (~> 1.1, >= 1.1.1) - thread_safe (0.3.6) - typhoeus (1.3.1) - ethon (>= 0.9.0) - tzinfo (1.2.5) - thread_safe (~> 0.1) - unicode-display_width (1.6.0) PLATFORMS ruby DEPENDENCIES - github-pages + jekyll + jekyll-sitemap tzinfo-data BUNDLED WITH diff --git a/_config.yml b/_config.yml index 25a9c243..22468756 100644 --- a/_config.yml +++ b/_config.yml @@ -7,7 +7,8 @@ sass: style: compressed plugins: - jekyll-sitemap +plugins_dir: "./_plugins" sitemap: file: "/sitemap.xml" include: [".well-known"] -exclude: ["font", "vendor"] +exclude: ["font", "vendor","weblate-source-file.yml"] diff --git a/_data/language_map.yml b/_data/language_map.yml new file mode 100644 index 00000000..9deecc2f --- /dev/null +++ b/_data/language_map.yml @@ -0,0 +1,47 @@ +--- +af: "Afrikaans" +az: "Azərbaycanca" +bg: "Български" +ca: "Català" +cs: "Česky" +da: "Dansk" +de: "Deutsch" +el: "Ελληνικά" +en: "English" +es: "Español" +et: "esti" +fa: "فارسی" +fi: "suomi" +fil: "Pilipino" +fr: "Français" +ga: "Gaeilge" +hr: "Hrvatski" +hu: "Magyar" +id: "Bahasa Indonesia" +it: "Italiano" +ja: "日本語" +kk: "Қазақ" +ko: "한국어" +lt: "Lietuviškai" +lv: "Latviešu" +mk: "Македонски" +ms: "Bahasa Melayu" +nb: "Norsk" +nl: "Nederlands" +pl: "Polski" +pt_BR: "Português (br)" +pt_PT: "Português (pt)" +ro: "Română" +ru: "Pусский" +sk: "Slovenčina" +sl: "Slovenščina" +sr: "српски" +sv: "svensk" +sw: "Kiswahili" +th: "ภาษาไทย" +tr: "Türkçe" +uk: "Українська" +uz: "O'zbekcha" +vi: "Tiếng Việt" +zh_CN: "简体中文" +zh_TW: "繁體中文" diff --git a/_data/languages/en.yml b/_data/languages/en.yml new file mode 100644 index 00000000..05e6d46b --- /dev/null +++ b/_data/languages/en.yml @@ -0,0 +1,13 @@ +--- +sponsors: | + Sponsors + +new: | + New! + +showcase_your_brand_as_a_sponsor_of_privacytools_here_and_support_our_mission_of_creating_a_world_fre: | + Showcase your brand as a sponsor of PrivacyTools here and support our mission of creating a world free of mass surveillance! + +learn_more: | + Learn more... + diff --git a/_data/languages/es.yml b/_data/languages/es.yml new file mode 100644 index 00000000..56181882 --- /dev/null +++ b/_data/languages/es.yml @@ -0,0 +1,13 @@ +--- +sponsors: | + Patrocinadores + +new: | + Nuevo! + +showcase_your_brand_as_a_sponsor_of_privacytools_here_and_support_our_mission_of_creating_a_world_fre: | + Presente su marca como patrocinador de PrivacyTools aquí y apoye nuestra misión de crear un mundo libre de vigilancia masiva! + +learn_more: | + Conozca más... + diff --git a/_plugins/hreflang-tag.rb b/_plugins/hreflang-tag.rb new file mode 100644 index 00000000..4ebf3ab2 --- /dev/null +++ b/_plugins/hreflang-tag.rb @@ -0,0 +1,35 @@ +# Copyright 2019 Signal +# +# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +module Jekyll + + class HreflangTag < Liquid::Tag + def initialize(tag_name, text, tokens) + super + end + + def render(context) + page = context.environments.first["page"] + site = context.registers[:site] + + if page["translate"] + dir = page["src_dir"].nil? ? page["dir"] : page["src_dir"] + hreflangs = %{} + + site.data["languages"].each_key do |language| + hreflangs << %{} + end + end + + hreflangs + end + end + +end + +Liquid::Template.register_tag('hreflang', Jekyll::HreflangTag) diff --git a/_plugins/translate-tag.rb b/_plugins/translate-tag.rb new file mode 100644 index 00000000..51fecec2 --- /dev/null +++ b/_plugins/translate-tag.rb @@ -0,0 +1,38 @@ +# Copyright 2019 Signal +# +# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +module Jekyll + + class TranslateTag < Liquid::Tag + attr_reader :text, :weblate_id + + def initialize(tag_name, text, tokens) + super + @text = text.strip + @weblate_id = Weblate::ID.get(text) + end + + def render(context) + page_language = context.environments.first["page"]["language"] + site = context.registers[:site] + + if page_language.nil? + Weblate::SourceFile.add_entry(weblate_id, text) + + text + else + translated_string = site.data["languages"][page_language][weblate_id] + + translated_string.nil? ? text : translated_string.strip + end + end + end + +end + +Liquid::Template.register_tag('translate', Jekyll::TranslateTag) diff --git a/_plugins/translated-page-generator.rb b/_plugins/translated-page-generator.rb new file mode 100644 index 00000000..af47b983 --- /dev/null +++ b/_plugins/translated-page-generator.rb @@ -0,0 +1,47 @@ +# Copyright 2019 Signal +# +# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +module Jekyll + + class TranslatedPage < Page + def initialize(site, base, dir, name) + @site, @base, @dir, @name = site, base, dir, name + + self.process(@name) + self.data ||= {} + end + end + + class TranslatedPageGenerator < Generator + def generate(site) + pages_to_translate = site.pages.select { |page| page.data["translate"] } + + pages_to_translate.each do |page| + page_title = page.data['title'] + page_title_weblate_id = Weblate::ID.get(page_title) + + Weblate::SourceFile.add_entry(page_title_weblate_id, page_title) + + site.data["languages"].each_key do |language| + translated_page = Jekyll::TranslatedPage.new(site, site.source, page.dir, page.name) + translated_page_title = site.data["languages"][language][page_title_weblate_id] + + translated_page.data = page.data.clone + translated_page.data['title'] = translated_page_title.nil? ? page_title : translated_page_title.strip + translated_page.data['permalink'] = "#{language}/#{page.dir}/#{page.name}" + translated_page.data['src_dir'] = page.dir + translated_page.data['language'] = language + translated_page.content = page.content + + site.pages << translated_page + end + end + end + end + +end diff --git a/_plugins/weblate-source-file.rb b/_plugins/weblate-source-file.rb new file mode 100644 index 00000000..d71fc994 --- /dev/null +++ b/_plugins/weblate-source-file.rb @@ -0,0 +1,49 @@ +# Copyright 2019 Signal +# +# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +module Weblate + + class ID + def self.get(source_text) + source_text.nil? ? source_text : source_text.strip[0..100].gsub(/[^\w\d\s]/, '').tr(' ', '_').downcase + end + end + + class SourceFile + class << self + def add_entry(weblate_id, source_text) + unless id_already_exists?(weblate_id) or source_text.nil? + new_entry = <<-YAML +#{weblate_id}: | + #{source_text} + + YAML + + File.write(weblate_source_location, new_entry, mode: 'a') + end + end + + def id_already_exists?(weblate_id) + File.readlines(weblate_source_location).grep(/^#{weblate_id}: \|$/).any? + end + + def refresh + File.write(weblate_source_location, "---\n") + end + + def weblate_source_location + "#{__dir__}/../weblate-source-file.yml" + end + end + end + +end + +Jekyll::Hooks.register :site, :after_init do + Weblate::SourceFile.refresh +end diff --git a/index.html b/index.html index cdb2ba37..c004650a 100644 --- a/index.html +++ b/index.html @@ -1,14 +1,15 @@ --- layout: default +translate: true --- {% include sections/header.html %} {% include sections/resources.html %} -
Prefer the classic site? View a single-page layout.
+{% translate Prefer the classic site? View a single-page layout.%}
{% translate Prefer the classic site? View a single-page layout.%}
diff --git a/weblate-source-file.yml b/weblate-source-file.yml index ca5ddb55..93c6c75e 100644 --- a/weblate-source-file.yml +++ b/weblate-source-file.yml @@ -1,4 +1,7 @@ --- +Privacy_Tools: | + Privacy Tools + Prefer_the_classic_site?_View_a_singlepage_layout.: | Prefer the classic site? View a single-page layout. @@ -59,6 +62,3 @@ Prefer_the_classic_site?_View_a_singlepage_layout.: | Prefer_the_classic_site?_View_a_singlepage_layout.: | Prefer the classic site? View a single-page layout. -Prefer_the_classic_site?_View_a_singlepage_layout.: | - Prefer the classic site? View a single-page layout. - -- 2.47.2 From cab6bd18b81483e4c6f2a826ecdf1c2f18316538 Mon Sep 17 00:00:00 2001 From: djoate <56777051+djoate@users.noreply.github.com> Date: Mon, 18 Nov 2019 23:09:39 -0500 Subject: [PATCH 04/16] Add support for translating page.description --- _plugins/translated-page-generator.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/_plugins/translated-page-generator.rb b/_plugins/translated-page-generator.rb index af47b983..73279ae8 100644 --- a/_plugins/translated-page-generator.rb +++ b/_plugins/translated-page-generator.rb @@ -24,15 +24,20 @@ module Jekyll pages_to_translate.each do |page| page_title = page.data['title'] page_title_weblate_id = Weblate::ID.get(page_title) + page_description = page.data['description'] + page_description_weblate_id = Weblate::ID.get(page_description) Weblate::SourceFile.add_entry(page_title_weblate_id, page_title) + Weblate::SourceFile.add_entry(page_description_weblate_id, page_description) site.data["languages"].each_key do |language| translated_page = Jekyll::TranslatedPage.new(site, site.source, page.dir, page.name) translated_page_title = site.data["languages"][language][page_title_weblate_id] + translated_page_description = site.data["languages"][language][page_description_weblate_id] translated_page.data = page.data.clone translated_page.data['title'] = translated_page_title.nil? ? page_title : translated_page_title.strip + translated_page.data['description'] = translated_page_description.nil? ? page_description : translated_page_description.strip translated_page.data['permalink'] = "#{language}/#{page.dir}/#{page.name}" translated_page.data['src_dir'] = page.dir translated_page.data['language'] = language -- 2.47.2 From 3abed603b5d5266cb7786470787d11f842c92c91 Mon Sep 17 00:00:00 2001 From: djoate <56777051+djoate@users.noreply.github.com> Date: Mon, 18 Nov 2019 23:10:33 -0500 Subject: [PATCH 05/16] Translate a part of providers page --- _data/languages/es.yml | 36 ++++++++++++++++++++++++++++++++++ pages/providers.html | 25 ++++++++++++------------ weblate-source-file.yml | 43 ++++++++++++++++++++++++++++++++++++----- 3 files changed, 87 insertions(+), 17 deletions(-) diff --git a/_data/languages/es.yml b/_data/languages/es.yml index c35cc4fe..6efcd784 100644 --- a/_data/languages/es.yml +++ b/_data/languages/es.yml @@ -8,6 +8,9 @@ Prefer_the_classic_site?_View_a_singlepage_layout.: | Providers: | Proveedores +Theres_a_ton_of_people_providing_services_online._Discover_which_ones_you_should_avoid_and_our_recom: | + Hay un montón de gente que presta servicios en línea. Descubra cuáles debe evitar y nuestras recomendaciones para una variedad de servicios. + Discover_privacycentric_online_services_including_email_providers_VPN_operators_DNS_administrator: | Descubra servicios en línea centrados en la privacidad, incluyendo proveedores de correo electrónico, operadores de VPN, administradores de DNS y mucho más! @@ -56,3 +59,36 @@ Showcase_your_brand_as_a_sponsor_of_PrivacyTools_here_and_support_our_mission_of Learn_more...: | Aprenda más... +Services: | + Servicios + +Click_on_whatever_service_you_need_to_view_our_recommendations.: | + Haga clic en cualquier servicio que necesite para ver nuestras recomendaciones. + +Cloud_Storage: | + Servidor Cloud + +DNS: | + DNS + +Email: | + Correo electrónico + +Hosting: | + Alojamiento + +Pastebins: | + Pastebins + +Search_Engines: | + Motores de Búsqueda + +Social_Networks: | + Redes Sociales + +Social_News_Aggregators: | + Noticias Sociales Agregadores + +VPN: | + RPV + diff --git a/pages/providers.html b/pages/providers.html index e78f9a4a..f17d2f86 100644 --- a/pages/providers.html +++ b/pages/providers.html @@ -1,25 +1,26 @@ --- layout: page permalink: /providers/ -title: "Providers" +title: Providers description: "There's a ton of people providing services online. Discover which ones you should avoid and our recommendations for a variety of services." +translate: true --- -Click on whatever service you need to view our recommendations.
+{% translate Click on whatever service you need to view our recommendations.%}
{% translate Prefer the classic site? View a single-page layout.%}
+{% t Prefer the classic site? View a single-page layout.%}
{% translate Click on whatever service you need to view our recommendations.%}
+{% t Click on whatever service you need to view our recommendations.%}
This also affects Windows 10, but it doesn't expose this information or mitigation instructions as easily. MacOS users check How to enable full mitigation for Microarchitectural Data Sampling (MDS) vulnerabilities on Apple Support.
-When running a enough recent Linux kernel, you can check the CPU vulnerabilities it detects by tail -n +1 /sys/devices/system/cpu/vulnerabilities/*
. By using tail -n +1
instead of cat
, the file names are also visible.
When running a recent enough Linux kernel, you can check the CPU vulnerabilities it detects by tail -n +1 /sys/devices/system/cpu/vulnerabilities/*
. By using tail -n +1
instead of cat
, the file names are also visible.
In case you have an Intel CPU, you may notice "SMT vulnerable" display after running the tail
command. To mitigate this, disable hyper-threading from the UEFI/BIOS. You can also take the following mitigation steps below if your system/distribution uses GRUB and supports /etc/default/grub.d/
:
--
2.47.2
From 0cb341a673e013fed52104147f8445040ed4bb30 Mon Sep 17 00:00:00 2001
From: nitrohorse <1514352+nitrohorse@users.noreply.github.com>
Date: Sat, 23 Nov 2019 21:16:11 -0800
Subject: [PATCH 13/16] Add a link to audit for Standard Notes (#1512)
---
_includes/sections/notebooks.html | 2 +-
_includes/sections/teamchat.html | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/_includes/sections/notebooks.html b/_includes/sections/notebooks.html
index 9930001b..9ebd9de3 100644
--- a/_includes/sections/notebooks.html
+++ b/_includes/sections/notebooks.html
@@ -24,7 +24,7 @@ chrome="https://chrome.google.com/webstore/detail/joplin-web-clipper/alofnhikmmk
{% include cardv2.html
title="Standard Notes"
image="/assets/img/tools/StandardNotes.png"
-description="Standard Notes is a simple and private notes app that makes your notes easy and available everywhere you are. Features end-to-end encryption on every platform, and a powerful desktop experience with themes and custom editors."
+description='Standard Notes is a simple and private notes app that makes your notes easy and available everywhere you are. Features end-to-end encryption on every platform, and a powerful desktop experience with themes and custom editors. It has also been independently audited (PDF).'
website="https://standardnotes.org/"
github="https://github.com/standardnotes"
windows="https://standardnotes.org/#get-started"
diff --git a/_includes/sections/teamchat.html b/_includes/sections/teamchat.html
index 9c4e6a8f..064778e6 100644
--- a/_includes/sections/teamchat.html
+++ b/_includes/sections/teamchat.html
@@ -43,7 +43,7 @@
include cardv2.html
title="Keybase"
image="/assets/img/tools/keybase.png"
- description='Keybase provides a hosted team chat with end-to-end encryption. It has also been indepedently audited (PDF).'
+ description='Keybase provides a hosted team chat with end-to-end encryption. It has also been independently audited (PDF).'
labels="warning:Warning:The server side of Keybase runs on proprietary code and is centralized."
website="https://keybase.io/"
forum="https://forum.privacytools.io/t/discussion-keybase/1224"
--
2.47.2
From 31e1300591bf0c92ebae9aa596ed35b9c2b3cfcc Mon Sep 17 00:00:00 2001
From: nitrohorse <1514352+nitrohorse@users.noreply.github.com>
Date: Sat, 23 Nov 2019 21:27:46 -0800
Subject: [PATCH 14/16] mailbox.org no long accepts Bitcoin (#1513)
---
_includes/sections/email-providers.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/_includes/sections/email-providers.html b/_includes/sections/email-providers.html
index a0e9b178..d775478c 100644
--- a/_includes/sections/email-providers.html
+++ b/_includes/sections/email-providers.html
@@ -78,7 +78,7 @@
ICANN DNS Provider | +DNS Provider | Server Locations | Privacy Policy | Type | @@ -570,7 +540,7 @@
---|