runs-on: ubuntu-22.04
steps:
- name: Checkout source
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Poke config
run: |
cp config/example.storage.yml config/storage.yml
runs-on: ubuntu-22.04
steps:
- name: Check out code
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Setup ruby
uses: ruby/setup-ruby@v1
with:
runs-on: ubuntu-22.04
steps:
- name: Check out code
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Setup ruby
uses: ruby/setup-ruby@v1
with:
runs-on: ubuntu-22.04
steps:
- name: Check out code
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Setup ruby
uses: ruby/setup-ruby@v1
with:
runs-on: ubuntu-22.04
steps:
- name: Check out code
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Setup ruby
uses: ruby/setup-ruby@v1
with:
OPENSTREETMAP_MEMCACHE_SERVERS: 127.0.0.1
steps:
- name: Checkout source
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Setup ruby
uses: ruby/setup-ruby@v1
with:
- name: Run tests
run: bundle exec rails test:all
- name: Report completion to Coveralls
- uses: coverallsapp/github-action@v2.2.1
+ uses: coverallsapp/github-action@v2.2.2
with:
github-token: ${{ secrets.github_token }}
flag-name: ubuntu-${{ matrix.ubuntu }}-ruby-${{ matrix.ruby }}
runs-on: ubuntu-latest
steps:
- name: Report completion to Coveralls
- uses: coverallsapp/github-action@v2.2.1
+ uses: coverallsapp/github-action@v2.2.2
with:
github-token: ${{ secrets.github_token }}
parallel-finished: true
Rails:
Enabled: true
+# Config can be removed after https://github.com/rubocop/rubocop-factory_bot/issues/53
+FactoryBot/AssociationStyle:
+ Include:
+ - 'test/factories/**/*'
+
Layout/ExtraSpacing:
AllowForAlignment: true
annotate (3.2.0)
activerecord (>= 3.2, < 8.0)
rake (>= 10.4, < 14.0)
- argon2 (2.2.0)
+ argon2 (2.3.0)
ffi (~> 1.15)
ffi-compiler (~> 1.0)
ast (2.4.2)
autoprefixer-rails (10.4.13.0)
execjs (~> 2)
aws-eventstream (1.2.0)
- aws-partitions (1.813.0)
+ aws-partitions (1.816.0)
aws-sdk-core (3.181.0)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.651.0)
fspath (3.1.2)
gd2-ffij (0.4.0)
ffi (>= 1.0.0)
- globalid (1.1.0)
- activesupport (>= 5.0)
+ globalid (1.2.0)
+ activesupport (>= 6.1)
hashdiff (1.0.1)
hashie (5.0.0)
highline (2.1.0)
parser (3.2.2.3)
ast (~> 2.4.1)
racc
- pg (1.5.3)
+ pg (1.5.4)
popper_js (2.11.8)
progress (3.6.0)
public_suffix (5.0.3)
rack (>= 1.4)
rexml (3.2.6)
rinku (2.0.6)
- rotp (6.2.2)
+ rotp (6.3.0)
rouge (4.1.3)
rubocop (1.56.2)
base64 (~> 0.1.1)
rubocop (~> 1.41)
rubocop-factory_bot (2.23.1)
rubocop (~> 1.33)
- rubocop-minitest (0.31.0)
+ rubocop-minitest (0.31.1)
rubocop (>= 1.39, < 2.0)
rubocop-performance (1.19.0)
rubocop (>= 1.7.0, < 2.0)
sprockets-rails
tilt
secure_headers (6.5.0)
- selenium-webdriver (4.11.0)
+ selenium-webdriver (4.12.0)
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2, < 3.0)
websocket (~> 1.0)
i18n
vendorer (0.2.0)
version_gem (1.1.3)
- webmock (3.19.0)
+ webmock (3.19.1)
addressable (>= 2.8.0)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
.attr("class", "section base-layers")
.appendTo($ui);
- var baseLayers = $("<ul class='list-unstyled'>")
+ var baseLayers = $("<ul class='list-unstyled mb-0'>")
.appendTo(baseSection);
layers.forEach(function (layer) {
var item = $("<li>")
+ .attr("class", "rounded-3")
.appendTo(baseLayers);
if (map.hasLayer(layer)) {
$("<div>")
.attr("class", "form-check mb-3")
.appendTo($form)
- .append(
- $("<label>")
- .attr("for", "link_marker")
- .attr("class", "form-check-label")
- .append(
- $("<input>")
- .attr("id", "link_marker")
- .attr("type", "checkbox")
- .attr("class", "form-check-input")
- .bind("change", toggleMarker))
- .append(I18n.t("javascripts.share.include_marker")));
+ .append($("<label>")
+ .attr("for", "link_marker")
+ .attr("class", "form-check-label")
+ .text(I18n.t("javascripts.share.include_marker")))
+ .append($("<input>")
+ .attr("id", "link_marker")
+ .attr("type", "checkbox")
+ .attr("class", "form-check-input")
+ .bind("change", toggleMarker));
$("<div class='btn-group btn-group-sm mb-2'>")
.appendTo($form)
.append($("<input>")
.attr("id", "long_input")
.attr("type", "text")
+ .attr("class", "form-control form-control-sm font-monospace")
+ .attr("readonly", true)
.on("click", select));
$("<div>")
.append($("<input>")
.attr("id", "short_input")
.attr("type", "text")
+ .attr("class", "form-control form-control-sm font-monospace")
+ .attr("readonly", true)
.on("click", select));
$("<div>")
.append(
$("<textarea>")
.attr("id", "embed_html")
+ .attr("class", "form-control form-control-sm font-monospace")
+ .attr("readonly", true)
.on("click", select))
.append(
$("<p>")
.attr("method", "post")
.appendTo($imageSection);
- $("<div>")
- .attr("class", "mb-3 form-check")
- .appendTo($form)
- .append(
- $("<label>")
- .attr("for", "image_filter")
- .attr("class", "form-check-label")
- .append(
- $("<input>")
- .attr("id", "image_filter")
- .attr("type", "checkbox")
- .attr("class", "form-check-input")
- .bind("change", toggleFilter))
- .append(I18n.t("javascripts.share.custom_dimensions")));
-
$("<div>")
.appendTo($form)
- .append(
- $("<label>")
- .attr("for", "mapnik_format")
- .text(I18n.t("javascripts.share.format")))
- .append($("<select>")
- .attr("name", "mapnik_format")
- .attr("id", "mapnik_format")
- .append($("<option>").val("png").text("PNG").prop("selected", true))
- .append($("<option>").val("jpeg").text("JPEG"))
- .append($("<option>").val("svg").text("SVG"))
- .append($("<option>").val("pdf").text("PDF")));
+ .attr("class", "row mb-3")
+ .append($("<label>")
+ .attr("for", "mapnik_format")
+ .attr("class", "col-auto col-form-label")
+ .text(I18n.t("javascripts.share.format")))
+ .append($("<div>")
+ .attr("class", "col-auto")
+ .append($("<select>")
+ .attr("name", "mapnik_format")
+ .attr("id", "mapnik_format")
+ .attr("class", "form-select w-auto")
+ .append($("<option>").val("png").text("PNG").prop("selected", true))
+ .append($("<option>").val("jpeg").text("JPEG"))
+ .append($("<option>").val("svg").text("SVG"))
+ .append($("<option>").val("pdf").text("PDF"))));
$("<div>")
.appendTo($form)
+ .attr("class", "row mb-3")
.append($("<label>")
.attr("for", "mapnik_scale")
+ .attr("class", "col-auto col-form-label")
.text(I18n.t("javascripts.share.scale")))
- .append("1 : ")
- .append($("<input>")
- .attr("name", "mapnik_scale")
- .attr("id", "mapnik_scale")
- .attr("type", "text")
- .on("change", update));
+ .append($("<div>")
+ .attr("class", "col-auto")
+ .append($("<div>")
+ .attr("class", "input-group flex-nowrap")
+ .append($("<span>")
+ .attr("class", "input-group-text")
+ .text("1 : "))
+ .append($("<input>")
+ .attr("name", "mapnik_scale")
+ .attr("id", "mapnik_scale")
+ .attr("type", "text")
+ .attr("class", "form-control")
+ .on("change", update))));
+
+ $("<div>")
+ .attr("class", "row mb-3")
+ .appendTo($form)
+ .append($("<div>")
+ .attr("class", "col-auto")
+ .append($("<div>")
+ .attr("class", "form-check")
+ .append($("<label>")
+ .attr("for", "image_filter")
+ .attr("class", "form-check-label")
+ .text(I18n.t("javascripts.share.custom_dimensions")))
+ .append($("<input>")
+ .attr("id", "image_filter")
+ .attr("type", "checkbox")
+ .attr("class", "form-check-input")
+ .bind("change", toggleFilter))));
["minlon", "minlat", "maxlon", "maxlat"].forEach(function (name) {
$("<input>")
var $ui = $("<div>")
.attr("class", uiClass + "-ui");
- $("<div class='sidebar_heading d-flex'>")
+ $("<div class='d-flex p-3 pb-0'>")
.appendTo($ui)
- .append($("<h4 class='flex-grow-1 text-break'>")
+ .append($("<h2 class='flex-grow-1 text-break'>")
.text(I18n.t(paneTitle)))
.append($("<div>")
.append($("<button type='button' class='btn-close'>")
.section {
border-bottom: 1px solid $grey;
- padding: 10px 20px;
+ padding: $spacer;
}
}
}
}
.share-ui {
- .share-link {
- input[type=text],
- textarea {
- width: 100%;
- font-family: monospace;
- font-size: small;
- line-height: 1.3;
- }
- }
-
- .share-image {
- label {
- margin-right: 10px;
- }
- }
-
#mapnik_scale {
width: 100px;
}
}
.leaflet-top {
- top: $lineheight/2 !important;
+ top: 10px !important;
.leaflet-control {
margin-right: 0px !important;
margin-top: 0px !important;
/* Rules for the sidebar */
-.sidebar_heading {
- position: relative;
- padding: $lineheight/2 $lineheight;
- // background: $offwhite;
- // border-bottom: 1px solid $grey;
-}
-
#browse_status {
input {
display: block;
label {
font-size: 16px;
}
+ .col-form-label {
+ font-size: 16px;
+ }
}
/* Stop bootstrap 5 from floating legends when they don't need to be */
</div>
<% end -%>
<% elsif params[:bbox] %>
- <p><%= t(params[:max_id] ? ".no_more_area" : ".empty_area") %></p>
+ <p class="mx-3"><%= t(params[:max_id] ? ".no_more_area" : ".empty_area") %></p>
<% elsif params[:display_name] %>
- <p><%= t(params[:max_id] ? ".no_more_user" : ".empty_user") %></p>
+ <p class="mx-3"><%= t(params[:max_id] ? ".no_more_user" : ".empty_user") %></p>
<% else %>
- <p><%= t(params[:max_id] ? ".no_more" : ".empty") %></p>
+ <p class="mx-3"><%= t(params[:max_id] ? ".no_more" : ".empty") %></p>
<% end %>
</tr>
</thead>
<% @comments.each do |comment| -%>
- <tr class="<%= "text-muted" unless comment.visible? %>">
- <td width="25%"><%= link_to comment.diary_entry.title, diary_entry_path(comment.diary_entry.user, comment.diary_entry) %></td>
- <td width="25%"><span title="<%= l comment.created_at, :format => :friendly %>"><%= time_ago_in_words(comment.created_at, :scope => :"datetime.distance_in_words_ago") %></span></td>
- <td width="50%" class="richtext text-break"><%= comment.body.to_html %></td>
+ <tr>
+ <td width="25%" class="<%= "text-muted" unless comment.visible? %>"><%= link_to comment.diary_entry.title, diary_entry_path(comment.diary_entry.user, comment.diary_entry) %></td>
+ <td width="25%" class="<%= "text-muted" unless comment.visible? %>"><span title="<%= l comment.created_at, :format => :friendly %>"><%= time_ago_in_words(comment.created_at, :scope => :"datetime.distance_in_words_ago") %></span></td>
+ <td width="50%" class="richtext text-break<%= " text-muted" unless comment.visible? %>"><%= comment.body.to_html %></td>
</tr>
<% end -%>
</table>
<div id="mapkey">
- <table class="table table-sm table-borderless mapkey-table">
+ <table class="table table-sm table-borderless mapkey-table mb-0">
<% YAML.load_file(Rails.root.join("config/key.yml")).each do |name,data| %>
<% data.each do |entry| %>
<tr class="mapkey-table-entry" data-layer="<%= name %>" data-zoom-min="<%= entry["min_zoom"] %>" data-zoom-max="<%= entry["max_zoom"] %>">
<% end -%>
</dd>
<% end -%>
+ <% if current_user&.moderator? || current_user&.administrator? %>
+ <dt class="list-inline-item m-0"><%= t ".uid" %></dt>
+ <dd class="list-inline-item"><%= link_to @user.id, api_user_path(:id => @user.id) %></dd>
+ <% end -%>
</dl>
</small>
</div>
reopened_at_by_html: Reactivat %{when} per %{user}
rss:
title: Notes d'OpenStreetMap
+ description_all: Una llista de notes denunciades, comentades o tancades
description_area: Una llista de notes reportades, comentades o bé tancades
a la teva àrea [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
description_item: Un agregador RSS per a la nota %{id}
OpenStreetMap%{registered_trademark_link} són %{open_data}, sota la llicència
%{odc_odbl_link} (ODbL) per la %{osm_foundation_link} (OSMF).
introduction_1_open_data: dades obertes
+ introduction_1_odc_odbl: Llicència de base de dades oberta d'Open Data Commons
introduction_1_osm_foundation: Fundació OpenStreetMap
introduction_2_html: "Sou lliure de copiar, distribuir, transmetre i adaptar
les nostres dades, sempre que especifiqueu que són obra d'OpenStreetMap
També incloem dades amb llicència oberta de les agències públiques de cartografia
i d''altres fonts, entre elles:'
contributors_at_austria: Àustria
+ contributors_at_stadt_wien: Ciutat de Viena
contributors_at_cc_by: CC BY
+ contributors_at_land_vorarlberg: Estat de Vorarlberg
contributors_au_australia: Austràlia
contributors_ca_canada: Canadà
contributors_fi_finland: Finlàndia
contributors_rs_serbia: Sèrbia
contributors_rs_rgz: Autoritat geodèsica sèrbia
contributors_si_slovenia: Eslovènia
+ contributors_si_mkgp: Ministeri d'Agricultura, Forestal i Alimentació
+ contributors_es_credit_html: |-
+ %{spain}: conté dades procedents de
+ l'Institut Geogràfic Nacional d'Espanya (%{ign_link}) i el
+ Sistema Cartogràfic Nacional (%{scne_link}) amb llicència per a la reutilització sota %{cc_by_link}.
contributors_es_spain: Espanya
contributors_es_ign: IGN
contributors_es_cc_by: CC BY 4.0
+ contributors_za_credit_html: '%{south_africa}: conté dades procedents de %{ngi_link},
+ drets d''autor reservats de l''estat.'
contributors_za_south_africa: Sud-àfrica
+ contributors_za_ngi: 'Direcció General: Informació Geoespacial Nacional'
+ contributors_gb_credit_html: |-
+ %{united_kingdom}: conté dades d'Ordnance Survey © Drets d'autor i base de dades de la Corona
+ 2010-2023.
contributors_gb_united_kingdom: Regne Unit
contributors_2_html: Per a més detalls sobre aquestes i altres fonts que s'han
usat per ajudar a millorar OpenStreetMap, vegeu %{contributors_page_link}
licence: Llicència
licence_details_html: Les dades d'OpenStreetMap estan sota la llicència %{odbl_link}
(ODbL).
+ odbl: Llicència de base de dades oberta d'Open Data Commons
too_large:
advice: 'Si l''exportació anterior falla, proveu-ho amb alguna de les fonts
incloses a la llista següent:'
openid: OpenID
google: Google
facebook: Facebook
+ microsoft: Microsoft
github: GitHub
wikipedia: Wicipedia
api:
no_comments: Dim sylwadau
edit_link: Golygu'r cofnod hwn
hide_link: Cuddio'r cofnod hwn
+ unhide_link: Datguddio'r cofnod hwn
confirm: Cadarnhau
report: Adrodd y cofnod hwn
diary_comment:
pylon: Peilon
station: Gorsaf Awyr
t-bar: Lifft T-Bar
+ "yes": Awyrffordd
aeroway:
aerodrome: Maesawyr
airstrip: Llain Codi
hangar: Hangar
helipad: Pad Hofrennydd
holding_position: Man aros
+ navigationaid: Cymorth Cyfeiriadu Hedfan
parking_position: Lle Parcio
runway: Rhedfa Awyr
+ taxilane: Safle Tacsis
taxiway: Safle tacsi
terminal: Terfynell Maes Awyr
windsock: Hosan wynt
loading_dock: Doc Llwytho
love_hotel: Gwesty Cariad
marketplace: Marchnad
+ mobile_money_agent: Asiant Arian Symudol
monastery: Mynachdy
+ money_transfer: Trosglwyddo Arian
motorcycle_parking: Man Parcio Beiciau Modur
music_school: Ysgol Gerddoriaeth
nightclub: Clwb Nôs
parking: Parcio
parking_entrance: Mynedfa Man Parcio
parking_space: Man Parcio
+ payment_terminal: Terfynell Talu
pharmacy: Fferyllfa
place_of_worship: Man addoli
police: Heddlu
post_office: Swyddfa Bost
prison: Carchar
pub: Tafarn
+ public_bath: Bath Cyhoeddus
+ public_bookcase: Silff Lyfrau Gyhoeddus
public_building: Adeilad Cyhoeddus
+ ranger_station: Gorsaf Ceidwad
recycling: Pwynt Ailgylchu
restaurant: Bwyty
school: Ysgol
stationery: Siop Offer Swyddfa
supermarket: Archfarchnad
tailor: Teiliwr
+ tattoo: Siop Tatŵ
+ tea: Siop De
ticket: Siop Docynau
tobacco: Siop Dybaco
toys: Siop Degannau
vacant: Siop Wag
video: Siop Fideos
video_games: Siop Gemau Fideo
+ wholesale: Siop Gyfanwerthu
wine: Siop Win
"yes": Siop
tourism:
resolve: Datrys
ignore: Anwybyddu
reopen: Ailagor
+ read_reports: Darllen Adroddiadau
+ new_reports: Adroddiadau Newydd
helper:
reportable_title:
note: 'Nodyn #%{note_id}'
inbox:
title: Mewnflwch
my_inbox: Fy Mewnflwch
+ my_outbox: Fy Mlwch Allan
messages: Mae gennych %{new_messages} a %{old_messages}
from: Gan
subject: Pwnc
image size hint: (delweddau sgwâr o leiaf 100x100 yw'r gorau)
home location: Lleoliad Cartref
no home location: Nid ydych wedi gosod eich lleoliad cartref.
+ show: Dangos
+ delete: Dileu
+ undelete: Dadwneud dileu
+ update:
+ success: Proffil wedi'i ddiweddaru.
+ failure: Ni ellir diweddaru'r proffil.
sessions:
new:
title: Mewngofnodi
open_data_title: Data Agored
open_data_open_data: data agored
legal_title: Cyfreithiol
+ legal_1_1_openstreetmap_foundation: OpenStreetMap Foundation
legal_1_1_terms_of_use: Telerau Gwasanaeth
+ legal_1_1_aup: Polisïau Defnydd Derbyniol
legal_1_1_privacy_policy: Polisi Preifatrwydd
legal_2_1_contact_the_osmf: cysylltwch â'r OSMF
partners_title: Partneriaid
invalid: Nid yw'r tocyn awdurdodiad yn ddilys.
revoke:
flash: Rydych wedi diddymu'r tocyn ar gyfer %{application}.
+ scopes:
+ write_notes: Addasu nodiadau
oauth_clients:
new:
title: Cofrestru rhaglen newydd
remove as friend: Unfriend
add as friend: Add Friend
mapper since: "Mapper since:"
+ uid: "User id:"
ct status: "Contributor terms:"
ct undecided: Undecided
ct declined: Declined
reopened_at_by_html: Reactivado %{when} por %{user}
rss:
title: Notas de OpenStreetMap
+ description_all: Una lista de notas denunciadas, comentadas o cerradas.
description_area: Una lista de notas, informadas, comentadas o cerradas en
tu área [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
description_item: Un suministro RSS para notas %{id}
no home location: No has introducido tu ubicación de casa.
update home location on click: ¿Actualizar tu lugar de origen cuando hagas clic
sobre el mapa?
+ show: Mostrar
+ delete: Eliminar
+ undelete: Deshacer eliminación
update:
success: Perfil actualizado.
failure: No se pudo actualizar el perfil.
start_mapping: Comenzar a mapear
add_a_note:
title: ¿No tienes tiempo para editar? ¡Añade una nota!
- para_1: Si sólo deseas corregir algo pequeño y no tienes tiempo para registrarse
- y aprender a editar, es fácil añadir una nota.
+ para_1: Si sólo deseas corregir algo pequeño y no tienes tiempo para registrarte
+ y aprender a editar, añadir una nota es fácil.
para_2_html: |-
Basta con ir a %{map_link} y pulsar en el icono de nota: %{note_icon}.
Esto añadirá un marcador al mapa que se puede mover al arrastrarlo.
index:
title: Notas remitidas o comentadas por %{user}
heading: Notas de %{user}
- subheading_html: Notas remitidas o comentadas por %{user}
+ subheading_html: Notas %{submitted} o %{commented} por %{user}
+ subheading_submitted: creadas
+ subheading_commented: comentada
no_notes: Ninguna nota
id: Identificador
creator: Creador
reopened_at_by_html: Réactivé à %{when} par %{user}
rss:
title: Notes OpenStreetMap
+ description_all: Une liste de notes rapportées, commentées ou fermées
description_area: Une liste de notes, signalées, commentées ou fermées dans
votre zone [(%{min_lat} ; %{min_lon}) – (%{max_lat} ; %{max_lon})]
description_item: Un fil RSS pour la note %{id}
reopened_at_by_html: Reactivado %{when} por %{user}
rss:
title: Notas do OpenStreetMap
- description_area: Unha listaxe das notas, denunciadas, comentadas ou pechadas
+ description_all: Unha lista das notas denunciadas, comentadas ou pechadas
+ description_area: Unha lista das notas denunciadas, comentadas ou pechadas
na túa zona [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
description_item: Unha fonte de novas RSS para a nota %{id}
opened: nota nova (preto de %{place})
reopened_at_by_html: הופעלה מחדש %{when} על־ידי %{user}
rss:
title: הערות של OpenStreetMap
+ description_all: רשימה של הערות מדווחות, שהגיבו עליהן או שנסגרו
description_area: רשימת הערות שהוספו, שהתקבלו עליהן הערות ושנפתרו באזור שלך
[(%{min_lat}|%{min_lon}) – (%{max_lat}|%{max_lon})]
description_item: הזנת rss עבור ההערה %{id}
place:
city: Grad
country: Država
- county: Županija/grofovija
+ county: Županija
farm: Farma
hamlet: Zaseok
house: Kuća
reopened_at_by_html: 'Újraaktiválta %{user} ekkor: %{when}'
rss:
title: OpenStreetMap jegyzetek
+ description_all: Jelentett, kommentált vagy lezárt feljegyzések listája
description_area: Bejelentett, hozzászólással ellátott vagy lezárt jegyzetek
a területeden [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
description_item: RSS hírcsatorna a %{id} jegyzethez
reopened_at_by_html: Reactivate %{when} per %{user}
rss:
title: Notas de OpenStreetMap
+ description_all: Un lista de notas reportate, commentate o claudite
description_area: Un lista de notas reportate, commentate o claudite in tu
area [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
description_item: Syndication RSS pro le nota %{id}
errors:
messages:
invalid_email_address: schéngt keng valabel E-Mail-Adress ze sinn
- email_address_not_routable: ass net routingfäheg
+ email_address_not_routable: ass net routingfäeg
models:
acl: Zougrëffssteierlëscht
changeset: Set vun Ännerungen
allow_write_api: d'Kaart änneren
allow_read_gpx: Zougrëff op hir privat GPS-Spueren
allow_write_gpx: GPS-Spueren eroplueden
- allow_write_notes: Notizë beaarbechten
+ allow_write_notes: Notize beaarbechten
diary_comment:
body: Text
diary_entry:
language_code: Sprooch
doorkeeper/application:
name: Numm
- redirect_uri: Weiderleedungs-URIën
+ redirect_uri: Weiderleedungs-URIen
confidential: Confidentiel Applikatioun?
scopes: Autorisatiounen
friend:
help:
doorkeeper/application:
confidential: Et gëtt eng Applikatioun verwent, bei där d'Clientsgeheimnis
- vertraulech behandelt ka ginn (nativ- an eesäiteg Appë sinn net vertraulech)
+ vertraulech behandelt ka ginn (nativ- an eesäiteg Appe sinn net vertraulech)
redirect_uri: Pro URI eng Zeil benotzen
trace:
tagstring: Mat Komma getrennt
user_block:
reason: De Grond, firwat de Benotzer / d'Benotzerin gespaart ass. Sief wannechgelift
esou roueg a sachlech wéi méiglech. Beschreif d'Lag méiglechst detailléiert
- an denk dorun, datt déng Noriicht ëffentlech siichtbar ass. Denk och dorun,
+ an denk dorun, datt deng Noriicht ëffentlech siichtbar ass. Denk och dorun,
datt net all d'Benotzer de Jargon vum Gemeinschaftsprojet verstinn a benotz
wannechgelift Formuléierungen, déi fir Laie verständlech sinn.
needs_view: Muss sech de Benotzer umellen, ier dës Spär opgehuewe gëtt?
reopened_at_by_html: Повторно отворено %{when} од %{user}
rss:
title: Белешки на OpenStreetMap
+ description_all: Список на пријавени, коментирани или затворени белешки
description_area: Список на белешки, создадени, искометирани или затворени,
во вашата околина [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
description_item: RSS-тековник за белешката %{id}
openid: OpenID
google: Google
facebook: Facebook
+ microsoft: Microsoft
github: GitHub
wikipedia: Wikipedia
api:
home location: 'Położenie domu:'
no home location: Nie wpisałeś swojej lokalizacji domowej.
update home location on click: Uaktualnianie położenia kliknięciem na mapie
+ show: Pokaż
+ delete: Usuń
+ undelete: Cofnij usunięcie
update:
success: Zaktualizowano profil użytkownika.
failure: Nie udało się zaktualizować profilu.
legal_title: Pytania prawne
legal_1_1_openstreetmap_foundation: Fundacja OpenStreetMap
legal_1_1_terms_of_use: Warunki użytkowania
+ legal_1_1_aup: Zasady dozwolonego użytku
legal_1_1_privacy_policy: Polityka prywatności
legal_2_1_contact_the_osmf: skontaktuj się z OSM
partners_title: Partnerzy
title: Uwagi utworzone lub skomentowane przez %{user}
heading: Uwagi użytkownika %{user}
subheading_html: Uwagi utworzone lub skomentowane przez %{user}
+ subheading_commented: skomentował
no_notes: Brak uwag
id: Identyfikator
creator: Autor
openid: OpenID
google: Google
facebook: Facebook
+ microsoft: Microsoft
github: GitHub
wikipedia: Wikipédia
api:
history_title_html: 'Histórico da linha: %{name}'
nodes: Pontos
nodes_count:
- one: 1 nó
+ one: '%{count} nó'
other: '%{count} nós'
also_part_of_html:
one: parte da linha %{related_ways}
reply_link: Enviar uma mensagem ao autor
comment_count:
one: '%{count} comentário'
- zero: Nenhum comentário
other: '%{count} comentários'
+ no_comments: Sem comentários
edit_link: Editar esta postagem
hide_link: Ocultar essa postagem
unhide_link: Mostrar esta entrada
show:
title: '%{status} Problema #%{issue_id}'
reports:
- zero: Sem denúncias
- one: '%{count} denúncia'
- other: '%{count} denúncias'
+ one: '%{count} relatório'
+ other: '%{count} relatórios'
+ no_reports: Sem relatórios
report_created_at: Primeiro relatado em %{datetime}
last_resolved_at: Resolvido pela última vez em %{datetime}
last_updated_at: Última atualização em %{datetime} por %{displayname}
home location: Local principal
no home location: Você ainda não definiu o seu local principal.
update home location on click: Atualizar local principal ao clicar no mapa?
+ show: Exibir
+ delete: Excluir
+ undelete: Desfazer eliminação
update:
success: Perfil atualizado.
failure: Não foi possível atualizar o perfil.
title: Entrar com o Facebook
alt: Entrar com uma conta do Facebook
microsoft:
- title: Entrar com o Windows Live
- alt: Entrar com uma conta do Windows Live
+ title: Entrar com o Microsoft
+ alt: Entrar com uma conta do Microsoft
github:
title: Entrar com o GitHub
alt: Entrar com conta do GitHub
contributors_nz_new_zealand: Nova Zelândia
contributors_nz_linz_data_service: LINZ Data Service
contributors_nz_cc_by: CC BY 4.0
+ contributors_rs_credit_html: '%{serbia}%{open_data_portal}: Contém dados de
+ %{rgz_link} e %{open_data_portal} (informações públicas da Sérvia), 2018.'
+ contributors_rs_serbia: Sérvia
+ contributors_rs_rgz: Autoridade Geodésica da Sérvia
+ contributors_rs_open_data_portal: Portal Nacional de Dados Abertos
contributors_si_credit_html: |-
%{slovenia}: Contém dados da %{gu_link} e %{mkgp_link}
(informação pública da Eslovénia).
index:
title: Notas postadas ou comentadas por %{user}
heading: Notas de %{user}
- subheading_html: Notas postadas ou comentadas por %{user}
+ subheading_html: Notas %{submitted} or %{commented} por %{user}
+ subheading_submitted: submetido
+ subheading_commented: comentado
no_notes: Sem notas
id: ID
creator: Criador
reopened_at_by_html: Torrada a ativare %{when} dae %{user}
rss:
title: Notas de OpenStreetMap
+ description_all: Una lista de notas sinnaladas, cummentadas o tancadas
description_area: Una lista de notas, cummentadas o tancadas in s'àrea tua
[(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
description_item: Unu flussu de informatziones rss pro sa nota %{id}
reopened_at_by_html: Znova aktiviral_a %{user} %{when}
rss:
title: OpenStreetMap opombe
+ description_all: Seznam sporočenih, komentiranih ali zaprtih opomb
description_area: Seznam opomb, prijavljenih, komentiranih ali zaprtih na
vašem območju [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
description_item: RSS vir za opombo %{id}
OpenStreetMap, piyasa bilgisi üzerinde durmaktadır. Katkıda bulunanlar,
OSM'nin doğru ve güncel olduğunu doğrulamak için havadan görüntüler, GPS cihazları ve düşük teknoloji alan haritaları kullanmaktadır.
community_driven_title: Katılım Kaynaklı
+ community_driven_1_html: "OpenStreetMap topluluğu çeşitlidir, tutkuludur ve
+ her geçen gün büyümektedir.\nKatkıda bulunanlarımız arasında meraklı haritacılar,
+ GIS uzmanları, OSM sunucularını çalıştıran mühendisler, felaketten etkilenen
+ alanların haritasını çıkaran insani yardım görevlileri ve çok daha fazlası
+ yer alıyor.\nTopluluk hakkında daha fazla bilgi edinmek için %{osm_blog_link},\n%{user_diaries_link},
+ %{community_blogs_link} ve \n%{osm_foundation_link} web sayfalarına göz atın."
community_driven_osm_blog: OpenStreetMap Blogu
community_driven_user_diaries: kullanıcı günlükleri
community_driven_community_blogs: topluluk blogları
community_driven_osm_foundation: OSM Vakfı
open_data_title: Açık Veri
+ open_data_1_html: 'OpenStreetMap, bir %{open_data}dir: OpenStreetMap''e ve katkıda
+ bulunanlara atıf yaptığınız sürece onu herhangi bir amaç için kullanmakta
+ özgürsünüz. Verileri belirli şekillerde değiştirir veya verilerden yararlanırsanız
+ sonucu yalnızca aynı lisans kapsamında dağıtabilirsiniz. Ayrıntılar için %{copyright_license_link}na
+ bakınız.'
open_data_open_data: açık veri
open_data_copyright_license: Telif Hakkı ve Lisans sayfası
legal_title: Yasal
+ legal_1_1_html: Bu site ve diğer birçok ilgili hizmet, topluluk adına %{openstreetmap_foundation_link}
+ (OSMF) tarafından resmî olarak işletilmektedir. OSMF tarafından işletilen
+ tüm hizmetlerin kullanımı %{terms_of_use_link}, %{aup_link} ve %{privacy_policy_link}na
+ tabidir.
legal_1_1_openstreetmap_foundation: OpenStreetMap Vakfı
legal_1_1_terms_of_use: Kullanım Şartları
legal_1_1_aup: Kabul Edilebilir Kullanım Politikaları
bulunun.
credit_2_2: Verilerin Açık Veritabanı Lisansı kapsamında mevcut olduğunu açıkça
belirtin.
+ credit_3_html: Telif hakkı bildirimi açısından, verilerimizi nasıl kullandığınıza
+ bağlı olarak bunun nasıl görüntülenmesi gerektiği konusunda farklı gereksinimlerimiz
+ vardır. Örneğin, göz atılabilir bir harita, basılı bir harita veya statik
+ bir resim oluşturmanıza bağlı olarak telif hakkı bildiriminin nasıl gösterileceği
+ konusunda farklı kurallar geçerlidir. Gereksinimlere ilişkin tüm ayrıntıları %{attribution_guidelines_link}
+ kısmında bulabilirsiniz.
+ credit_3_attribution_guidelines: İlişkilendirme Kuralları
+ credit_4_1_html: Verilerin Açık Veritabanı Lisansı kapsamında mevcut olduğunu
+ açıkça belirtmek için %{this_copyright_page_link}na bağlantı verebilirsiniz.
+ Alternatif olarak ve OSM'yi bir veri formunda dağıtıyorsanız bir gereklilik
+ olarak lisansları doğrudan adlandırabilir ve bunlara bağlantı verebilirsiniz.
+ Bağlantıların mümkün olmadığı ortamlarda (örneğin basılı eserlerde), okuyucularınızı
+ openstreetmap.org'a (belki 'OpenStreetMap'i bu tam adrese genişleterek)
+ ve opendatacommons.org'a yönlendirmenizi öneririz. Bu örnekte atıf haritanın
+ köşesinde görünür.
credit_4_1_this_copyright_page: bu telif hakkı sayfası
attribution_example:
alt: Web sayfasıında OpenStreetMap atıf etmek için bir örnek
title: Atıf örneği
more_title_html: Daha fazlasını öğrenin
+ more_1_1_html: Verilerimizin kullanımı ve bize nasıl atıfta bulunacağınız
+ hakkında daha fazla bilgiyi %{osmf_licence_page_link}nda bulabilirsiniz.
more_1_1_osmf_licence_page: OSMF Lisans sayfası
+ more_2_1_html: OpenStreetMap açık veri olmasına rağmen üçüncü taraflara ücretsiz
+ bir harita API'si sağlayamıyoruz. %{api_usage_policy_link}, %{tile_usage_policy_link}
+ ve %{nominatim_usage_policy_link} sayfalarına bakınız.
more_2_1_api_usage_policy: API Kullanım Politikası
more_2_1_tile_usage_policy: Karo Kullanım Politikası
+ more_2_1_nominatim_usage_policy: İsmen Kullanım Politikası
contributors_title_html: Katkıda Bulunanlar
contributors_intro_html: |-
Binlerce kişi projemize katkıda bulunmaktadır. Ulusal
haritalama ajanslarından ve diğer kaynaklardan
açık-lisanslı veriler de içeriyoruz:
+ contributors_at_credit_html: '%{austria}: %{stadt_wien_link} (%{cc_by_link}
+ kapsamında), %{land_vorarlberg_link} ve Land Tirol''den (%{cc_by_at_with_amendments_link}
+ kapsamında) verileri içerir.'
contributors_at_austria: Avusturya
contributors_at_stadt_wien: Stadt Wien
contributors_at_cc_by: CC-BY
contributors_at_land_vorarlberg: |-
Land
Vorarlberg
+ contributors_at_cc_by_at_with_amendments: değişikliklerle birlikte CC BY AT
contributors_au_australia: Avustralya
contributors_au_geoscape_australia: Geoscape Australia
contributors_au_cc_licence: Creative Commons Atıf 4.0 Uluslararası lisansı
%{slovenia}: %{gu_link} ve %{mkgp_link}
(Slovenya'nın kamuya açık bilgileri) verilerini içerir.
contributors_si_slovenia: Slovenya
+ contributors_si_gu: Etüt ve Harita Kurumu
contributors_si_mkgp: Tarım, Orman ve Gıda Bakanlığı
contributors_es_spain: İspanya
contributors_es_ign: IGN
trace:
pending: BEKLEMEDE
count_points:
- one: 1 puan
+ one: '%{count} puan'
other: '%{count} puan'
more: daha fazla
trace_details: İz Ayrıntılarını Görüntüle
time_past_html: '%{time} bitti.'
block_duration:
hours:
- one: 1 saat
+ one: '%{count} saat'
other: '%{count} saat'
days:
- one: 1 gün
+ one: '%{count} gün'
other: '%{count} gün'
weeks:
- one: 1 hafta
+ one: '%{count} hafta'
other: '%{count} hafta'
months:
- one: 1 ay
+ one: '%{count} ay'
other: '%{count} ay'
years:
- one: 1 yıl
+ one: '%{count} yıl'
other: '%{count} yıl'
blocks_on:
title: '%{name} kişisinin engelleri'
osm_france: OpenStreetMap Fransa
andy_allan: Andy Allan
memomaps: MeMo Haritaları
+ hotosm_name: İnsani OpenStreetMap Ekibi
site:
edit_tooltip: Haritayı düzenle
edit_disabled_tooltip: Haritayı düzenlemek için yakınlaştırın
reopened_at_by_html: 於%{when}由%{user}重新開啟
rss:
title: OpenStreetMap 註記
+ description_all: 已報告、評論、或是關閉註記的清單
description_area: 在你的區域[(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]所報告、評論或關閉的註記的清單
description_item: 註記 %{id} 的 RSS feed
opened: 新的註記 (在 %{place} 附近)
assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks']", 0
assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks_by']", 0
assert_select "a[href='/blocks/new/#{ERB::Util.u(user.display_name)}']", 0
+ assert_select "a[href='/api/0.6/user/#{ERB::Util.u(user.id)}']", 0
end
# Login as a moderator
assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks']", 0
assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks_by']", 0
assert_select "a[href='/blocks/new/#{ERB::Util.u(user.display_name)}']", 1
+ assert_select "a[href='/api/0.6/user/#{ERB::Util.u(user.id)}']", 1
end
end
changeset
- association :author, :factory => :user
+ author :factory => :user
end
end
FactoryBot.define do
factory :friendship do
- association :befriender, :factory => :user
- association :befriendee, :factory => :user
+ befriender :factory => :user
+ befriendee :factory => :user
end
end
FactoryBot.define do
factory :issue do
# Default to reporting users
- association :reportable, :factory => :user
- association :reported_user, :factory => :user
+ reportable :factory => :user
+ reported_user :factory => :user
# Default to assigning to an administrator
assigned_role { "administrator" }
sequence(:body) { |n| "Body text for message #{n}" }
sent_on { Time.now.utc }
- association :sender, :factory => :user
- association :recipient, :factory => :user
+ sender :factory => :user
+ recipient :factory => :user
trait :unread do
message_read { false }
FactoryBot.define do
factory :oauth_access_grant, :class => "Doorkeeper::AccessGrant" do
- association :resource_owner_id, :factory => :user
- association :application, :factory => :oauth_application
+ resource_owner_id :factory => :user
+ application :factory => :oauth_application
expires_in { 86400 }
redirect_uri { application.redirect_uri }
FactoryBot.define do
factory :oauth_access_token, :class => "Doorkeeper::AccessToken" do
- association :application, :factory => :oauth_application
+ application :factory => :oauth_application
end
end
sequence(:name) { |n| "OAuth application #{n}" }
sequence(:redirect_uri) { |n| "https://example.com/app/#{n}" }
- association :owner, :factory => :user
+ owner :factory => :user
end
end
longitude { 1 * GeoRecord::SCALE }
changeset
- association :current_node, :factory => :node
+ current_node :factory => :node
visible { true }
timestamp { Time.now.utc }
version { 1 }
changeset
- association :current_relation, :factory => :relation
+ current_relation :factory => :relation
end
end
old_relation
# Default to creating nodes, but could be ways or relations as members
- association :member, :factory => :node
+ member :factory => :node
end
end
version { 1 }
changeset
- association :current_way, :factory => :way
+ current_way :factory => :way
end
end
relation
# Default to creating nodes, but could be ways or relations as members
- association :member, :factory => :node
+ member :factory => :node
end
end
ends_at { Time.now.utc + 1.day }
user
- association :creator, :factory => :moderator_user
+ creator :factory => :moderator_user
trait :needs_view do
needs_view { true }
end
trait :revoked do
- association :revoker, :factory => :moderator_user
+ revoker :factory => :moderator_user
end
end
end
FactoryBot.define do
factory :user_role do
user
- association :granter, :factory => :user
+ granter :factory => :user
end
end
assert PasswordHash.upgrade?("3wYbPiOxk/tU0eeIDjUhdvi8aDP3AbFtwYKKxF1IhGg=", "sha512!10000!OUQLgtM7eD8huvanFT5/WtWaCwdOdrir8QOtFwxhO0A=")
end
- def test_argon2_upgradeable
- assert PasswordHash.check("$argon2id$v=19$m=65536,t=1,p=1$KXGHWfWMf5H5kY4uU3ua8A$YroVvX6cpJpljTio62k19C6UpuIPtW7me2sxyU2dyYg", nil, "password")
- assert_not PasswordHash.check("$argon2id$v=19$m=65536,t=1,p=1$KXGHWfWMf5H5kY4uU3ua8A$YroVvX6cpJpljTio62k19C6UpuIPtW7me2sxyU2dyYg", nil, "wrong")
- assert PasswordHash.upgrade?("$argon2id$v=19$m=65536,t=1,p=1$KXGHWfWMf5H5kY4uU3ua8A$YroVvX6cpJpljTio62k19C6UpuIPtW7me2sxyU2dyYg", nil)
- end
-
- def test_argon2
+ def test_argon2_t2_m16_p1
assert PasswordHash.check("$argon2id$v=19$m=65536,t=2,p=1$b2E7zSvjT6TC5DXrqvfxwg$P4hly807ckgYc+kfvaf3rqmJcmKStzw+kV14oMaz8PQ", nil, "password")
assert_not PasswordHash.check("$argon2id$v=19$m=65536,t=2,p=1$b2E7zSvjT6TC5DXrqvfxwg$P4hly807ckgYc+kfvaf3rqmJcmKStzw+kV14oMaz8PQ", nil, "wrong")
- assert_not PasswordHash.upgrade?("$argon2id$v=19$m=65536,t=2,p=1$b2E7zSvjT6TC5DXrqvfxwg$P4hly807ckgYc+kfvaf3rqmJcmKStzw+kV14oMaz8PQ", nil)
+ assert_not PasswordHash.check("$argon2id$v=19$m=65536,t=2,p=1$b2E7zSvwrong5DXrqvfxwg$P4hly807ckgYc+kfvaf3rqmJcmKStzw+kV14oMaz8PQ", nil, "password")
+ assert PasswordHash.upgrade?("$argon2id$v=19$m=65536,t=2,p=1$b2E7zSvjT6TC5DXrqvfxwg$P4hly807ckgYc+kfvaf3rqmJcmKStzw+kV14oMaz8PQ", nil)
+ end
+
+ def test_argon2_t3_m16_p4
+ assert PasswordHash.check("$argon2id$v=19$m=65536,t=3,p=4$uxzL4aYTEDTRr2+KNA1qNQ$yuNOtH+IsCwWUbE4OGu+hIC0e4iyZ2wGhaCsQY1mJpI", nil, "password")
+ assert_not PasswordHash.check("$argon2id$v=19$m=65536,t=3,p=4$uxzL4aYTEDTRr2+KNA1qNQ$yuNOtH+IsCwWUbE4OGu+hIC0e4iyZ2wGhaCsQY1mJpI", nil, "wrong")
+ assert_not PasswordHash.check("$argon2id$v=19$m=65536,t=3,p=4$uxzL4aYwrongr2+KNA1qNQ$yuNOtH+IsCwWUbE4OGu+hIC0e4iyZ2wGhaCsQY1mJpI", nil, "password")
+ assert_not PasswordHash.upgrade?("$argon2id$v=19$m=65536,t=3,p=4$uxzL4aYTEDTRr2+KNA1qNQ$yuNOtH+IsCwWUbE4OGu+hIC0e4iyZ2wGhaCsQY1mJpI", nil)
end
def test_default