I18n simple #1514

Closed
djoate wants to merge 18 commits from i18n-simple into master
23 changed files with 2430 additions and 266 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

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

View File

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

View File

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

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

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

View File

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

View File

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

View File

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

View 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
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? 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

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 %}

1939
weblate-source-file.yml Normal file

File diff suppressed because it is too large Load Diff