i18n: Proposal to use jekyll-simple-i18n plugin instead of jekyll-multiple-languages #1503

Closed
djoate wants to merge 9 commits from i18n-simple into master
17 changed files with 564 additions and 230 deletions

1
.gitignore vendored
View File

@ -6,3 +6,4 @@ font/assets/
font/_sass/
font/.fontcustom-manifest.json
assets/webfonts/ptio-font-preview.html
# weblate-source-file.yml

View File

@ -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

View File

@ -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

View File

@ -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"]

47
_data/language_map.yml Normal file
View File

@ -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: "繁體中文"

106
_data/languages/es.yml Normal file
View File

@ -0,0 +1,106 @@
---
Privacy_Tools: |
Privacy Tools
Prefer_the_classic_site?_View_a_singlepage_layout.: |
¿Prefieres el sitio clásico? Ver un diseño de una sola página.
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!
Learn_More: |
Aprenda Más
Web_Browsers: |
Navegadores Web
Find_a_web_browser_that_respects_your_privacy_and_discover_how_to_harden_your_browser_against_tracki: |
Encuentre un navegador web que respete su privacidad y descubra cómo proteger su navegador contra el rastreo y las fugas.
Software: |
Software
Discover_a_variety_of_open_source_software_built_to_protect_your_privacy_and_keep_your_digital_data_s: |
Descubra una variedad de software de código abierto creado para proteger su privacidad y mantener sus datos digitales seguros.
Operating_Systems: |
Sistemas Operativos
Find_out_how_your_operating_system_is_compromising_your_privacy_and_what_simple_alternatives_exist.: |
Descubra cómo su sistema operativo está comprometiendo su privacidad y qué alternativas sencillas existen.
PrivacyTools_Services: |
Servicios de PrivacyTools
The_PrivacyTools_team_is_proud_to_launch_a_variety_of_privacycentric_online_services_including_a_Ma: |
El equipo de PrivacyTools se enorgullece de lanzar una variedad de servicios en línea centrados en la privacidad, incluyendo una instancia de Mastodon, un motor de búsqueda y mucho más.
Donate: |
Donaciones
We_cant_operate_this_site_without_the_generous_contributions_we_receive_from_our_viewers._If_you_lov: |
No podemos operar este sitio sin las generosas contribuciones que recibimos de nuestros televidentes. Si usted ama la privacidad y nuestro sitio web por favor considere donar.
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...: |
Aprenda más...
Encrypted_Cloud_Storage_Services: |
Servicios de Almacenamiento en Nube Cifrada
If_you_are_currently_using_Dropbox_Google_Drive_Microsoft_OneDrive_or_Apple_iCloud_you_should_pick: |
Si actualmente usas Dropbox, Google Drive, Microsoft OneDrive o Apple iCloud, deberías elegir una alternativa aquí.
Worth_Mentioning: |
Destacados
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
Find_a_cloud_storage_provider_that_wont_look_through_your_files.: |
Busque un proveedor de almacenamiento en nube que no revise sus archivos.
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

View File

@ -51,7 +51,7 @@
{% if include.moretext %}
{{include.moretext}}
{% else %}
Learn More
{% t Learn More %}
{% endif %}
</a>
{% endif %}

View File

@ -1,7 +1,7 @@
<h1 id="cloud" class="anchor"><a href="#cloud"><i class="fas fa-link anchor-icon"></i></a> Encrypted Cloud Storage Services</h1>
<h1 id="cloud" class="anchor"><a href="#cloud"><i class="fas fa-link anchor-icon"></i></a> {% t Encrypted Cloud Storage Services%}</h1>
<div class="alert alert-warning" role="alert">
<strong>If you are currently using Dropbox, Google Drive, Microsoft OneDrive or Apple iCloud, you should pick an alternative here.</strong>
<strong>{% t If you are currently using Dropbox, Google Drive, Microsoft OneDrive or Apple iCloud, you should pick an alternative here.%}</strong>
</div>
{% include cardv2.html
@ -23,9 +23,9 @@ googleplay="https://play.google.com/store/apps/details?id=com.nextcloud.client"
%}
<h3>Worth Mentioning</h3>
<h3>{% t Worth Mentioning%}</h3>
<ul>
<li><a href="https://cryptomator.org/">Cryptomator</a> - Free client-side AES encryption for your cloud files. Open source software: No backdoors, no registration. <span class="badge badge-warning" data-toggle="tooltip" title="Cryptomator's mobile apps are not open-source."><a href="https://github.com/cryptomator/cryptomator-android/issues/1#issuecomment-257979375"><i class="fas fa-exclamation-triangle"></i></a></span></li>
<li><a href="https://cryptpad.fr">CryptPad</a> - Free and end-to-end encrypted real time collaboration sharing folders, media, and documents.</li>
<li><a href="https://cryptomator.org/">{% t Cryptomator%}</a> - {% t Free client-side AES encryption for your cloud files. Open source software: No backdoors, no registration.%} <span class="badge badge-warning" data-toggle="tooltip" title="{% t Cryptomator's mobile apps are not open-source.%}"><a href="https://github.com/cryptomator/cryptomator-android/issues/1#issuecomment-257979375"><i class="fas fa-exclamation-triangle"></i></a></span></li>
<li><a href="https://cryptpad.fr">{% t CryptPad%}</a> - {% t Free and end-to-end encrypted real time collaboration sharing folders, media, and documents.%}</li>
</ul>

View File

@ -1,55 +1,79 @@
<h1 id="os" class="anchor">Privacy Tools</h1>
<h1 id="os" class="anchor">{% t Privacy Tools %}</h1>
<p><a href="/classic/"><i class="fas fa-info-circle"></i> Prefer the classic site? View a single-page layout.</a></p>
<p><a href="/{% if page.language %}{{ page.language }}/{% endif %}classic/"><i class="fas fa-info-circle"></i> {% t Prefer the classic site? View a single-page layout.%}</a></p>
<div class="row">
{% capture providers_title %}{% t Providers %}{% endcapture %}
{% capture providers_page %}/{% if page.language %}{{ page.language }}/{% endif %}providers/{% endcapture %}
{% capture providers_description %}{% t Discover privacy-centric online services, including email providers, VPN operators, DNS administrators, and more!%}{% endcapture %}
{% include card.html color="success"
title="Providers"
title=providers_title
icon="fas fa-server"
iconcolor="dark"
page="/providers/"
description="Discover privacy-centric online services, including email providers, VPN operators, DNS administrators, and more!"
page=providers_page
description=providers_description
%}
{% capture browsers_title %}{% t Web Browsers %}{% endcapture %}
{% capture browsers_page %}/{% if page.language %}{{ page.language }}/{% endif %}browsers/{% endcapture %}
{% capture browsers_description %}{% t Find a web browser that respects your privacy, and discover how to harden your browser against tracking and leaks.%}{% endcapture %}
{% include card.html color="primary"
title="Web Browsers"
title=browsers_title
icon="far fa-compass"
iconcolor="dark"
page="/browsers/"
description="Find a web browser that respects your privacy, and discover how to harden your browser against tracking and leaks."
page=browsers_page
description=browsers_description
%}
{% capture software_title %}{% t Software %}{% endcapture %}
{% capture software_page %}/{% if page.language %}{{ page.language }}/{% endif %}software/{% endcapture %}
{% capture software_description %}{% t Discover a variety of open source software built to protect your privacy and keep your digital data secure.%}{% endcapture %}
{% include card.html color="warning"
title="Software"
title=software_title
icon="far fa-window-restore"
iconcolor="dark"
page="/software/"
description="Discover a variety of open source software built to protect your privacy and keep your digital data secure."
page=software_page
description=software_description
%}
{% capture os_title %}{% t Operating Systems%}{% endcapture %}
{% capture os_page %}/{% if page.language %}{{ page.language }}/{% endif %}operating-systems/{% endcapture %}
{% capture os_description %}{% t Find out how your operating system is compromising your privacy, and what simple alternatives exist.%}{% endcapture %}
{% include card.html color="info"
title="Operating Systems"
title=os_title
icon="fas fa-desktop"
iconcolor="dark"
page="/operating-systems/"
description="Find out how your operating system is compromising your privacy, and what simple alternatives exist."
page=os_page
description=os_description
%}
{% capture services_title %}{% t PrivacyTools Services%}{% endcapture %}
{% capture services_page %}/{% if page.language %}{{ page.language }}/{% endif %}services/{% endcapture %}
{% capture services_description %}{% t The PrivacyTools team is proud to launch a variety of privacy-centric online services, including a Mastodon instance, search engine, and more!%}{% endcapture %}
{% include card.html color="secondary"
title="PrivacyTools Services"
title=services_title
icon="far fa-eye-slash"
iconcolor="dark"
page="/services/"
description="The PrivacyTools team is proud to launch a variety of privacy-centric online services, including a Mastodon instance, search engine, and more!"
page=services_page
description=services_description
%}
{% capture donate_title %}{% t Donate%}{% endcapture %}
{% capture donate_page %}/{% if page.language %}{{ page.language }}/{% endif %}donate/{% endcapture %}
{% capture donate_description %}{% t We can't operate this site without the generous contributions we receive from our viewers. If you love privacy and our website please consider donating.%}{% endcapture %}
{% include card.html color="danger"
title="Donate"
title=donate_title
icon="fas fa-donate"
iconcolor="dark"
page="/donate/"
description="We can't operate this site without the generous contributions we receive from our viewers. If you love privacy and our website please consider donating."
page=donate_page
description=donate_description
%}
</div>

44
_plugins/hreflang-tag.rb Normal file
View File

@ -0,0 +1,44 @@
# 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 = %{<link rel="alternate" hreflang="en" href="#{site.config["url"]}#{dir}" />}
site.data["languages"].each_key do |language|
hreflangs << %{<link rel="alternate" hreflang="#{language.tr('_', '-')}" href="#{site.config["url"]}/#{language}#{dir}" />}
end
end
hreflangs
end
end
end
Liquid::Template.register_tag('hreflang', Jekyll::HreflangTag)

47
_plugins/translate-tag.rb Normal file
View File

@ -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 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('t', Jekyll::TranslateTag)

View File

@ -0,0 +1,62 @@
# 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)
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}"
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

View File

@ -0,0 +1,59 @@
# 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(' ', '_')
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

View File

@ -1,14 +1,15 @@
---
layout: default
translate: true
---
<script src="/assets/js/redirects.js"></script>
{% include sections/header.html %}
{% include sections/resources.html %}
<h1 id="sponsors" class="anchor"><a href="#sponsors"><i class="fas fa-link anchor-icon"></i></a> Sponsors</h1>
<h1 id="sponsors" class="anchor"><a href="#sponsors"><i class="fas fa-link anchor-icon"></i></a> {% t Sponsors%}</h1>
<div class="alert alert-success" role="alert">
<strong>New!</strong> Showcase your brand as a sponsor of PrivacyTools here and support our mission of creating a world free of mass surveillance! <a href="/sponsors/" class="alert-link">Learn more...</a>
<strong>{% t New!%}</strong> {% t Showcase your brand as a sponsor of PrivacyTools here and support our mission of creating a world free of mass surveillance!%} <a href="/{% if page.language %}{{ page.language }}/{% endif %}sponsors/" class="alert-link">{% t Learn more...%}</a>
</div>
{% include sections/quotes.html %}
{% include sections/privacy-resources.html %}

View File

@ -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
---
<h1 id="os" class="anchor">Services</h1>
<h1 id="os" class="anchor">{% t Services%}</h1>
<p>Click on whatever service you need to view our recommendations.</p>
<p>{% t Click on whatever service you need to view our recommendations.%}</p>
<div class="card card-list">
<ul class="list-group list-group-flush">
<li class="list-group-item"><a href="/providers/cloud-storage/"><span class="fas fa-cloud fa-fw"></span> Cloud Storage</a></li>
<li class="list-group-item"><a href="/providers/dns/"><span class="fa fa-tasks fa-fw"></span> DNS</a></li>
<li class="list-group-item"><a href="/providers/email/"><span class="fas fa-mail-bulk fa-fw"></span> Email</a></li>
<li class="list-group-item"><a href="/providers/hosting/"><span class="fas fa-database fa-fw"></span> Hosting</a></li>
<li class="list-group-item"><a href="/providers/paste/"><span class="fas fa-paste fa-fw"></span> Pastebins</a></li>
<li class="list-group-item"><a href="/providers/search-engines/"><i class="fas fa-search fa-fw"></i> Search Engines</a></li>
<li class="list-group-item"><a href="/providers/social-networks/"><span class="fas fa-expand-arrows-alt fa-fw"></span> Social Networks</a></li>
<li class="list-group-item"><a href="/providers/social-news-aggregator/"><span class="far fa-newspaper fa-fw"></span> Social News Aggregators</a></li>
<li class="list-group-item"><a href="/providers/vpn/"><span class="far fa-eye-slash fa-fw"></span> VPN</a></li>
<li class="list-group-item"><a href="/{% if page.language %}{{ page.language }}/{% endif %}providers/cloud-storage/"><span class="fas fa-cloud fa-fw"></span> {% t Cloud Storage%}</a></li>
<li class="list-group-item"><a href="/providers/dns/"><span class="fa fa-tasks fa-fw"></span> {% t DNS%}</a></li>
<li class="list-group-item"><a href="/providers/email/"><span class="fas fa-mail-bulk fa-fw"></span> {% t Email%}</a></li>
<li class="list-group-item"><a href="/providers/hosting/"><span class="fas fa-database fa-fw"></span> {% t Hosting%}</a></li>
<li class="list-group-item"><a href="/providers/paste/"><span class="fas fa-paste fa-fw"></span> {% t Pastebins%}</a></li>
<li class="list-group-item"><a href="/providers/search-engines/"><i class="fas fa-search fa-fw"></i> {% t Search Engines%}</a></li>
<li class="list-group-item"><a href="/providers/social-networks/"><span class="fas fa-expand-arrows-alt fa-fw"></span> {% t Social Networks%}</a></li>
<li class="list-group-item"><a href="/providers/social-news-aggregator/"><span class="far fa-newspaper fa-fw"></span> {% t Social News Aggregators%}</a></li>
<li class="list-group-item"><a href="/providers/vpn/"><span class="far fa-eye-slash fa-fw"></span> {% t VPN%}</a></li>
</ul>
</div>

View File

@ -3,6 +3,7 @@ layout: page
permalink: /providers/cloud-storage/
title: "Cloud Storage"
description: "Find a cloud storage provider that won't look through your files."
translate: true
---
{% include sections/cloud-storage.html %}

121
weblate-source-file.yml Normal file
View File

@ -0,0 +1,121 @@
---
Providers: |
Providers
Theres_a_ton_of_people_providing_services_online._Discover_which_ones_you_should_avoid_and_our_recom: |
There's a ton of people providing services online. Discover which ones you should avoid and our recommendations for a variety of services.
Cloud_Storage: |
Cloud Storage
Find_a_cloud_storage_provider_that_wont_look_through_your_files.: |
Find a cloud storage provider that won't look through your files.
Privacy_Tools: |
Privacy Tools
Prefer_the_classic_site?_View_a_singlepage_layout.: |
Prefer the classic site? View a single-page layout.
Discover_privacycentric_online_services_including_email_providers_VPN_operators_DNS_administrator: |
Discover privacy-centric online services, including email providers, VPN operators, DNS administrators, and more!
Learn_More: |
Learn More
Web_Browsers: |
Web Browsers
Find_a_web_browser_that_respects_your_privacy_and_discover_how_to_harden_your_browser_against_tracki: |
Find a web browser that respects your privacy, and discover how to harden your browser against tracking and leaks.
Software: |
Software
Discover_a_variety_of_open_source_software_built_to_protect_your_privacy_and_keep_your_digital_data_s: |
Discover a variety of open source software built to protect your privacy and keep your digital data secure.
Operating_Systems: |
Operating Systems
Find_out_how_your_operating_system_is_compromising_your_privacy_and_what_simple_alternatives_exist.: |
Find out how your operating system is compromising your privacy, and what simple alternatives exist.
PrivacyTools_Services: |
PrivacyTools Services
The_PrivacyTools_team_is_proud_to_launch_a_variety_of_privacycentric_online_services_including_a_Ma: |
The PrivacyTools team is proud to launch a variety of privacy-centric online services, including a Mastodon instance, search engine, and more!
Donate: |
Donate
We_cant_operate_this_site_without_the_generous_contributions_we_receive_from_our_viewers._If_you_lov: |
We can't operate this site without the generous contributions we receive from our viewers. If you love privacy and our website please consider donating.
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...
Encrypted_Cloud_Storage_Services: |
Encrypted Cloud Storage Services
If_you_are_currently_using_Dropbox_Google_Drive_Microsoft_OneDrive_or_Apple_iCloud_you_should_pick: |
If you are currently using Dropbox, Google Drive, Microsoft OneDrive or Apple iCloud, you should pick an alternative here.
Worth_Mentioning: |
Worth Mentioning
Cryptomator: |
Cryptomator
Free_clientside_AES_encryption_for_your_cloud_files._Open_source_software_No_backdoors_no_registra: |
Free client-side AES encryption for your cloud files. Open source software: No backdoors, no registration.
Cryptomators_mobile_apps_are_not_opensource.: |
Cryptomator's mobile apps are not open-source.
CryptPad: |
CryptPad
Free_and_endtoend_encrypted_real_time_collaboration_sharing_folders_media_and_documents.: |
Free and end-to-end encrypted real time collaboration sharing folders, media, and documents.
Services: |
Services
Click_on_whatever_service_you_need_to_view_our_recommendations.: |
Click on whatever service you need to view our recommendations.
DNS: |
DNS
Email: |
Email
Hosting: |
Hosting
Pastebins: |
Pastebins
Search_Engines: |
Search Engines
Social_Networks: |
Social Networks
Social_News_Aggregators: |
Social News Aggregators
VPN: |
VPN