I18n simple #1514
1
.gitignore
vendored
1
.gitignore
vendored
@ -6,3 +6,4 @@ font/assets/
|
||||
font/_sass/
|
||||
font/.fontcustom-manifest.json
|
||||
assets/webfonts/ptio-font-preview.html
|
||||
# weblate-source-file.yml
|
||||
|
3
Gemfile
3
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
|
||||
|
194
Gemfile.lock
194
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
|
||||
|
@ -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
47
_data/language_map.yml
Normal 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
106
_data/languages/es.yml
Normal 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
|
||||
|
@ -5,7 +5,7 @@
|
||||
{% else %}
|
||||
<div class="card-header text-white bg-{{include.color}}">
|
||||
{% endif %}
|
||||
<h3 class="h5">{{include.title}}</h3>
|
||||
<h3 class="h5">{{include.title | translate_text}}</h3>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{% if include.labels %}
|
||||
@ -17,10 +17,10 @@
|
||||
{% assign text = label_data[1] %}
|
||||
{% assign tooltip = label_data[2] | default: "" %}
|
||||
{% assign help_icon = '<i class="far fa-question-circle"></i>' %}
|
||||
<span class="badge badge-{{color}}" {% if tooltip %} data-toggle="tooltip" title="{{ tooltip }}">{{text}} {{ help_icon
|
||||
<span class="badge badge-{{color}}" {% if tooltip %} data-toggle="tooltip" title="{{ tooltip | translate_text}}">{{text | translate_text}} {{ help_icon
|
||||
}}
|
||||
{% else %}
|
||||
>{{text}}
|
||||
>{{text | translate_text}}
|
||||
{% endif %}
|
||||
</span>
|
||||
{% endfor %}
|
||||
@ -34,24 +34,24 @@
|
||||
{% elsif include.font %}
|
||||
<span class="{{ include.font }} panel-item panel-font" alt="{{ include.title }}"></span>
|
||||
{% endif %}
|
||||
{{include.description}}
|
||||
{{include.description | translate_text }}
|
||||
</p>
|
||||
<div>
|
||||
<p>
|
||||
{% if include.url %}
|
||||
<a class="btn btn-{{include.color}} mb-1" href="{{include.url}}">
|
||||
<a class="btn btn-{{include.color}} mb-1" href="{{include.url | translate_text}}">
|
||||
{% if include.website %}
|
||||
{{include.website}}
|
||||
{{include.website | translate_text }}
|
||||
{% else %}
|
||||
{{ include.url | remove: "https://" | remove: "http://" | remove: "www." | remove: "/" | remove: "github.com" }}
|
||||
{% endif %}
|
||||
</a>
|
||||
{% elsif include.page %}
|
||||
<a class="btn btn-{{include.color}} mb-1" href="{{include.page}}">
|
||||
<a class="btn btn-{{include.color}} mb-1" href="{{include.page | translate_page}}">
|
||||
{% if include.moretext %}
|
||||
{{include.moretext}}
|
||||
{{include.moretext | translate_text}}
|
||||
{% else %}
|
||||
Learn More
|
||||
{% t Learn More %}
|
||||
{% endif %}
|
||||
</a>
|
||||
{% endif %}
|
||||
|
@ -2,7 +2,7 @@
|
||||
<div class="card-header text-white bg-secondary">
|
||||
<h3 class="h5">
|
||||
{% if include.badges %}
|
||||
<span class="mr-2">{{ include.title }}</span>
|
||||
<span class="mr-2">{{ include.title | translate_text }}</span>
|
||||
{% assign badges = include.badges | split:"|" %}
|
||||
{% for badge in badges %}
|
||||
{% assign badge_data = badge | split:":" %}
|
||||
@ -14,15 +14,15 @@
|
||||
class="badge badge-{{color}}"
|
||||
{% if tooltip %}
|
||||
data-toggle="tooltip"
|
||||
title="{{ tooltip }}"
|
||||
> {{text}} {{ help_icon }}
|
||||
title="{{ tooltip | translate_text }}"
|
||||
> {{text | translate_text}} {{ help_icon }}
|
||||
{% else %}
|
||||
> {{text}}
|
||||
> {{text | translate_text}}
|
||||
{% endif %}
|
||||
</span>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
{{ include.title }}
|
||||
{{ include.title | translate_text }}
|
||||
{% endif %}
|
||||
</h3>
|
||||
</div>
|
||||
@ -36,9 +36,9 @@
|
||||
height="120"
|
||||
width="120"
|
||||
class="panel-pic"
|
||||
alt="{{include.title}}"
|
||||
alt="{{include.title | translate_text }}"
|
||||
>
|
||||
{{ include.description }}
|
||||
{{ include.description | translate_text }}
|
||||
{% if include.labels %}
|
||||
{% assign labels = include.labels | split:"|" %}
|
||||
{% for label in labels %}
|
||||
@ -51,10 +51,10 @@
|
||||
class="badge badge-{{color}}"
|
||||
{% if tooltip %}
|
||||
data-toggle="tooltip"
|
||||
title="{{ tooltip }}"
|
||||
> {{text}} {{ help_icon }}
|
||||
title="{{ tooltip | translate_text }}"
|
||||
> {{text | translate_text}} {{ help_icon }}
|
||||
{% else %}
|
||||
> {{text}}
|
||||
> {{text | translate_text}}
|
||||
{% endif %}
|
||||
</span>
|
||||
{% endfor %}
|
||||
@ -63,7 +63,7 @@
|
||||
<div class="d-flex justify-content-between flex-column flex-md-row align-items-start align-items-md-center">
|
||||
<div class="d-flex flex-shrink-0 mr-1">
|
||||
<a
|
||||
href="{{include.website}}"
|
||||
href="{{include.website | translate_text}}"
|
||||
rel="noopener"
|
||||
class="btn btn-primary mt-1 mr-1">
|
||||
<i class="fas fa-external-link-alt fa-fw"></i>
|
||||
@ -85,7 +85,7 @@
|
||||
class="hover-text-decoration-none mt-1 mr-1"
|
||||
data-toggle="tooltip"
|
||||
data-placement="bottom"
|
||||
data-original-title="Requires specific software to access: torproject.org">
|
||||
data-original-title="{% t Requires specific software to access: torproject.org %}">
|
||||
<span class="ptio-tor btn-tor btn-icon"></span>
|
||||
</a>
|
||||
{% endif %}
|
||||
@ -96,7 +96,7 @@
|
||||
class="hover-text-decoration-none mt-1 mr-1"
|
||||
data-toggle="tooltip"
|
||||
data-placement="bottom"
|
||||
data-original-title="Requires specific software to access: geti2p.net">
|
||||
data-original-title="{% t Requires specific software to access: geti2p.net %}">
|
||||
<span class="ptio-i2p-garlic btn-secondary btn-icon"></span>
|
||||
</a>
|
||||
{% endif %}
|
||||
@ -105,7 +105,7 @@
|
||||
<div class="mt-2">
|
||||
{% if include.windows %}
|
||||
{% if include.windows != "" %}
|
||||
<a href="{{ include.windows }}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<a href="{{ include.windows | translate_text}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<i class="fab fa-windows fa-2x fa-fw d-inline pr-1"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
@ -115,7 +115,7 @@
|
||||
|
||||
{% if include.mac %}
|
||||
{% if include.mac != "" %}
|
||||
<a href="{{ include.mac }}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<a href="{{ include.mac | translate_text}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<i class="ptio-macos fa-2x fa-fw d-inline pr-1"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
@ -125,7 +125,7 @@
|
||||
|
||||
{% if include.linux %}
|
||||
{% if include.linux != "" %}
|
||||
<a href="{{ include.linux }}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<a href="{{ include.linux | translate_text}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<i class="ptio-linux fa-2x fa-fw d-inline pr-1"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
@ -135,7 +135,7 @@
|
||||
|
||||
{% if include.freebsd %}
|
||||
{% if include.freebsd != "" %}
|
||||
<a href="{{ include.freebsd }}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<a href="{{ include.freebsd | translate_text}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<i class="fab fa-freebsd fa-2x fa-fw d-inline pr-1"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
@ -145,7 +145,7 @@
|
||||
|
||||
{% if include.openbsd %}
|
||||
{% if include.openbsd != "" %}
|
||||
<a href="{{ include.openbsd }}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<a href="{{ include.openbsd | translate_text}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<i class="ptio-openbsd fa-2x fa-fw d-inline pr-1"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
@ -155,7 +155,7 @@
|
||||
|
||||
{% if include.netbsd %}
|
||||
{% if include.netbsd != "" %}
|
||||
<a href="{{ include.netbsd }}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<a href="{{ include.netbsd | translate_text}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<i class="ptio-netbsd fa-2x fa-fw d-inline pr-1"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
@ -165,7 +165,7 @@
|
||||
|
||||
{% if include.firefox %}
|
||||
{% if include.firefox != "" %}
|
||||
<a href="{{ include.firefox }}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<a href="{{ include.firefox | translate_text}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<i class="fab fa-firefox fa-2x fa-fw d-inline pr-1"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
@ -175,7 +175,7 @@
|
||||
|
||||
{% if include.chrome %}
|
||||
{% if include.chrome != "" %}
|
||||
<a href="{{ include.chrome }}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<a href="{{ include.chrome | translate_text}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<i class="fab fa-chrome fa-2x fa-fw d-inline pr-1"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
@ -185,7 +185,7 @@
|
||||
|
||||
{% if include.safari %}
|
||||
{% if include.safari != "" %}
|
||||
<a href="{{ include.safari }}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<a href="{{ include.safari | translate_text}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<i class="fab fa-safari fa-2x fa-fw d-inline pr-1"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
@ -195,7 +195,7 @@
|
||||
|
||||
{% if include.opera %}
|
||||
{% if include.opera != "" %}
|
||||
<a href="{{ include.opera }}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<a href="{{ include.opera | translate_text}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<i class="fab fa-opera fa-2x fa-fw d-inline pr-1"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
@ -205,7 +205,7 @@
|
||||
|
||||
{% if include.edge %}
|
||||
{% if include.edge != "" %}
|
||||
<a href="{{ include.edge }}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<a href="{{ include.edge | translate_text}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<i class="fab fa-edge fa-2x fa-fw d-inline pr-1"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
@ -215,7 +215,7 @@
|
||||
|
||||
{% if include.fdroid %}
|
||||
{% if include.fdroid != "" %}
|
||||
<a href="{{ include.fdroid }}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<a href="{{ include.fdroid | translate_text}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<i class="ptio-f-droid fa-2x fa-fw d-inline pr-1"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
@ -225,7 +225,7 @@
|
||||
|
||||
{% if include.googleplay %}
|
||||
{% if include.googleplay != "" %}
|
||||
<a href="{{ include.googleplay }}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<a href="{{ include.googleplay | translate_text}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<i class="fab fa-google-play fa-2x fa-fw d-inline pr-1"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
@ -235,7 +235,7 @@
|
||||
|
||||
{% if include.android %}
|
||||
{% if include.android != "" %}
|
||||
<a href="{{ include.android }}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<a href="{{ include.android | translate_text}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<i class="fab fa-android fa-2x fa-fw d-inline pr-1"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
@ -245,7 +245,7 @@
|
||||
|
||||
{% if include.ios %}
|
||||
{% if include.ios != "" %}
|
||||
<a href="{{ include.ios }}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<a href="{{ include.ios | translate_text}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<i class="ptio-ios fa-2x fa-fw d-inline pr-1"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
@ -255,7 +255,7 @@
|
||||
|
||||
{% if include.sailfish %}
|
||||
{% if include.sailfish != "" %}
|
||||
<a href="{{ include.sailfish }}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<a href="{{ include.sailfish | translate_text}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<i class="ptio-sailfish-os fa-2x fa-fw d-inline pr-1"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
@ -265,7 +265,7 @@
|
||||
|
||||
{% if include.web %}
|
||||
{% if include.web != "" %}
|
||||
<a href="{{ include.web }}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<a href="{{ include.web | translate_text}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<i class="fas fa-globe-americas fa-2x fa-fw d-inline pr-1"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
@ -278,25 +278,25 @@
|
||||
{{include.icon3}}
|
||||
|
||||
{% if include.github %}
|
||||
<a href="{{include.github}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<a href="{{include.github | translate_text}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<i class="fab fa-github fa-2x fa-fw d-inline"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if include.gitlab %}
|
||||
<a href="{{include.gitlab}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<a href="{{include.gitlab | translate_text}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<i class="fab fa-gitlab fa-2x fa-fw d-inline"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if include.git %}
|
||||
<a href="{{include.git}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<a href="{{include.git | translate_text}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<i class="fab fa-git-square fa-2x fa-fw d-inline"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if include.source %}
|
||||
<a href="{{include.source}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<a href="{{include.source | translate_text}}" rel="noopener" class="text-decoration-none hover-text-decoration-none">
|
||||
<i class="fas fa-code-branch fa-2x fa-fw d-inline"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
@ -6,8 +6,7 @@
|
||||
{% include cardv2.html
|
||||
title="Firefox"
|
||||
image="/assets/img/tools/Firefox.png"
|
||||
description='Firefox is fast, reliable, open-source, and respects your privacy. Don\'t forget to adjust the settings according to our
|
||||
recommendations: <a href="#webrtc"><i class="fas fa-link"></i> WebRTC</a> and <a href="#about_config"><i class="fas fa-link"></i> about:config</a> and get the <a href="#addons"><i class="fas fa-link"></i> privacy add-ons</a>.'
|
||||
description='Firefox is fast, reliable, open-source, and respects your privacy. Don\'t forget to adjust the settings according to our recommendations: <a href="#webrtc"><i class="fas fa-link"></i> WebRTC</a> and <a href="#about_config"><i class="fas fa-link"></i> about:config</a> and get the <a href="#addons"><i class="fas fa-link"></i> privacy add-ons</a>.'
|
||||
website="https://firefox.com"
|
||||
forum="https://forum.privacytools.io/t/discussion-firefox/279"
|
||||
source="https://hg.mozilla.org/mozilla-central/"
|
||||
|
@ -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>
|
||||
|
@ -3,8 +3,7 @@
|
||||
{% include cardv2.html
|
||||
title="Bitmessage"
|
||||
image="/assets/img/tools/Bitmessage.png"
|
||||
description="Bitmessage is a P2P communications protocol used to send encrypted messages to another person or to many subscribers. It is decentralized and trustless,
|
||||
meaning that you need not inherently trust any entities like root certificate authorities. It uses strong authentication which means that the sender of a message cannot be spoofed, and it aims to hide \"non-content\" data."
|
||||
description="Bitmessage is a P2P communications protocol used to send encrypted messages to another person or to many subscribers. It is decentralized and trustless, meaning that you need not inherently trust any entities like root certificate authorities. It uses strong authentication which means that the sender of a message cannot be spoofed, and it aims to hide \"non-content\" data."
|
||||
website="https://bitmessage.org/"
|
||||
forum="https://forum.privacytools.io/t/discussion-bitmessage/661"
|
||||
github="https://github.com/Bitmessage/PyBitmessage"
|
||||
|
@ -8,8 +8,7 @@
|
||||
{% include cardv2.html
|
||||
title="Signal"
|
||||
image="/assets/img/tools/Signal.png"
|
||||
description="Signal is a mobile app developed by Open Whisper Systems. The app provides instant messaging, as well as voice and video calling.
|
||||
All communications are end-to-end encrypted. Signal is free and open source."
|
||||
description="Signal is a mobile app developed by Open Whisper Systems. The app provides instant messaging, as well as voice and video calling. All communications are end-to-end encrypted. Signal is free and open source."
|
||||
labels="success:VoIP"
|
||||
website="https://signal.org/"
|
||||
forum="https://forum.privacytools.io/t/discussion-signal/664"
|
||||
|
@ -5,13 +5,16 @@
|
||||
<p>It's important for a website like {{ site.name }} to stay up-to-date. Keep an eye on software updates for the applications listed on our site. Follow recent news about providers that we recommend. We try our best to keep up, but we're not perfect and the internet is changing fast. If you find an error, or you think a provider should not be listed here, or a qualified service provider is missing, or a browser plugin is not the best choice anymore, or anything else... <strong>Talk to us please.</strong> You can also find us on <a rel="me" href="https://social.privacytools.io/@privacytools">our own Mastodon instance</a> or on <a href="https://chat.privacytools.io">Matrix</a> at <code class="highlighter-rouge">#general:privacytools.io</code>.</p>
|
||||
|
||||
<div class="row">
|
||||
|
||||
{% capture reddit_button %}<a class="btn btn-success mb-1" href="https://www.reddit.com/r/privacytoolsIO/">{% t Reddit %}</a>{% endcapture %}
|
||||
{% capture twitter_button %}<a class="btn btn-primary mb-1" href="https://twitter.com/privacytoolsIO">{% t Twitter %}</a>{% endcapture %}
|
||||
{% capture contriblist_button %}<a class="btn btn-warning mb-1" href="https://github.com/privacytoolsIO/privacytools.io/graphs/contributors">{% t Contributor List %}</a>{% endcapture %}
|
||||
|
||||
{% include card.html color="success"
|
||||
title="Discourse & Reddit"
|
||||
image="/assets/img/icons/discourse.png"
|
||||
url="https://forum.privacytools.io/"
|
||||
website="Discourse"
|
||||
extra_button='<a class="btn btn-success mb-1" href="https://www.reddit.com/r/privacytoolsIO/">Reddit</a>'
|
||||
extra_button=reddit_button
|
||||
description='Join our Discourse community to stay up to date on privacy news or make suggestions!'
|
||||
%}
|
||||
|
||||
@ -20,7 +23,7 @@
|
||||
image="/assets/img/icons/mastodon.png"
|
||||
url="https://social.privacytools.io/"
|
||||
website="Mastodon"
|
||||
extra_button='<a class="btn btn-primary mb-1" href="https://twitter.com/privacytoolsIO">Twitter</a>'
|
||||
extra_button=twitter_button
|
||||
description="Get the latest privacy-related updates from our Mastodon Feed. Follow us today!"
|
||||
%}
|
||||
|
||||
@ -30,9 +33,8 @@
|
||||
url="https://github.com/privacytoolsIO/privacytools.io"
|
||||
website="GitHub"
|
||||
description="The complete website source code is available on GitHub. Join our developer team!"
|
||||
extra_button='<a class="btn btn-warning mb-1" href="https://github.com/privacytoolsIO/privacytools.io/graphs/contributors">Contributor List</a>'
|
||||
extra_button=contriblist_button
|
||||
%}
|
||||
|
||||
</div>
|
||||
|
||||
<p>This is a community project aiming to deliver the best information available to improve privacy online. Thank you for participating. This project needs you.</p>
|
||||
<p>{% t This is a community project aiming to deliver the best information available to improve privacy online. Thank you for participating. This project needs you. %}</p>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<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">
|
||||
|
||||
@ -36,6 +36,7 @@
|
||||
description="Find out how your operating system is compromising your privacy, and what simple alternatives exist."
|
||||
%}
|
||||
|
||||
|
||||
{% include card.html color="secondary"
|
||||
title="PrivacyTools Services"
|
||||
icon="far fa-eye-slash"
|
||||
|
44
_plugins/hreflang-tag.rb
Normal file
44
_plugins/hreflang-tag.rb
Normal 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)
|
36
_plugins/translate-filter.rb
Normal file
36
_plugins/translate-filter.rb
Normal file
@ -0,0 +1,36 @@
|
||||
module Jekyll
|
||||
module TranslateFilter
|
||||
def translate_text(input)
|
||||
if input.nil? or input.empty?
|
||||
input
|
||||
else
|
||||
text = input.strip
|
||||
weblate_id = Weblate::ID.get(input)
|
||||
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
|
||||
|
||||
def translate_page(page)
|
||||
page_language = @context.environments.first["page"]["language"]
|
||||
site = @context.registers[:site]
|
||||
if page_language.nil?
|
||||
page
|
||||
else
|
||||
"/#{page_language}#{page}"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Liquid::Template.register_filter(Jekyll::TranslateFilter)
|
47
_plugins/translate-tag.rb
Normal file
47
_plugins/translate-tag.rb
Normal 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)
|
62
_plugins/translated-page-generator.rb
Normal file
62
_plugins/translated-page-generator.rb
Normal 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
|
59
_plugins/weblate-source-file.rb
Normal file
59
_plugins/weblate-source-file.rb
Normal 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? or source_text.empty?
|
||||
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
|
@ -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 %}
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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 %}
|
||||
|
1939
weblate-source-file.yml
Normal file
1939
weblate-source-file.yml
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user