diff --git a/.gitignore b/.gitignore index a2b7cbb6e..ea96347f8 100644 --- a/.gitignore +++ b/.gitignore @@ -22,7 +22,7 @@ spec/fixtures/*.y*ml spec/fixtures/*.fixture.* coverage/* -# Uploded files and local files +# Uploaded files and local files public/uploads/* public/assets/* public/source.tar* diff --git a/Gemfile b/Gemfile index 63586de42..a92a25eca 100644 --- a/Gemfile +++ b/Gemfile @@ -6,6 +6,7 @@ gem 'foreigner', '0.9.1' gem 'bundler', '>= 1.0.0' gem 'chef', '0.9.12', :require => false +gem 'ohai', '0.5.8', :require => false #Chef dependency gem 'nokogiri', '1.4.3.1' @@ -33,7 +34,7 @@ gem 'addressable', '2.2.2', :require => 'addressable/uri' gem 'json', '1.4.6' gem 'http_accept_language', :git => 'git://github.com/iain/http_accept_language.git', :ref => '0b78aa7849fc90cf9e12' -gem 'thin', '1.2.8', :require => false +gem 'thin', '1.2.11', :require => false #Websocket gem 'em-websocket', :git => 'git://github.com/igrigorik/em-websocket', :ref => 'e278f5a1c4db60be7485' @@ -60,6 +61,7 @@ gem 'SystemTimer', '1.2.1' unless RUBY_VERSION.include? '1.9' || RUBY_PLATFORM = group :development do gem 'capistrano', '2.5.19', :require => false gem 'capistrano-ext', '1.2.1', :require => false + gem 'sod', :git => "git://github.com/MikeSofaer/sod.git" end group :test, :development do diff --git a/Gemfile.lock b/Gemfile.lock index adf9621aa..be193e65b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -7,6 +7,13 @@ GIT activesupport (>= 2.3.0) nokogiri (>= 1.3.3) +GIT + remote: git://github.com/MikeSofaer/sod.git + revision: 08e990601bfa6ffd3224a2e4c792df9eae712693 + specs: + sod (0.0.1) + net-scp + GIT remote: git://github.com/diaspora/acts-as-taggable-on.git revision: c3592fe1a906f6ff1cd12766c5cf1152c51eec40 @@ -65,6 +72,10 @@ PATH GEM remote: http://rubygems.org/ specs: + POpen4 (0.1.4) + Platform (>= 0.4.0) + open4 + Platform (0.4.0) SystemTimer (1.2.1) abstract (1.0.0) actionmailer (3.0.3) @@ -138,7 +149,7 @@ GEM uuidtools childprocess (0.1.7) ffi (~> 0.6.3) - closure-compiler (1.0.0) + closure-compiler (1.1.1) cloudfiles (1.4.10) mime-types (>= 1.16) columnize (0.3.2) @@ -153,7 +164,7 @@ GEM cucumber-rails (0.3.2) cucumber (>= 0.8.0) culerity (0.2.15) - daemons (1.1.0) + daemons (1.1.2) database_cleaner (0.6.0) devise (1.1.3) bcrypt-ruby (~> 2.1.2) @@ -189,13 +200,13 @@ GEM nokogiri (~> 1.4.3.1) ruby-hmac foreigner (0.9.1) - formatador (0.1.2) + formatador (0.1.3) fuubar (0.0.4) chalofa_ruby-progressbar (~> 0.0.9) rspec (~> 2.0) rspec-instafail (~> 0.1.4) gem_plugin (0.2.3) - gherkin (2.3.5) + gherkin (2.3.6) json (>= 1.4.6) haml (3.0.25) hashie (0.4.0) @@ -229,7 +240,7 @@ GEM mixlib-log mixlib-cli (1.2.0) mixlib-config (1.1.2) - mixlib-log (1.2.0) + mixlib-log (1.3.0) moneta (0.6.0) mongrel (1.1.5) cgi_multipart_eof_fix (>= 2.4) @@ -289,10 +300,11 @@ GEM oa-enterprise (= 0.1.6) oa-oauth (= 0.1.6) oa-openid (= 0.1.6) + open4 (1.0.1) polyglot (0.3.1) pyu-ruby-sasl (0.0.3.2) rack (1.2.2) - rack-mount (0.6.13) + rack-mount (0.6.14) rack (>= 1.0.0) rack-openid (1.2.0) rack (>= 1.1.0) @@ -314,7 +326,7 @@ GEM thor (~> 0.14.4) rake (0.8.7) rcov (0.9.9) - redis (2.1.1) + redis (2.2.0) redis-namespace (0.8.0) redis (< 3.0.0) resque (1.10.0) @@ -358,13 +370,13 @@ GEM json_pure rubyzip simple_oauth (0.1.4) - sinatra (1.2.1) + sinatra (1.2.3) rack (~> 1.1) tilt (< 2.0, >= 1.2.2) subexec (0.0.4) - systemu (1.2.0) + systemu (2.2.0) term-ansicolor (1.0.5) - thin (1.2.8) + thin (1.2.11) daemons (>= 1.0.9) eventmachine (>= 0.12.6) rack (>= 1.0.0) @@ -375,7 +387,7 @@ GEM typhoeus (0.2.4) mime-types mime-types - tzinfo (0.3.25) + tzinfo (0.3.26) uuidtools (2.1.2) vegas (0.1.8) rack (>= 1.0.0) @@ -385,8 +397,9 @@ GEM addressable (>= 2.2.2) crack (>= 0.1.7) will_paginate (3.0.pre2) - xml-simple (1.0.14) - yui-compressor (0.9.4) + xml-simple (1.0.15) + yui-compressor (0.9.6) + POpen4 (>= 0.1.4) PLATFORMS ruby @@ -426,6 +439,7 @@ DEPENDENCIES mongrel mysql2 (= 0.2.6) nokogiri (= 1.4.3.1) + ohai (= 0.5.8) omniauth (= 0.1.6) rails (= 3.0.3) rcov @@ -437,7 +451,8 @@ DEPENDENCIES rspec-rails (>= 2.0.0) ruby-debug selenium-webdriver (= 0.1.3) - thin (= 1.2.8) + sod! + thin (= 1.2.11) twitter! typhoeus webmock diff --git a/Sodfile b/Sodfile new file mode 100644 index 000000000..e9f2a4a77 --- /dev/null +++ b/Sodfile @@ -0,0 +1,6 @@ +production: + user: root + repo: git@github.com:diaspora/diaspora.git + app_dir: /usr/local/app + cookbook: centos + ruby_version: ree-1.8.7-2011.03 diff --git a/app/controllers/apis_controller.rb b/app/controllers/apis_controller.rb index 1a24696c5..4bad3f232 100644 --- a/app/controllers/apis_controller.rb +++ b/app/controllers/apis_controller.rb @@ -1,7 +1,7 @@ class ApisController < ApplicationController #We should start with this versioned, V0ApisController BEES before_filter :authenticate_user!, :only => [:home_timeline] respond_to :json - + #posts def public_timeline set_defaults @@ -30,9 +30,9 @@ class ApisController < ApplicationController #We should start with this versione def home_timeline set_defaults - timeline = current_user.raw_visible_posts.includes(:comments, :photos, :likes, :dislikes).paginate( - :page => params[:page], :per_page => params[:per_page], :order => "#{params[:order]} DESC") - + timeline = current_user.visible_posts(:max_time => params[:max_time], + :limit => params[:per_page], + :order => "#{params[:order]} DESC").includes(:comments, :photos, :likes, :dislikes) respond_with timeline do |format| format.json{ render :json => timeline.to_json(:format => :twitter) } end @@ -45,7 +45,7 @@ class ApisController < ApplicationController #We should start with this versione format.json{ render :json => status.to_json(:format => :twitter) } end else - render(:nothing => true, :status => 404) + render(:nothing => true, :status => 404) end end @@ -62,7 +62,7 @@ class ApisController < ApplicationController #We should start with this versione format.json{ render :json => person.to_json(:format => :twitter) } end else - render(:nothing => true, :status => 404) + render(:nothing => true, :status => 404) end end @@ -78,7 +78,7 @@ class ApisController < ApplicationController #We should start with this versione format.json{ render :json => people.to_json(:format => :twitter) } end else - render(:nothing => true, :status => 404) + render(:nothing => true, :status => 404) end end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 5bbf8cad3..752fc5591 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -3,6 +3,8 @@ # the COPYRIGHT file. class ApplicationController < ActionController::Base + clear_helpers + helper :layout, :error_messages has_mobile_fu protect_from_forgery :except => :receive diff --git a/app/controllers/aspect_memberships_controller.rb b/app/controllers/aspect_memberships_controller.rb index 72631232b..c4b1aad88 100644 --- a/app/controllers/aspect_memberships_controller.rb +++ b/app/controllers/aspect_memberships_controller.rb @@ -4,6 +4,7 @@ # class AspectMembershipsController < ApplicationController + helper :aspects before_filter :authenticate_user! def destroy diff --git a/app/controllers/aspects_controller.rb b/app/controllers/aspects_controller.rb index 79b62d992..ec5bdbccd 100644 --- a/app/controllers/aspects_controller.rb +++ b/app/controllers/aspects_controller.rb @@ -3,6 +3,7 @@ # the COPYRIGHT file. class AspectsController < ApplicationController + helper :comments before_filter :authenticate_user! before_filter :save_sort_order, :only => :index before_filter :ensure_page, :only => :index @@ -30,10 +31,10 @@ class AspectsController < ApplicationController @selected_contacts = @aspects.map { |aspect| aspect.contacts }.flatten.uniq unless params[:only_posts] @aspect_ids = @aspects.map { |a| a.id } - posts = current_user.raw_visible_posts(:by_members_of => @aspect_ids, + posts = current_user.visible_posts(:by_members_of => @aspect_ids, :type => 'StatusMessage', :order => session[:sort_order] + ' DESC', - :page => params[:page] + :max_time => params[:max_time].to_i ).includes(:comments, :mentions, :likes, :dislikes) @posts = PostsFake.new(posts) @@ -150,6 +151,10 @@ class AspectsController < ApplicationController @aspect.save end + def ensure_page + params[:max_time] ||= Time.now + 1 + end + protected def save_sort_order diff --git a/app/controllers/contacts_controller.rb b/app/controllers/contacts_controller.rb index 860923759..d7ab53155 100644 --- a/app/controllers/contacts_controller.rb +++ b/app/controllers/contacts_controller.rb @@ -3,6 +3,7 @@ # the COPYRIGHT file. class ContactsController < ApplicationController + helper :aspects before_filter :authenticate_user! def new diff --git a/app/controllers/conversations_controller.rb b/app/controllers/conversations_controller.rb index b19efa588..24c1fca3a 100644 --- a/app/controllers/conversations_controller.rb +++ b/app/controllers/conversations_controller.rb @@ -56,10 +56,12 @@ class ConversationsController < ApplicationController end def new - @all_contacts_and_ids = Contact.connection.execute(current_user.contacts.joins(:person => :profile).select("contacts.id, profiles.first_name, profiles.last_name, profiles.diaspora_handle").to_sql).map do |r| - {:value => r[0], :name => Person.name_from_attrs(r[1], r[2], r[3])} + all_contacts_and_ids = Contact.connection.execute(current_user.contacts.joins(:person => :profile + ).select("contacts.id, profiles.first_name, profiles.last_name, people.diaspora_handle").to_sql).map do |r| + {:value => r[0], + :name => Person.name_from_attrs(r[1], r[2], r[3]).gsub(/(")/, "'")} end - + @contacts_json = all_contacts_and_ids.to_json.gsub!(/(")/, '\\"') @contact = current_user.contacts.find(params[:contact_id]) if params[:contact_id] render :layout => false end diff --git a/app/controllers/notifications_controller.rb b/app/controllers/notifications_controller.rb index 1d6963d26..84c30ab06 100644 --- a/app/controllers/notifications_controller.rb +++ b/app/controllers/notifications_controller.rb @@ -19,7 +19,7 @@ class NotificationsController < ApplicationController def index @notifications = Notification.find(:all, :conditions => {:recipient_id => current_user.id}, - :order => 'created_at desc', :include => [:target, {:actors => :profile}]).paginate :page => params[:page], :per_page => 25 + :order => 'updated_at desc', :include => [:target, {:actors => :profile}]).paginate :page => params[:page], :per_page => 25 @group_days = @notifications.group_by{|note| I18n.l(note.updated_at, :format => I18n.t('date.formats.fullmonth_day')) } respond_with @notifications end diff --git a/app/controllers/people_controller.rb b/app/controllers/people_controller.rb index a90d82962..d0b530aae 100644 --- a/app/controllers/people_controller.rb +++ b/app/controllers/people_controller.rb @@ -3,8 +3,8 @@ # the COPYRIGHT file. class PeopleController < ApplicationController + helper :comments before_filter :authenticate_user!, :except => [:show] - before_filter :ensure_page, :only => :show respond_to :html respond_to :json, :only => [:index, :show] @@ -63,6 +63,7 @@ class PeopleController < ApplicationController @aspect = :profile @share_with = (params[:share_with] == 'true') + max_time = params[:max_time] ? Time.at(params[:max_time].to_i) : Time.now if @person @profile = @person.profile @@ -72,10 +73,12 @@ class PeopleController < ApplicationController if @contact && !params[:only_posts] @aspects_with_person = @contact.aspects @aspect_ids = @aspects_with_person.map(&:id) - @contacts_of_contact = @contact.contacts + @contacts_of_contact_count = @contact.contacts.count + @contacts_of_contact = @contact.contacts.limit(36) else @contact ||= Contact.new + @contacts_of_contact_count = 0 @contacts_of_contact = [] end @@ -84,13 +87,14 @@ class PeopleController < ApplicationController else @commenting_disabled = false end - @posts = current_user.posts_from(@person).where(:type => "StatusMessage").includes(:comments).limit(15).offset(15*(params[:page]-1)) + @posts = current_user.posts_from(@person).where(:type => "StatusMessage").includes(:comments).limit(15).where(StatusMessage.arel_table[:created_at].lt(max_time)) else @commenting_disabled = true - @posts = @person.posts.where(:type => "StatusMessage", :public => true).includes(:comments).limit(15).offset(15*(params[:page]-1)) + @posts = @person.posts.where(:type => "StatusMessage", :public => true).includes(:comments).limit(15).where(StatusMessage.arel_table[:created_at].lt(max_time)).order('posts.created_at DESC') end @posts = PostsFake.new(@posts) + if params[:only_posts] render :partial => 'shared/stream', :locals => {:posts => @posts} else @@ -112,6 +116,21 @@ class PeopleController < ApplicationController end end + def contacts + @person = Person.find(params[:person_id]) + if @person + @contact = current_user.contact_for(@person) + @aspect = :profile + @contacts_of_contact = @contact.contacts.paginate(:page => params[:page], :per_page => (params[:limit] || 15)) + @hashes = hashes_for_people @contacts_of_contact, @aspects + @contact = current_user.contact_for(@person) + @aspects_with_person = @contact.aspects + @aspect_ids = @aspects_with_person.map(&:id) + else + flash[:error] = I18n.t 'people.show.does_not_exist' + redirect_to people_path + end + end private def webfinger(account, opts = {}) Resque.enqueue(Job::SocketWebfinger, current_user.id, account, opts) diff --git a/app/controllers/photos_controller.rb b/app/controllers/photos_controller.rb index d74b1a5b4..b7eaeaf60 100644 --- a/app/controllers/photos_controller.rb +++ b/app/controllers/photos_controller.rb @@ -3,6 +3,7 @@ # the COPYRIGHT file. class PhotosController < ApplicationController + helper :comments before_filter :authenticate_user! respond_to :html, :json diff --git a/app/controllers/sockets_controller.rb b/app/controllers/sockets_controller.rb index 7ed70b1cb..913ead739 100644 --- a/app/controllers/sockets_controller.rb +++ b/app/controllers/sockets_controller.rb @@ -3,6 +3,7 @@ # the COPYRIGHT file. class SocketsController < ApplicationController + helper :comments include ApplicationHelper include SocketsHelper include Rails.application.routes.url_helpers diff --git a/app/controllers/status_messages_controller.rb b/app/controllers/status_messages_controller.rb index 1eae97448..2b0e89ace 100644 --- a/app/controllers/status_messages_controller.rb +++ b/app/controllers/status_messages_controller.rb @@ -3,6 +3,7 @@ # the COPYRIGHT file. class StatusMessagesController < ApplicationController + helper :comments before_filter :authenticate_user! respond_to :html @@ -25,7 +26,7 @@ class StatusMessagesController < ApplicationController end end - def bookmarklet + def bookmarklet @aspects = current_user.aspects @selected_contacts = @aspects.map { |aspect| aspect.contacts }.flatten.uniq @aspect_ids = @aspects.map{|x| x.id} diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb index d96a05257..a867e41e9 100644 --- a/app/controllers/tags_controller.rb +++ b/app/controllers/tags_controller.rb @@ -3,6 +3,7 @@ # the COPYRIGHT file. class TagsController < ApplicationController + helper :comments skip_before_filter :set_invites skip_before_filter :which_action_and_user skip_before_filter :set_grammatical_gender @@ -51,7 +52,11 @@ class TagsController < ApplicationController end @posts = @posts.tagged_with(params[:name]) - @posts = @posts.includes(:comments, :photos).order('created_at DESC').limit(15).offset(15*(params[:page]-1)) + + max_time = params[:max_time] ? Time.at(params[:max_time].to_i) : Time.now + @posts = @posts.where(StatusMessage.arel_table[:created_at].lt(max_time)) + + @posts = @posts.includes(:comments, :photos).order('posts.created_at DESC').limit(15) @posts = PostsFake.new(@posts) @commenting_disabled = true diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 6f04621ea..569eb2075 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -2,6 +2,7 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. class UsersController < ApplicationController + helper :language require File.join(Rails.root, 'lib/diaspora/ostatus_builder') require File.join(Rails.root, 'lib/diaspora/exporter') require File.join(Rails.root, 'lib/collect_user_photos') diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 600022c09..76547b8c3 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -5,9 +5,6 @@ module ApplicationHelper @@youtube_title_cache = Hash.new("no-title") - def next_page - params[:page] ? (params[:page].to_i + 1) : 2 - end def timeago(time, options = {}) options[:class] ||= "timeago" content_tag(:abbr, time.to_s, options.merge(:title => time.iso8601)) if time @@ -82,8 +79,19 @@ module ApplicationHelper ".html_safe end + def link_for_aspect(aspect, opts={}) + opts[:params] ||= {} + params ||= {} + opts[:params] = opts[:params].merge("a_ids[]" => aspect.id, :created_at => params[:created_at]) + opts[:class] ||= "" + opts[:class] << " hard_aspect_link" + opts['data-guid'] = aspect.id + + link_to aspect.name, aspects_path( opts[:params] ), opts + end + def current_aspect?(aspect) - !@aspect.nil? && !@aspect.is_a?(Symbol) && @aspect.id == aspect.id + !@aspect.nil? && !@aspect.instance_of?(Symbol) && @aspect.id == aspect.id end def aspect_or_all_path aspect @@ -161,21 +169,17 @@ module ApplicationHelper def markdownify(message, options = {}) message = h(message).html_safe - if !options.has_key?(:newlines) - options[:newlines] = true - end + options[:newlines] = true if !options.has_key?(:newlines) + options[:emoticons] = true if !options.has_key?(:emoticons) message = process_links(message) message = process_autolinks(message) message = process_emphasis(message) message = process_youtube(message, options[:youtube_maps]) message = process_vimeo(message, options[:vimeo_maps]) + message = process_emoticons(message) if options[:emoticons] - message.gsub!(/<3/, "♥") - - if options[:newlines] - message.gsub!(/\n+/, '
') - end + message.gsub!(/\n+/, '
') if options[:newlines] return message end @@ -208,16 +212,18 @@ module ApplicationHelper end def process_youtube(message, youtube_maps) - regex = /( |^)(https?:\/\/)?www\.youtube\.com\/watch[^ ]*v=([A-Za-z0-9_\-]+)(&[^ ]*|)/ + regex = /( |^)(https?:\/\/)?www\.youtube\.com\/watch[^ ]*v=([A-Za-z0-9_\-]+)(&[^ ]*)?(#[^ ]+)?/ processed_message = message.gsub(regex) do |matched_string| match_data = matched_string.match(regex) video_id = match_data[3] + anchor = match_data[5] + anchor ||= '' if youtube_maps && youtube_maps[video_id] title = h(CGI::unescape(youtube_maps[video_id])) else title = I18n.t 'application.helper.video_title.unknown' end - ' Youtube: ' + title + '' + ' Youtube: ' + title + '' end return processed_message end @@ -269,6 +275,27 @@ module ApplicationHelper return processed_message end + def process_emoticons(message) + map = { + "<3" => "♥", + ":(" => "☹", + ":-(" => "☹", + ":)" => "☺", + ":-)" => "☺", + "->" => "→", + "<-" => "←", + "..." => "…", + "(tm)" => "™", + "(r)" => "®", + "(c)" => "©" + } + + map.each do |search, replace| + message.gsub!(search, replace) + end + message + end + def info_text(text) image_tag 'icons/monotone_question.png', :class => 'what_is_this', :title => text end diff --git a/app/helpers/aspects_helper.rb b/app/helpers/aspects_helper.rb index 01bf1126e..e72bee5a1 100644 --- a/app/helpers/aspects_helper.rb +++ b/app/helpers/aspects_helper.rb @@ -1,17 +1,10 @@ -#/ Copyright (c) 2010, Diaspora Inc. This file is +# Copyright (c) 2010, Diaspora Inc. This file is # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. module AspectsHelper - def link_for_aspect(aspect, opts={}) - opts[:params] ||= {} - params ||= {} - opts[:params] = opts[:params].merge("a_ids[]" => aspect.id, :created_at => params[:created_at]) - opts[:class] ||= "" - opts[:class] << " hard_aspect_link" - opts['data-guid'] = aspect.id - - link_to aspect.name, aspects_path( opts[:params] ), opts + def next_page_path + aspects_path(:max_time => @posts.last.send(session[:sort_order].to_sym).to_i, :a_ids => params[:a_ids]) end def remove_link(aspect) diff --git a/app/helpers/stream_helper.rb b/app/helpers/comments_helper.rb similarity index 97% rename from app/helpers/stream_helper.rb rename to app/helpers/comments_helper.rb index 3fdb1c680..0df7ee28f 100644 --- a/app/helpers/stream_helper.rb +++ b/app/helpers/comments_helper.rb @@ -2,7 +2,7 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. -module StreamHelper +module CommentsHelper GSUB_THIS = "FIUSDHVIUSHDVIUBAIUHAPOIUXJM" def comment_toggle(count, commenting_disabled=false) if count <= 3 diff --git a/app/helpers/conversations_helper.rb b/app/helpers/conversations_helper.rb deleted file mode 100644 index e9370a658..000000000 --- a/app/helpers/conversations_helper.rb +++ /dev/null @@ -1,5 +0,0 @@ -module ConversationsHelper - def new_message_text(count) - t('conversations.helper.new_messages', :count => count) - end -end diff --git a/app/helpers/layout_helper.rb b/app/helpers/layout_helper.rb index 166e6b254..e8707e412 100644 --- a/app/helpers/layout_helper.rb +++ b/app/helpers/layout_helper.rb @@ -23,4 +23,12 @@ module LayoutHelper def javascript(*args) content_for(:head) { javascript_include_tag(*args) } end + + def new_notification_text(count) + t('notifications.helper.new_notifications', :count => count) + end + + def new_message_text(count) + t('conversations.helper.new_messages', :count => count) + end end diff --git a/app/helpers/notifications_helper.rb b/app/helpers/notifications_helper.rb index 4489a5c84..8afc55b61 100644 --- a/app/helpers/notifications_helper.rb +++ b/app/helpers/notifications_helper.rb @@ -31,9 +31,6 @@ module NotificationsHelper t("notifications.#{target_type}", :post_author => post_author) end - def new_notification_text(count) - t('notifications.helper.new_notifications', :count => count) - end def new_notification_link(count) if count > 0 @@ -56,4 +53,12 @@ module NotificationsHelper def peoples_names(note) note.actors.map{|p| p.name}.join(", ") end + + def the_day(i18n) + i18n[0].match(/\d/) ? i18n[0].gsub('.', '') : i18n[1].gsub('.', '') + end + + def the_month(i18n) + i18n[0].match(/\d/) ? i18n[1] : i18n[0] + end end diff --git a/app/helpers/people_helper.rb b/app/helpers/people_helper.rb index b149abca8..490200756 100644 --- a/app/helpers/people_helper.rb +++ b/app/helpers/people_helper.rb @@ -27,4 +27,8 @@ module PeopleHelper I18n.l bday, :format => I18n.t('date.formats.birthday_with_year') end end + + def next_page_path + person_path(@person, :max_time => @posts.last.created_at.to_i) + end end diff --git a/app/helpers/requests_helper.rb b/app/helpers/requests_helper.rb deleted file mode 100644 index d54a29de2..000000000 --- a/app/helpers/requests_helper.rb +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) 2010, Diaspora Inc. This file is -# licensed under the Affero General Public License version 3 or later. See -# the COPYRIGHT file. - -module RequestsHelper - - def new_request?(request_count) - 'new_requests' if request_count > 0 - end - - def new_request_link(request_count) - if request_count > 0 - link_to t('requests.helper.new_requests', :count => @request_count), manage_aspects_path - end - end -end diff --git a/app/helpers/tags_helper.rb b/app/helpers/tags_helper.rb new file mode 100644 index 000000000..ee29ec44e --- /dev/null +++ b/app/helpers/tags_helper.rb @@ -0,0 +1,9 @@ +# Copyright (c) 2010, Diaspora Inc. This file is +# licensed under the Affero General Public License version 3 or later. See +# the COPYRIGHT file. + +module TagsHelper + def next_page_path + tag_path(@tag, :max_time => @posts.last.created_at.to_i) + end +end diff --git a/app/models/notification.rb b/app/models/notification.rb index 4b1c33f18..8349165b2 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -41,7 +41,8 @@ private def self.concatenate_or_create(recipient, target, actor, notification_type) if n = notification_type.where(:target_id => target.id, :target_type => target.class.base_class, - :recipient_id => recipient.id).first + :recipient_id => recipient.id, + :unread => true).first unless n.actors.include?(actor) n.actors << actor end diff --git a/app/models/post.rb b/app/models/post.rb index c705f45b0..f6b88c89e 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -81,7 +81,7 @@ class Post < ActiveRecord::Base local_post = Post.where(:guid => self.guid).first if local_post && local_post.author_id == self.author_id - known_post = user.raw_visible_posts.where(:guid => self.guid).first + known_post = user.visible_posts.where(:guid => self.guid).first if known_post if known_post.mutable? known_post.update_attributes(self.attributes) diff --git a/app/models/user.rb b/app/models/user.rb index 8f6c1f278..3ceab0b19 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -96,7 +96,7 @@ class User < ActiveRecord::Base contact = contact_for(person) add_contact_to_aspect(contact, to_aspect) - + membership = contact ? AspectMembership.where(:contact_id => contact.id, :aspect_id => from_aspect.id).first : nil return(membership && membership.destroy) end @@ -344,5 +344,4 @@ class User < ActiveRecord::Base mentioned_person.delete end end - end diff --git a/app/views/aspects/_aspect_stream.haml b/app/views/aspects/_aspect_stream.haml index 78f540716..d49a64342 100644 --- a/app/views/aspects/_aspect_stream.haml +++ b/app/views/aspects/_aspect_stream.haml @@ -13,6 +13,6 @@ - if posts.length > 0 = render 'shared/stream', :posts => posts #pagination - =link_to(t('more'), aspects_path(:page => next_page, :a_ids => params[:a_ids]), :class => 'paginate') + =link_to(t('more'), next_page_path, :class => 'paginate') - else = render 'aspects/no_posts_message', :post_count => posts.length diff --git a/app/views/aspects/index.mobile.haml b/app/views/aspects/index.mobile.haml index a6e78e163..8def29594 100644 --- a/app/views/aspects/index.mobile.haml +++ b/app/views/aspects/index.mobile.haml @@ -12,8 +12,9 @@ = link_to t('.post_a_message'), '#publisher_page', :id => 'publisher_button' #main_stream.stream = render 'shared/stream', :posts => @posts - #pagination - %a.more-link.paginate{:href => aspects_path(:a_ids => params[:a_ids], :page => params[:page] + 1)} - %h2= t("more") + -if @posts.length > 0 + #pagination + %a.more-link.paginate{:href => next_page_path} + %h2= t("more") - content_for :subpages do = render 'shared/publisher', :aspect_ids => @aspect_ids diff --git a/app/views/conversations/new.haml b/app/views/conversations/new.haml index 40301b10e..b7877372b 100644 --- a/app/views/conversations/new.haml +++ b/app/views/conversations/new.haml @@ -4,7 +4,7 @@ :javascript $(document).ready(function () { - var data = $.parseJSON( '#{@all_contacts_and_ids.to_json.gsub("'", "\\\\'")}' ), + var data = $.parseJSON( "#{@contacts_json}" ), autocompleteInput = $("#contact_autocomplete"); autocompleteInput.autoSuggest(data, { diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index d94d4582a..0e22c2623 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -79,7 +79,7 @@ %body{:class => "#{yield(:body_class)}"} - unless @landing_page - #notification + #notifications - flash.each do |name, msg| = content_tag :div, msg, :id => "flash_#{name}" diff --git a/app/views/notifications/_popup.haml b/app/views/notifications/_popup.haml index 0dbc75d4c..9bb8f36bb 100644 --- a/app/views/notifications/_popup.haml +++ b/app/views/notifications/_popup.haml @@ -1,7 +1,7 @@ -# Copyright (c) 2010, Diaspora Inc. This file is -# licensed under the Affero General Public License version 3 or later. See -# the COPYRIGHT file. - -= person_image_tag(person) -= link_to "#{person.name.titleize}", person_path(person.id) -= object_link(note) +.notification + = person_image_tag(person) + = link_to "#{person.name.titleize}", person_path(person.id) + = object_link(note) diff --git a/app/views/notifications/index.html.haml b/app/views/notifications/index.html.haml index 5f056c30f..9c4b1828d 100644 --- a/app/views/notifications/index.html.haml +++ b/app/views/notifications/index.html.haml @@ -1,52 +1,28 @@ -:javascript - $('.stream_element').live('mousedown', function(evt){ - var note = $(this).closest('.stream_element'), - note_id = note.attr('data-guid'), - nBadge = $("#notification_badge_number"); - - if(note.hasClass('unread') ){ - note.removeClass('unread'); - $.ajax({ - url: 'notifications/' + note_id, - type: 'PUT' - }); - } - if(nBadge.html() != null) { - nBadge.html().replace(/\d+/, function(num){ - num = parseInt(num); - nBadge.html(parseInt(num)-1); - if(num == 1) { - nBadge.addClass("hidden"); - } - }); - - } - }); - - $('a.more').live('click', function(){ - $(this).hide(); - $(this).next('span').removeClass('hidden'); - }); - -.span-1 - = image_tag 'icons/mail_big.png', :height => 30, :width => 30, :style=>"margin-top:3px;" -.span-10 +.span-13 %h2 + %span.notification_count{:class => ('unread' if @notification_count > 0)} + = @notification_count = t('.notifications') -.span-13.last.left +.span-8.last.left = link_to t('.mark_all_as_read'), read_all_notifications_path, :class => 'button' .span-24.last - %ul.stream.notifications + .stream.notifications - @group_days.each do |day, notes| - %li - %h4= day - %ul.notifications_for_day + .day_group.span-24.last + .span-3 + .date + .day= the_day(day.split(' ')) + .month= the_month(day.split(' ')) + + .span-8.notifications_for_day - notes.each do |note| .stream_element{:data=>{:guid => note.id}, :class => "#{note.unread ? 'unread' : ''}"} %span.from = notification_people_link(note) = object_link(note) - .time= timeago(note.created_at) + %br + %time= timeago(note.created_at) + .span-13.last = will_paginate @notifications diff --git a/app/views/people/_person.html.haml b/app/views/people/_person.html.haml index 2dc6038f3..362c01935 100644 --- a/app/views/people/_person.html.haml +++ b/app/views/people/_person.html.haml @@ -5,7 +5,8 @@ .stream_element{:id => person.id} .right = render :partial => 'people/relationship_action', - :locals => { :person => person, :contact => contact, :request => request} + :locals => { :person => person, :contact => contact, + :request => request, :current_user => current_user } = person_image_link(person) diff --git a/app/views/people/contacts.haml b/app/views/people/contacts.haml new file mode 100644 index 000000000..eb0b26700 --- /dev/null +++ b/app/views/people/contacts.haml @@ -0,0 +1,60 @@ +-# Copyright (c) 2010, Diaspora Inc. This file is +-# licensed under the Affero General Public License version 3 or later. See +-# the COPYRIGHT file. + + +- content_for :head do + = include_javascripts :people + +- content_for :page_title do + = @person.name + +.span-8.append-1.last + = render :partial => 'people/profile_sidebar', :locals => {:person => @person, :contact => @contact } + +.span-15.last + #author_info + - if user_signed_in? && !(@contact.persisted? || current_user.person == @person) + .right + - if @incoming_request + = link_to t('people.show.incoming_request', :name => truncate(@person.name, :length => 20, :separator => ' ', :omission => '')), + {:controller => "contacts", + :action => "new", + :person_id => @person.id}, + :class => 'share_with button', + :rel => 'facebox' + -else + = link_to t('people.show.start_sharing'), + {:controller => "contacts", + :action => "new", + :person_id => @person.id}, + :class => 'share_with button', + :rel => 'facebox' + - if @share_with + = javascript_tag "$(document).ready(function() {jQuery.facebox({ ajax: '#{new_contact_path(:person_id => @person.id)}' });});" + + + - else + - if user_signed_in? && @contact.person && @contact.receiving? + .right + = link_to t('.mention'), new_status_message_path(:person_id => @person.id), :class => 'button', :rel => 'facebox' + - if @contact.mutual? + = link_to t('.message'), new_conversation_path(:contact_id => @contact.id, :name => @contact.person.name, :contact_id => @contact.id), :class => 'button', :rel => 'facebox' + + %h3 + = @person.name + %span.diaspora_handle + = @person.diaspora_handle + .description + - if !@person.profile.tag_string.blank? + = @person.profile.format_tags(@person.profile.tag_string) + - if user_signed_in? && @person == current_user.person + %span.hover_edit + = link_to t('people.show.edit'), edit_profile_path + + %hr + + #people_stream.stream + - for hash in @hashes + = render :partial => 'people/person', :locals => hash + = will_paginate @contacts_of_contact diff --git a/app/views/people/index.html.haml b/app/views/people/index.html.haml index 4843cdc61..63153be6e 100644 --- a/app/views/people/index.html.haml +++ b/app/views/people/index.html.haml @@ -7,6 +7,7 @@ - content_for :head do = include_javascripts :people + = javascript_include_tag 'contact-list' .span-24.last - if params[:q].blank? diff --git a/app/views/people/show.html.haml b/app/views/people/show.html.haml index 8b310f8c1..54ea641f2 100644 --- a/app/views/people/show.html.haml +++ b/app/views/people/show.html.haml @@ -13,14 +13,15 @@ = render :partial => 'people/profile_sidebar', :locals => {:person => @person, :contact => @contact } - if user_signed_in? && @contact.persisted? && @contacts_of_contact.count > 0 - .span-8.last + .span-8.last#contacts_of_contact %hr{:style=>"width:300px;"} .section.contact_pictures %h4 - = @contacts_of_contact.length - = t('.similar_contacts') + = t('contacts', :count => @contacts_of_contact_count) - for person in @contacts_of_contact = person_image_link person + - if @contacts_of_contact.count > 25 + %p.see_all= link_to t('.see_all'), person_contacts_path(@person) .span-15.last #author_info @@ -73,7 +74,7 @@ #main_stream.stream = render 'shared/stream', :posts => @posts, :commenting_disabled => @commenting_disabled #pagination - =link_to(t('more'), person_path(@person, :page => next_page), :class => 'paginate') + =link_to(t('more'), next_page_path, :class => 'paginate') - else #stream diff --git a/app/views/people/show.mobile.haml b/app/views/people/show.mobile.haml index 08ce19c1b..8bc11c86c 100644 --- a/app/views/people/show.mobile.haml +++ b/app/views/people/show.mobile.haml @@ -31,7 +31,7 @@ #main_stream.stream = render 'shared/stream', :posts => @posts #pagination - =link_to(t('more'), person_path(@person, :page => next_page), :class => 'paginate') + =link_to(t('more'), next_page_path, :class => 'paginate') - else #stream %li{:style=>"text-align:center;"} diff --git a/app/views/photos/show.mobile.haml b/app/views/photos/show.mobile.haml old mode 100644 new mode 100755 index c373911c9..4aebfea69 --- a/app/views/photos/show.mobile.haml +++ b/app/views/photos/show.mobile.haml @@ -6,3 +6,12 @@ #show_content.photo = image_tag @photo.url(:scaled_full) + -if @additional_photos && @additional_photos.length > 1 + #photo_controls + %table + %tr + %td + =link_to "←", @prev_photo, :rel => 'prefetch', :class => 'arrow' + %td{:width => '100%'} + %td + =link_to "→", @next_photo, :rel => 'prefetch', :class => 'arrow' diff --git a/app/views/shared/_stream_element.html.haml b/app/views/shared/_stream_element.html.haml index 614e66472..44ce12d3a 100644 --- a/app/views/shared/_stream_element.html.haml +++ b/app/views/shared/_stream_element.html.haml @@ -21,7 +21,7 @@ .content .from = person_link(post.author, :class => 'author') - %time.timeago{:datetime => post.created_at} + %time.time.timeago{:datetime => post.created_at, :integer => post.created_at.to_i} = render 'status_messages/status_message', :post => post, :photos => post.photos .info diff --git a/app/views/shared/_stream_element.mobile.haml b/app/views/shared/_stream_element.mobile.haml index 1b00a09a7..82a342790 100644 --- a/app/views/shared/_stream_element.mobile.haml +++ b/app/views/shared/_stream_element.mobile.haml @@ -12,6 +12,6 @@ = render 'status_messages/status_message', :post => post, :photos => post.photos .info - %span.time + %span.time{:integer => post.created_at.to_i} = t('ago', :time => time_ago_in_words(post.created_at)) = link_to "#{t('comments', :count => post.comments.length)} →", status_message_path(post), :class => 'comment_link right' diff --git a/app/views/status_messages/show.html.haml b/app/views/status_messages/show.html.haml index 34cbfe9e0..83cada857 100644 --- a/app/views/status_messages/show.html.haml +++ b/app/views/status_messages/show.html.haml @@ -12,7 +12,7 @@ = markdownify(@status_message.text, :youtube_maps => @status_message[:youtube_titles]) - for photo in @status_message.photos - .thumb_small= link_to (image_tag photo.url(:thumb_small)), photo_path(photo) + = link_to (image_tag photo.url(:thumb_small), :class => 'thumb_small'), photo_path(photo) %p.time = how_long_ago(@status_message) diff --git a/app/views/tags/show.haml b/app/views/tags/show.haml index 4b16d4476..fd6777f23 100644 --- a/app/views/tags/show.haml +++ b/app/views/tags/show.haml @@ -23,7 +23,7 @@ - if @posts.length > 0 = render 'shared/stream', :posts => @posts #pagination - =link_to(t('more'), tag_path(params[:name], :page => next_page), :class => 'paginate') + =link_to(t('more'), next_page_path, :class => 'paginate') - else = t('.nobody_talking', :tag => "##{params[:name]}") diff --git a/chef/cookbooks/debian/bootstrap.json b/chef/cookbooks/debian/bootstrap.json new file mode 100644 index 000000000..aba083461 --- /dev/null +++ b/chef/cookbooks/debian/bootstrap.json @@ -0,0 +1 @@ +{"recipes": ["debian::bootstrap" ] } diff --git a/chef/cookbooks/debian/files/default/redis.conf b/chef/cookbooks/debian/files/default/redis.conf new file mode 100644 index 000000000..3f2692091 --- /dev/null +++ b/chef/cookbooks/debian/files/default/redis.conf @@ -0,0 +1,312 @@ +# Redis configuration file example + +# Note on units: when memory size is needed, it is possible to specifiy +# it in the usual form of 1k 5GB 4M and so forth: +# +# 1k => 1000 bytes +# 1kb => 1024 bytes +# 1m => 1000000 bytes +# 1mb => 1024*1024 bytes +# 1g => 1000000000 bytes +# 1gb => 1024*1024*1024 bytes +# +# units are case insensitive so 1GB 1Gb 1gB are all the same. + +# By default Redis does not run as a daemon. Use 'yes' if you need it. +# Note that Redis will write a pid file in /usr/local/var/run/redis.pid when daemonized. +daemonize no + +# When running daemonized, Redis writes a pid file in /usr/local/var/run/redis.pid by +# default. You can specify a custom pid file location here. +pidfile /usr/local/var/run/redis.pid + +# Accept connections on the specified port, default is 6379 +port 6379 + +# If you want you can bind a single interface, if the bind option is not +# specified all the interfaces will listen for incoming connections. +# +# bind 127.0.0.1 + +# Close the connection after a client is idle for N seconds (0 to disable) +timeout 300 + +# Set server verbosity to 'debug' +# it can be one of: +# debug (a lot of information, useful for development/testing) +# verbose (many rarely useful info, but not a mess like the debug level) +# notice (moderately verbose, what you want in production probably) +# warning (only very important / critical messages are logged) +loglevel verbose + +# Specify the log file name. Also 'stdout' can be used to force +# Redis to log on the standard output. Note that if you use standard +# output for logging but daemonize, logs will be sent to /dev/null +logfile stdout + +# Set the number of databases. The default database is DB 0, you can select +# a different one on a per-connection basis using SELECT where +# dbid is a number between 0 and 'databases'-1 +databases 16 + +################################ SNAPSHOTTING ################################# +# +# Save the DB on disk: +# +# save +# +# Will save the DB if both the given number of seconds and the given +# number of write operations against the DB occurred. +# +# In the example below the behaviour will be to save: +# after 900 sec (15 min) if at least 1 key changed +# after 300 sec (5 min) if at least 10 keys changed +# after 60 sec if at least 10000 keys changed +# +# Note: you can disable saving at all commenting all the "save" lines. + +save 900 1 +save 300 10 +save 60 10000 + +# Compress string objects using LZF when dump .rdb databases? +# For default that's set to 'yes' as it's almost always a win. +# If you want to save some CPU in the saving child set it to 'no' but +# the dataset will likely be bigger if you have compressible values or keys. +rdbcompression yes + +# The filename where to dump the DB +dbfilename dump.rdb + +# The working directory. +# +# The DB will be written inside this directory, with the filename specified +# above using the 'dbfilename' configuration directive. +# +# Also the Append Only File will be created inside this directory. +# +# Note that you must specify a directory here, not a file name. +dir /usr/local/var/db/redis/ + +################################# REPLICATION ################################# + +# Master-Slave replication. Use slaveof to make a Redis instance a copy of +# another Redis server. Note that the configuration is local to the slave +# so for example it is possible to configure the slave to save the DB with a +# different interval, or to listen to another port, and so on. +# +# slaveof + +# If the master is password protected (using the "requirepass" configuration +# directive below) it is possible to tell the slave to authenticate before +# starting the replication synchronization process, otherwise the master will +# refuse the slave request. +# +# masterauth + +################################## SECURITY ################################### + +# Require clients to issue AUTH before processing any other +# commands. This might be useful in environments in which you do not trust +# others with access to the host running redis-server. +# +# This should stay commented out for backward compatibility and because most +# people do not need auth (e.g. they run their own servers). +# +# Warning: since Redis is pretty fast an outside user can try up to +# 150k passwords per second against a good box. This means that you should +# use a very strong password otherwise it will be very easy to break. +# +# requirepass foobared + +################################### LIMITS #################################### + +# Set the max number of connected clients at the same time. By default there +# is no limit, and it's up to the number of file descriptors the Redis process +# is able to open. The special value '0' means no limits. +# Once the limit is reached Redis will close all the new connections sending +# an error 'max number of clients reached'. +# +# maxclients 128 + +# Don't use more memory than the specified amount of bytes. +# When the memory limit is reached Redis will try to remove keys with an +# EXPIRE set. It will try to start freeing keys that are going to expire +# in little time and preserve keys with a longer time to live. +# Redis will also try to remove objects from free lists if possible. +# +# If all this fails, Redis will start to reply with errors to commands +# that will use more memory, like SET, LPUSH, and so on, and will continue +# to reply to most read-only commands like GET. +# +# WARNING: maxmemory can be a good idea mainly if you want to use Redis as a +# 'state' server or cache, not as a real DB. When Redis is used as a real +# database the memory usage will grow over the weeks, it will be obvious if +# it is going to use too much memory in the long run, and you'll have the time +# to upgrade. With maxmemory after the limit is reached you'll start to get +# errors for write operations, and this may even lead to DB inconsistency. +# +# maxmemory + +############################## APPEND ONLY MODE ############################### + +# By default Redis asynchronously dumps the dataset on disk. If you can live +# with the idea that the latest records will be lost if something like a crash +# happens this is the preferred way to run Redis. If instead you care a lot +# about your data and don't want to that a single record can get lost you should +# enable the append only mode: when this mode is enabled Redis will append +# every write operation received in the file appendonly.aof. This file will +# be read on startup in order to rebuild the full dataset in memory. +# +# Note that you can have both the async dumps and the append only file if you +# like (you have to comment the "save" statements above to disable the dumps). +# Still if append only mode is enabled Redis will load the data from the +# log file at startup ignoring the dump.rdb file. +# +# IMPORTANT: Check the BGREWRITEAOF to check how to rewrite the append +# log file in background when it gets too big. + +appendonly no + +# The name of the append only file (default: "appendonly.aof") +# appendfilename appendonly.aof + +# The fsync() call tells the Operating System to actually write data on disk +# instead to wait for more data in the output buffer. Some OS will really flush +# data on disk, some other OS will just try to do it ASAP. +# +# Redis supports three different modes: +# +# no: don't fsync, just let the OS flush the data when it wants. Faster. +# always: fsync after every write to the append only log . Slow, Safest. +# everysec: fsync only if one second passed since the last fsync. Compromise. +# +# The default is "everysec" that's usually the right compromise between +# speed and data safety. It's up to you to understand if you can relax this to +# "no" that will will let the operating system flush the output buffer when +# it wants, for better performances (but if you can live with the idea of +# some data loss consider the default persistence mode that's snapshotting), +# or on the contrary, use "always" that's very slow but a bit safer than +# everysec. +# +# If unsure, use "everysec". + +# appendfsync always +appendfsync everysec +# appendfsync no + +################################ VIRTUAL MEMORY ############################### + +# Virtual Memory allows Redis to work with datasets bigger than the actual +# amount of RAM needed to hold the whole dataset in memory. +# In order to do so very used keys are taken in memory while the other keys +# are swapped into a swap file, similarly to what operating systems do +# with memory pages. +# +# To enable VM just set 'vm-enabled' to yes, and set the following three +# VM parameters accordingly to your needs. + +vm-enabled no +# vm-enabled yes + +# This is the path of the Redis swap file. As you can guess, swap files +# can't be shared by different Redis instances, so make sure to use a swap +# file for every redis process you are running. Redis will complain if the +# swap file is already in use. +# +# The best kind of storage for the Redis swap file (that's accessed at random) +# is a Solid State Disk (SSD). +# +# *** WARNING *** if you are using a shared hosting the default of putting +# the swap file under /tmp is not secure. Create a dir with access granted +# only to Redis user and configure Redis to create the swap file there. +vm-swap-file /tmp/redis.swap + +# vm-max-memory configures the VM to use at max the specified amount of +# RAM. Everything that deos not fit will be swapped on disk *if* possible, that +# is, if there is still enough contiguous space in the swap file. +# +# With vm-max-memory 0 the system will swap everything it can. Not a good +# default, just specify the max amount of RAM you can in bytes, but it's +# better to leave some margin. For instance specify an amount of RAM +# that's more or less between 60 and 80% of your free RAM. +vm-max-memory 0 + +# Redis swap files is split into pages. An object can be saved using multiple +# contiguous pages, but pages can't be shared between different objects. +# So if your page is too big, small objects swapped out on disk will waste +# a lot of space. If you page is too small, there is less space in the swap +# file (assuming you configured the same number of total swap file pages). +# +# If you use a lot of small objects, use a page size of 64 or 32 bytes. +# If you use a lot of big objects, use a bigger page size. +# If unsure, use the default :) +vm-page-size 32 + +# Number of total memory pages in the swap file. +# Given that the page table (a bitmap of free/used pages) is taken in memory, +# every 8 pages on disk will consume 1 byte of RAM. +# +# The total swap size is vm-page-size * vm-pages +# +# With the default of 32-bytes memory pages and 134217728 pages Redis will +# use a 4 GB swap file, that will use 16 MB of RAM for the page table. +# +# It's better to use the smallest acceptable value for your application, +# but the default is large in order to work in most conditions. +vm-pages 134217728 + +# Max number of VM I/O threads running at the same time. +# This threads are used to read/write data from/to swap file, since they +# also encode and decode objects from disk to memory or the reverse, a bigger +# number of threads can help with big objects even if they can't help with +# I/O itself as the physical device may not be able to couple with many +# reads/writes operations at the same time. +# +# The special value of 0 turn off threaded I/O and enables the blocking +# Virtual Memory implementation. +vm-max-threads 4 + +############################### ADVANCED CONFIG ############################### + +# Glue small output buffers together in order to send small replies in a +# single TCP packet. Uses a bit more CPU but most of the times it is a win +# in terms of number of queries per second. Use 'yes' if unsure. +glueoutputbuf yes + +# Hashes are encoded in a special way (much more memory efficient) when they +# have at max a given numer of elements, and the biggest element does not +# exceed a given threshold. You can configure this limits with the following +# configuration directives. +hash-max-zipmap-entries 64 +hash-max-zipmap-value 512 + +# Active rehashing uses 1 millisecond every 100 milliseconds of CPU time in +# order to help rehashing the main Redis hash table (the one mapping top-level +# keys to values). The hash table implementation redis uses (see dict.c) +# performs a lazy rehashing: the more operation you run into an hash table +# that is rhashing, the more rehashing "steps" are performed, so if the +# server is idle the rehashing is never complete and some more memory is used +# by the hash table. +# +# The default is to use this millisecond 10 times every second in order to +# active rehashing the main dictionaries, freeing memory when possible. +# +# If unsure: +# use "activerehashing no" if you have hard latency requirements and it is +# not a good thing in your environment that Redis can reply form time to time +# to queries with 2 milliseconds delay. +# +# use "activerehashing yes" if you don't have such hard requirements but +# want to free memory asap when possible. +activerehashing yes + +################################## INCLUDES ################################### + +# Include one or more other config files here. This is useful if you +# have a standard template that goes to all redis server but also need +# to customize a few per-server settings. Include files can include +# other files, so use this wisely. +# +# include /path/to/local.conf +# include /path/to/other.conf diff --git a/chef/cookbooks/debian/main.json b/chef/cookbooks/debian/main.json new file mode 100644 index 000000000..7afec5fd0 --- /dev/null +++ b/chef/cookbooks/debian/main.json @@ -0,0 +1 @@ +{"recipes": ["debian::main" ] } diff --git a/chef/cookbooks/debian/recipes/bootstrap.rb b/chef/cookbooks/debian/recipes/bootstrap.rb new file mode 100644 index 000000000..416ee1eed --- /dev/null +++ b/chef/cookbooks/debian/recipes/bootstrap.rb @@ -0,0 +1,49 @@ +execute "bundler deps" do + command "apt-get install -y cpio" +end +execute "nokogiri deps" do + command "apt-get install -y libxml2-dev libxslt-dev" +end + +execute "eventmachine deps" do + command "apt-get install -y gcc-c++" +end + +execute "ssl lib" do + command "apt-get install -y libssl-dev libopenssl-ruby" +end + +execute "curl" do + command "apt-get install -y libcurl4-openssl-dev" +end + +execute "ffi" do + command "apt-get install -y libffi-ruby" +end + + +execute "htop" do + command "apt-get install -y htop psmisc screen" +end + +execute "rvm deps" do + command "apt-get install -y bzip2" +end + +def harden_ruby(ruby_string) + Dir.glob("/usr/local/rvm/wrappers/#{ruby_string}/*").each do |file| + link "/usr/local/bin/#{file.split('/').last}" do + to file + end + end + Dir.glob("/usr/local/rvm/gems/#{ruby_string}/bin/*").each do |file| + link "/usr/local/bin/#{file.split('/').last}" do + to file + end + end + +end + +harden_ruby("ree-1.8.7-2010.02") + +include_recipe "debian::post_bootstrap" diff --git a/chef/cookbooks/debian/recipes/image_magick.rb b/chef/cookbooks/debian/recipes/image_magick.rb new file mode 100644 index 000000000..eed14458e --- /dev/null +++ b/chef/cookbooks/debian/recipes/image_magick.rb @@ -0,0 +1,3 @@ +execute "install ImageMagick" do + command "apt-get install -y imagemagick libmagick9-dev" +end diff --git a/chef/cookbooks/debian/recipes/java.rb b/chef/cookbooks/debian/recipes/java.rb new file mode 100644 index 000000000..72ee1176e --- /dev/null +++ b/chef/cookbooks/debian/recipes/java.rb @@ -0,0 +1,3 @@ +execute "JAVA!! for Jammit" do + command "apt-get install -y java" +end diff --git a/chef/cookbooks/debian/recipes/main.rb b/chef/cookbooks/debian/recipes/main.rb new file mode 100644 index 000000000..5d284929c --- /dev/null +++ b/chef/cookbooks/debian/recipes/main.rb @@ -0,0 +1,5 @@ +include_recipe "debian::image_magick" +include_recipe "debian::mysql" +include_recipe "common::main" +include_recipe "debian::nginx" +include_recipe "debian::redis" diff --git a/chef/cookbooks/debian/recipes/mysql.rb b/chef/cookbooks/debian/recipes/mysql.rb new file mode 100644 index 000000000..d300d75d3 --- /dev/null +++ b/chef/cookbooks/debian/recipes/mysql.rb @@ -0,0 +1,3 @@ +execute "install mysql" do + command "apt-get install -y mysql-server libmysqlclient-dev libmysql-ruby" +end diff --git a/chef/cookbooks/debian/recipes/nginx.rb b/chef/cookbooks/debian/recipes/nginx.rb new file mode 100644 index 000000000..c778792d2 --- /dev/null +++ b/chef/cookbooks/debian/recipes/nginx.rb @@ -0,0 +1,4 @@ +execute "pcre dependency" do + command "apt-get install -y libpcre3 libpcre3-dev" +end +include_recipe "common::nginx" diff --git a/chef/cookbooks/debian/recipes/post_bootstrap.rb b/chef/cookbooks/debian/recipes/post_bootstrap.rb new file mode 100644 index 000000000..277cd3ee8 --- /dev/null +++ b/chef/cookbooks/debian/recipes/post_bootstrap.rb @@ -0,0 +1 @@ +include_recipe "debian::java" diff --git a/chef/cookbooks/debian/recipes/redis.rb b/chef/cookbooks/debian/recipes/redis.rb new file mode 100644 index 000000000..ccc34cee2 --- /dev/null +++ b/chef/cookbooks/debian/recipes/redis.rb @@ -0,0 +1,19 @@ +execute "download redis" do + command "wget http://ftp.us.debian.org/debian/pool/main/r/redis/redis-server_2.2.2-1_amd64.deb" +end + +execute "install redis" do + command "dpkg -i redis-server_2.2.2-1_amd64.deb" +end + +cookbook_file "/usr/local/etc/redis.conf" do + source "redis.conf" +end + +execute "change redis.conf permissions" do + command "chmod 755 /usr/local/etc/redis.conf" +end + +execute "make the redis db directory" do + command "mkdir -p /usr/local/var/db/redis" +end diff --git a/config/app_config.yml.example b/config/app_config.yml.example index 58dc0bbad..c22764da9 100644 --- a/config/app_config.yml.example +++ b/config/app_config.yml.example @@ -31,8 +31,8 @@ default: # Secure websocket confguration (wss://) # requires SSL cert and key socket_secure: false - socket_private_key_location: '/full/path/to/file.key' socket_cert_chain_location: '/full/path/to/cert_chain.crt' + socket_private_key_location: '/full/path/to/file.key' # Diaspora is only tested against this default pubsub server. pubsub_server: 'https://pubsubhubbub.appspot.com/' diff --git a/config/assets.yml b/config/assets.yml index d80f78ec2..075ac4f28 100644 --- a/config/assets.yml +++ b/config/assets.yml @@ -22,18 +22,19 @@ javascripts: - public/javascripts/vendor/charCount.js - public/javascripts/jquery.autocomplete-custom.js - public/javascripts/jquery.infieldlabel-custom.js - - public/javascripts/fileuploader-custom.js - public/javascripts/keycodes.js + - public/javascripts/fileuploader-custom.js - public/javascripts/diaspora.js - public/javascripts/widgets/i18n.js - public/javascripts/widgets/alert.js - public/javascripts/widgets/embedder.js - public/javascripts/widgets/timeago.js + - public/javascripts/widgets/infinite-scroll.js - public/javascripts/widgets/directionDetector.js + - public/javascripts/widgets/notifications.js - public/javascripts/view.js - public/javascripts/stream.js - public/javascripts/search.js - - public/javascripts/infinite-scroll.js mobile: - public/javascripts/vendor/jquery152.min.js - public/javascripts/custom-mobile-scripting.js @@ -41,7 +42,7 @@ javascripts: - public/javascripts/vendor/jquery.infinitescroll.min.js - public/javascripts/diaspora.js - public/javascripts/widgets/i18n.js - - public/javascripts/infinite-scroll.js + - public/javascripts/widgets/infinite-scroll.js - public/javascripts/rails.js mailchimp: - public/javascripts/vendor/mailchimp/jquery.form.js diff --git a/config/database.yml.example b/config/database.yml.example index b9b36387f..3ac184348 100644 --- a/config/database.yml.example +++ b/config/database.yml.example @@ -1,21 +1,22 @@ -test: +common: &common adapter: mysql2 - database: diaspora_test - username: root - password: password + host: "localhost" + port: 3306 +# socket: /tmp/mysql.sock + username: "root" + password: "password" charset: utf8 collation: utf8_bin + + development: - adapter: mysql2 + <<: *common database: diaspora_development - username: root - password: password - charset: utf8 - collation: utf8_bin + production: - adapter: mysql2 + <<: *common database: diaspora_production - username: root - password: password - charset: utf8 - collation: utf8_bin + +test: + <<: *common + database: "diaspora_test" diff --git a/config/locale_settings.yml b/config/locale_settings.yml index 60fe3c7b9..636fe6e83 100644 --- a/config/locale_settings.yml +++ b/config/locale_settings.yml @@ -1,5 +1,6 @@ default: "en" available: + bg: "български език" br: "Brezhoneg" ca: "Català" cs: "Čeština" @@ -21,6 +22,8 @@ available: id: "Bahasa Indonesia" is: "íslenska" it: "Italiano" + ja: "日本語" + ko: "한국어" lt: "Lietuviškai" mk: "македонски" ml: "മലയാളം" @@ -35,7 +38,7 @@ available: sk: "Slovenčina" sv: "Svenska" tr: "Türk" - zh: "中文" + zh-CN: "中文" zh-TW: "台灣中文" fallbacks: en-GB: diff --git a/config/locales/cldr/README.md b/config/locales/cldr/README.md new file mode 100644 index 000000000..153d10c19 --- /dev/null +++ b/config/locales/cldr/README.md @@ -0,0 +1 @@ +DO NOT EDIT THIS FILES. Thanks! diff --git a/config/locales/cldr/bg_plurals.rb b/config/locales/cldr/bg_plurals.rb new file mode 100644 index 000000000..642df1b9f --- /dev/null +++ b/config/locales/cldr/bg_plurals.rb @@ -0,0 +1 @@ +{ :bg => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/ca_plurals.rb b/config/locales/cldr/ca_plurals.rb new file mode 100644 index 000000000..67f246d79 --- /dev/null +++ b/config/locales/cldr/ca_plurals.rb @@ -0,0 +1 @@ +{ :ca => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/cs_plurals.rb b/config/locales/cldr/cs_plurals.rb new file mode 100644 index 000000000..48115c7b2 --- /dev/null +++ b/config/locales/cldr/cs_plurals.rb @@ -0,0 +1 @@ +{ :cs => { :i18n => {:plural => { :keys => [:one, :few, :other], :rule => lambda { |n| n == 1 ? :one : [2, 3, 4].include?(n) ? :few : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/cy_plurals.rb b/config/locales/cldr/cy_plurals.rb new file mode 100644 index 000000000..72ed2ac4d --- /dev/null +++ b/config/locales/cldr/cy_plurals.rb @@ -0,0 +1 @@ +{ :cy => { :i18n => {:plural => { :keys => [:one, :two, :many, :other], :rule => lambda { |n| n == 1 ? :one : n == 2 ? :two : n == 8 || n == 11 ? :many : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/da_plurals.rb b/config/locales/cldr/da_plurals.rb new file mode 100644 index 000000000..75d97ee78 --- /dev/null +++ b/config/locales/cldr/da_plurals.rb @@ -0,0 +1 @@ +{ :da => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/de_plurals.rb b/config/locales/cldr/de_plurals.rb new file mode 100644 index 000000000..a0f157ce8 --- /dev/null +++ b/config/locales/cldr/de_plurals.rb @@ -0,0 +1 @@ +{ :de => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/el_plurals.rb b/config/locales/cldr/el_plurals.rb new file mode 100644 index 000000000..5f61405a8 --- /dev/null +++ b/config/locales/cldr/el_plurals.rb @@ -0,0 +1 @@ +{ :el => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/en_plurals.rb b/config/locales/cldr/en_plurals.rb new file mode 100644 index 000000000..e66a6117f --- /dev/null +++ b/config/locales/cldr/en_plurals.rb @@ -0,0 +1 @@ +{ :en => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/es_plurals.rb b/config/locales/cldr/es_plurals.rb new file mode 100644 index 000000000..abfa8cb18 --- /dev/null +++ b/config/locales/cldr/es_plurals.rb @@ -0,0 +1 @@ +{ :es => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/eu_plurals.rb b/config/locales/cldr/eu_plurals.rb new file mode 100644 index 000000000..8f0c5f463 --- /dev/null +++ b/config/locales/cldr/eu_plurals.rb @@ -0,0 +1 @@ +{ :eu => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/fi_plurals.rb b/config/locales/cldr/fi_plurals.rb new file mode 100644 index 000000000..51a57d48c --- /dev/null +++ b/config/locales/cldr/fi_plurals.rb @@ -0,0 +1 @@ +{ :fi => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/fr_plurals.rb b/config/locales/cldr/fr_plurals.rb new file mode 100644 index 000000000..eb783f238 --- /dev/null +++ b/config/locales/cldr/fr_plurals.rb @@ -0,0 +1 @@ +{ :fr => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n && n != 2 ? :one : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/ga_plurals.rb b/config/locales/cldr/ga_plurals.rb new file mode 100644 index 000000000..1301f8b3e --- /dev/null +++ b/config/locales/cldr/ga_plurals.rb @@ -0,0 +1 @@ +{ :ga => { :i18n => {:plural => { :keys => [:one, :two, :other], :rule => lambda { |n| n == 1 ? :one : n == 2 ? :two : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/gl_plurals.rb b/config/locales/cldr/gl_plurals.rb new file mode 100644 index 000000000..f94440a77 --- /dev/null +++ b/config/locales/cldr/gl_plurals.rb @@ -0,0 +1 @@ +{ :gl => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/he_plurals.rb b/config/locales/cldr/he_plurals.rb new file mode 100644 index 000000000..36ea35c26 --- /dev/null +++ b/config/locales/cldr/he_plurals.rb @@ -0,0 +1 @@ +{ :he => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/hu_plurals.rb b/config/locales/cldr/hu_plurals.rb new file mode 100644 index 000000000..31ee31fb9 --- /dev/null +++ b/config/locales/cldr/hu_plurals.rb @@ -0,0 +1 @@ +{ :hu => { :i18n => {:plural => { :keys => [:other], :rule => lambda { |n| :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/id_plurals.rb b/config/locales/cldr/id_plurals.rb new file mode 100644 index 000000000..183ae3cac --- /dev/null +++ b/config/locales/cldr/id_plurals.rb @@ -0,0 +1 @@ +{ :id => { :i18n => {:plural => { :keys => [:other], :rule => lambda { |n| :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/is_plurals.rb b/config/locales/cldr/is_plurals.rb new file mode 100644 index 000000000..b9b3fb66e --- /dev/null +++ b/config/locales/cldr/is_plurals.rb @@ -0,0 +1 @@ +{ :is => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/it_plurals.rb b/config/locales/cldr/it_plurals.rb new file mode 100644 index 000000000..4264caa55 --- /dev/null +++ b/config/locales/cldr/it_plurals.rb @@ -0,0 +1 @@ +{ :it => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/ja_plurals.rb b/config/locales/cldr/ja_plurals.rb new file mode 100644 index 000000000..31aef4122 --- /dev/null +++ b/config/locales/cldr/ja_plurals.rb @@ -0,0 +1 @@ +{ :ja => { :i18n => {:plural => { :keys => [:other], :rule => lambda { |n| :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/ko_plurals.rb b/config/locales/cldr/ko_plurals.rb new file mode 100644 index 000000000..dff9b0543 --- /dev/null +++ b/config/locales/cldr/ko_plurals.rb @@ -0,0 +1 @@ +{ :ko => { :i18n => {:plural => { :keys => [:other], :rule => lambda { |n| :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/lt_plurals.rb b/config/locales/cldr/lt_plurals.rb new file mode 100644 index 000000000..f13f5074b --- /dev/null +++ b/config/locales/cldr/lt_plurals.rb @@ -0,0 +1 @@ +{ :lt => { :i18n => {:plural => { :keys => [:one, :few, :other], :rule => lambda { |n| n % 10 == 1 && ![11, 12, 13, 14, 15, 16, 17, 18, 19].include?(n % 100) ? :one : [2, 3, 4, 5, 6, 7, 8, 9].include?(n % 10) && ![11, 12, 13, 14, 15, 16, 17, 18, 19].include?(n % 100) ? :few : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/mk_plurals.rb b/config/locales/cldr/mk_plurals.rb new file mode 100644 index 000000000..3b2aeb73c --- /dev/null +++ b/config/locales/cldr/mk_plurals.rb @@ -0,0 +1 @@ +{ :mk => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n % 10 == 1 ? :one : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/ml_plurals.rb b/config/locales/cldr/ml_plurals.rb new file mode 100644 index 000000000..2815d104c --- /dev/null +++ b/config/locales/cldr/ml_plurals.rb @@ -0,0 +1 @@ +{ :ml => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/nb_plurals.rb b/config/locales/cldr/nb_plurals.rb new file mode 100644 index 000000000..8da3eaefb --- /dev/null +++ b/config/locales/cldr/nb_plurals.rb @@ -0,0 +1 @@ +{ :nb => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/nl_plurals.rb b/config/locales/cldr/nl_plurals.rb new file mode 100644 index 000000000..acdb5cdf5 --- /dev/null +++ b/config/locales/cldr/nl_plurals.rb @@ -0,0 +1 @@ +{ :nl => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/pa_plurals.rb b/config/locales/cldr/pa_plurals.rb new file mode 100644 index 000000000..a1e3b3bfa --- /dev/null +++ b/config/locales/cldr/pa_plurals.rb @@ -0,0 +1 @@ +{ :pa => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/pl_plurals.rb b/config/locales/cldr/pl_plurals.rb new file mode 100644 index 000000000..a27d71967 --- /dev/null +++ b/config/locales/cldr/pl_plurals.rb @@ -0,0 +1 @@ +{ :pl => { :i18n => {:plural => { :keys => [:one, :few, :other], :rule => lambda { |n| n == 1 ? :one : [2, 3, 4].include?(n % 10) && ![12, 13, 14].include?(n % 100) && ![22, 23, 24].include?(n % 100) ? :few : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/ro_plurals.rb b/config/locales/cldr/ro_plurals.rb new file mode 100644 index 000000000..452acb5cc --- /dev/null +++ b/config/locales/cldr/ro_plurals.rb @@ -0,0 +1 @@ +{ :ro => { :i18n => {:plural => { :keys => [:one, :few, :other], :rule => lambda { |n| n == 1 ? :one : n == 0 ? :few : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/ru_plurals.rb b/config/locales/cldr/ru_plurals.rb new file mode 100644 index 000000000..65156cfba --- /dev/null +++ b/config/locales/cldr/ru_plurals.rb @@ -0,0 +1 @@ +{ :ru => { :i18n => {:plural => { :keys => [:one, :few, :many, :other], :rule => lambda { |n| n % 10 == 1 && n % 100 != 11 ? :one : [2, 3, 4].include?(n % 10) && ![12, 13, 14].include?(n % 100) ? :few : n % 10 == 0 || [5, 6, 7, 8, 9].include?(n % 10) || [11, 12, 13, 14].include?(n % 100) ? :many : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/sk_plurals.rb b/config/locales/cldr/sk_plurals.rb new file mode 100644 index 000000000..544999796 --- /dev/null +++ b/config/locales/cldr/sk_plurals.rb @@ -0,0 +1 @@ +{ :sk => { :i18n => {:plural => { :keys => [:one, :few, :other], :rule => lambda { |n| n == 1 ? :one : [2, 3, 4].include?(n) ? :few : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/sl_plurals.rb b/config/locales/cldr/sl_plurals.rb new file mode 100644 index 000000000..0ccd47170 --- /dev/null +++ b/config/locales/cldr/sl_plurals.rb @@ -0,0 +1 @@ +{ :sl => { :i18n => {:plural => { :keys => [:one, :two, :few, :other], :rule => lambda { |n| n % 100 == 1 ? :one : n % 100 == 2 ? :two : [3, 4].include?(n % 100) ? :few : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/sv_plurals.rb b/config/locales/cldr/sv_plurals.rb new file mode 100644 index 000000000..9bfa12f24 --- /dev/null +++ b/config/locales/cldr/sv_plurals.rb @@ -0,0 +1 @@ +{ :sv => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } } \ No newline at end of file diff --git a/config/locales/cldr/tr_plurals.rb b/config/locales/cldr/tr_plurals.rb new file mode 100644 index 000000000..b0fb316ee --- /dev/null +++ b/config/locales/cldr/tr_plurals.rb @@ -0,0 +1 @@ +{ :tr => { :i18n => {:plural => { :keys => [:other], :rule => lambda { |n| :other } } } } } \ No newline at end of file diff --git a/config/locales/devise/devise.bg.yml b/config/locales/devise/devise.bg.yml new file mode 100644 index 000000000..e3462e307 --- /dev/null +++ b/config/locales/devise/devise.bg.yml @@ -0,0 +1,97 @@ +# Copyright (c) 2010, Diaspora Inc. This file is +# licensed under the Affero General Public License version 3 or later. See +# the COPYRIGHT file. + + +bg: + devise: + confirmations: + confirmed: "Акаунтът е потвърден. Сега сте вписани." + new: + resend_confirmation: "Повторно изпращане на инструкциите за отключване" + send_instructions: "След няколко минути ще получите ел. писмо съдържащо инструкции как да потвърдите акаунта си." + failure: + inactive: "Акаунтът все още не е активиран." + invalid: "Невалидно потребителско име или парола." + invalid_token: "Данните за удостоверяване не са валидни." + locked: "Акаунтът ви е заключен." + timeout: "Сесията ви изтече, моля впишете се отново, за да продължите." + unauthenticated: "Впишете се или се регистрирайте, за да продължите." + unconfirmed: "Потвърдете акаунта, за да продължите." + invitations: + invitation_token_invalid: "Предоставените данни за поканата не са валидни!" + send_instructions: "Поканата ви е изпратена." + updated: "Паролата е зададена. Сега сте вписани." + mailer: + confirmation_instructions: + confirm: "Потвърждаване на акаунта" + subject: "Инструкции за потвърждаване" + you_can_confirm: "Можете да потвърдите акаунта си чрез линка по-долу:" + hello: "Здравейте %{email}!" + invitation: + accept: "Приеман поканата" + ignore: "Ако не желаете да приемете поканата, моля игнорирайте писмото." + no_account_till: "Акаунтът няма да бъде създаден докато не посетите връзката по-горе и не се регистрирате." + subject: "Поканени сте да се присъедините към Diaspora!" + inviters: + accept_at: ", на адрес %{url}. Можете да приемете поканата чрез линка по-долу." + has_invited_you: "%{name} ви кани да се присъедините към Diaspora" + have_invited_you: "%{names} ви кани да се присъедините към Diaspora" + reset_password_instructions: + change: "Промяна на паролата" + ignore: "Ако не сте заявили промяната, моля игнорирайте писмото." + someone_requested: "Някой е заявил връзка за промяна на паролата. Можете да я промените чрез връзката по-долу." + subject: "Инструкции за възстановяване на паролата" + wont_change: "Паролата ви няма да бъде променена докато не посетите връзката по-горе и не зададете нова." + unlock_instructions: + account_locked: "Акаунтът ви е заключен поради голям брой неуспешни опити за вписване." + click_to_unlock: "За отключване на акаунта кликнете върху връзката по-долу:" + subject: "Инструкции за отключване" + unlock: "Отключване на акаунта" + welcome: "Добре дошли %{email}!" + passwords: + edit: + change_password: "Промяна на паролата" + new: + forgot_password: "Забравена парола?" + no_account: "Не съществува акаунт с въведената ел. поща. Ако очаквате покана, знайте че ние ги раздаваме възможно най-бързо" + send_password_instructions: "Изпращане на инструкции за възстановяване на паролата" + send_instructions: "Ще получите ел. писмо с инструкции за промяна на паролата." + updated: "Паролата е променена успешно. Сега сте вписани." + registrations: + destroyed: "Довиждане! Акаунтът ви е изтрит успешно. Надяваме се да се видим отново." + signed_up: "Регистрирахте се успешно. Ако е включена опцията за потвърждаване ще получите ел. писмо с инструкции." + updated: "Обновихте успешно акаунта си." + sessions: + new: + alpha_software: "Ще ползвате софтуерен продукт в ранен етап на развитие." + bugs_and_feedback: "Имайте предвид, че ще се сблъскате със софтуерни грешки. Препоръчваме ви да ползвате бутона Feedback (в десния край на страницата) за да съобщавате за всеки проблем! Ще се потрудим да отстраним всеки проблем, за който ни съобщите, възможно най-бързо." + bugs_and_feedback_mobile: "Имайте предвид, че ще се сблъскате със софтуерни грешки. Препоръчваме ви да съобщавате за всеки проблем! Ще се потрудим да отстраним всеки проблем, за който ни съобщите, възможно най-бързо." + login: "Вписване" + modern_browsers: "поддържа само съвременни браузъри." + password: "Парола" + remember_me: "Запомни ме" + sign_in: "Вписване" + username: "Потребителско име" + signed_in: "Вписахте се успешно." + signed_out: "Отписахте се успешно." + shared: + links: + forgot_your_password: "Забравена парола?" + receive_confirmation: "Не сте получили инструкциите за отключване?" + receive_unlock: "Не сте получили инструкциите за отключване?" + sign_in: "Вписване" + sign_up: "Регистриране" + sign_up_closed: "За сега регистрациите не са възможни." + mail_signup_form: + sign_up_for_an_invite: "Запишете се за покана!" + unlocks: + new: + resend_unlock: "Повторно изпращане на инструкциите за отключване" + send_instructions: "След няколко минути ще получите ел. писмо съдържащо инструкции как да отключите акаунта си." + unlocked: "Акаунтът е отключен. Сега сте вписани." + errors: + messages: + already_confirmed: "вече е потвърдено" + not_found: "не е открито" + not_locked: "не е заключена" diff --git a/config/locales/devise/devise.da.yml b/config/locales/devise/devise.da.yml index f9a808a4e..f8b00e21f 100644 --- a/config/locales/devise/devise.da.yml +++ b/config/locales/devise/devise.da.yml @@ -12,7 +12,7 @@ da: send_instructions: "Du vil modtage en e-mail med instruktioner om hvordan du bekræfter din konto om et par minutter." failure: inactive: "Din konto er endnu ikke aktiveret." - invalid: "Forkert e-mail eller adgangskode." + invalid: "Forkert brugernavn eller adgangskode." invalid_token: "Ugyldig token." locked: "Din konto er låst." timeout: "Du har været inaktiv for længe. Log ind for at fortsætte." diff --git a/config/locales/devise/devise.es.yml b/config/locales/devise/devise.es.yml index c807f4ce3..46df18487 100644 --- a/config/locales/devise/devise.es.yml +++ b/config/locales/devise/devise.es.yml @@ -12,7 +12,7 @@ es: send_instructions: "Recibirás un correo con instrucciones para confirmar tu cuenta en pocos minutos." failure: inactive: "Tu cuenta aún no ha sido activada." - invalid: "Contraseña o correo incorrecto." + invalid: "Nombre de usuario o contraseña incorrectos." invalid_token: "Identificador de autenticación incorrecto." locked: "Tu cuenta está bloqueada." timeout: "Tu sesión ha expirado, por favor accede de nuevo para continuar." diff --git a/config/locales/devise/devise.eu.yml b/config/locales/devise/devise.eu.yml index 309fc2263..c93926650 100644 --- a/config/locales/devise/devise.eu.yml +++ b/config/locales/devise/devise.eu.yml @@ -12,7 +12,7 @@ eu: send_instructions: "Minutu batzuetan kontua baieztatzeko argibideak jasoko dituzu e-postan." failure: inactive: "Zure kontua ez da aktibatu oraindik." - invalid: "E-posta edo pasahitza okerra." + invalid: "Erabiltzaile edo pasahitz okerra." invalid_token: "Autentikazio datu akasduna." locked: "Zure kontua ez dago erabilgarri." timeout: "Zure sesioa bukatu da, autentikatu berriz jarraitzeko." diff --git a/config/locales/devise/devise.gl.yml b/config/locales/devise/devise.gl.yml index e903ef3cb..9a90c1a50 100644 --- a/config/locales/devise/devise.gl.yml +++ b/config/locales/devise/devise.gl.yml @@ -6,32 +6,32 @@ gl: devise: confirmations: - confirmed: "A túa conta foi confirmada. Xa estás en Diaspora" + confirmed: "Confirmouse a súa conta. Xa está en Diaspora." new: - resend_confirmation: "Volver a enviar instruccións de confirmación." - send_instructions: "Recibiraás un correo con instrucción para confirmar a túa conta nuns minutos." + resend_confirmation: "Volver enviar as instrucións de confirmación." + send_instructions: "En cuestión de minutos recibirá un correo electrónico con instrucións para confirmar a súa conta." failure: - inactive: "A túa conta aínda non foi activada." - invalid: "Correo ou contrasinal incorrecta." - invalid_token: "Invitación inválida." - locked: "A túa conta está bloqueada." - timeout: "A túa sesión rematou, entra de novo para continuar." - unauthenticated: "Tes que entrar ou rexistrarte antes de seguir." - unconfirmed: "Tes que confirmar a túa conta antes de seguir." + inactive: "Aínda non se activou a súa conta." + invalid: "O correo electrónico ou contrasinal son incorrectos." + invalid_token: "A invitación non é válida." + locked: "A súa conta está bloqueada." + timeout: "A súa sesión rematou, volva identificarse para continuar." + unauthenticated: "Ten que identificarse ou rexistrarte para continuar." + unconfirmed: "Ten que confirmar a súa conta para continuar." invitations: - invitation_token_invalid: "Está invitación non é valida!" - send_instructions: "A túa invitación foi enviada." - updated: "O teu contrasinal estableceuse correctamente." + invitation_token_invalid: "A invitación non é valida!" + send_instructions: "Enviouse a invitación." + updated: "O novo contrasinal gardouse correctamente." mailer: confirmation_instructions: - confirm: "Confirmar conta" - subject: "Instruccións de confirmación" - you_can_confirm: "Podes confirmar a túa conta a través do enlace de abaixo:" + confirm: "Confirmar a conta" + subject: "Instrucións de confirmación" + you_can_confirm: "Pode confirmar a súa conta mediante a ligazón que hai máis abaixo:" hello: "Ola %{email}!" invitation: - accept: "Aceptar convite" - ignore: "Se non queres aceptar a invitación, por favor ignora este correo." - no_account_till: "A túa conta non se creará ata que premas o link de arriba e te rexistres." + accept: "Aceptar a invitación" + ignore: "Se non quere aceptar a invitación, non ten máis que ignorar esta mensaxe." + no_account_till: "A súa conta non se creará ata que premas a ligazón que hai máis arriba e se rexistre." subject: "Fuches invitado a formar parte de Diaspora!" inviters: accept_at: ", %{url}, podes aceptar mediante o link de abaixo." @@ -70,7 +70,7 @@ gl: login: "Nome de usuario" modern_browsers: "só acepta navegadores actuais." password: "Contrasinal" - remember_me: "Lémbrame" + remember_me: "Lembrar os datos." sign_in: "Entrar" username: "Nome de usuario" signed_in: "Entrou satisfactoriamente." diff --git a/config/locales/devise/devise.he.yml b/config/locales/devise/devise.he.yml index 6f59b8b07..9823a00ae 100644 --- a/config/locales/devise/devise.he.yml +++ b/config/locales/devise/devise.he.yml @@ -12,7 +12,7 @@ he: send_instructions: "בעוד מספר דקות תתקבל לתיבת הדוא״ל שלך הודעה עם הנחיות כיצד לאמת את חשבונך." failure: inactive: "חשבונך לא הופעל עדיין." - invalid: "הססמה או הדוא״ל שגויים." + invalid: "שם המשתמש או הססמה שגויים." invalid_token: "אסימון האימות שגוי." locked: "חשבונך נעול." timeout: "ההפעלה שלך פגה, נא להיכנס שוב כדי להמשיך." diff --git a/config/locales/devise/devise.it.yml b/config/locales/devise/devise.it.yml index e12bd126e..881385883 100644 --- a/config/locales/devise/devise.it.yml +++ b/config/locales/devise/devise.it.yml @@ -12,7 +12,7 @@ it: send_instructions: "Tra pochi minuti riceverai una email per confermare il tuo account." failure: inactive: "Il tuo account non è ancora stato attivato." - invalid: "Email o password errati." + invalid: "Nome utente o password errati." invalid_token: "Token di autenticazione errato." locked: "Il tuo account è bloccato." timeout: "La tua sessione è scaduta, effettua di nuovo l'accesso per continuare." @@ -71,7 +71,7 @@ it: modern_browsers: "supporta soltano i browser recenti." password: "Password" remember_me: "Ricordami" - sign_in: "Registrati" + sign_in: "Accedi" username: "Nome utente" signed_in: "Accesso effettuato con successo." signed_out: "Disconnessione effettuata con successo." diff --git a/config/locales/devise/devise.ja.yml b/config/locales/devise/devise.ja.yml new file mode 100644 index 000000000..9c40979cf --- /dev/null +++ b/config/locales/devise/devise.ja.yml @@ -0,0 +1,97 @@ +# Copyright (c) 2010, Diaspora Inc. This file is +# licensed under the Affero General Public License version 3 or later. See +# the COPYRIGHT file. + + +ja: + devise: + confirmations: + confirmed: "アカウントの認証に成功しました。既にログイン済みです。" + new: + resend_confirmation: "認証メールを再送する" + send_instructions: "数分後にアカウント認証の手続きメールが届きます。" + failure: + inactive: "アカウントはまだ承認されていません。" + invalid: "ユーザ名またはパスワードが不正です。" + invalid_token: "無効な認証トークンです。" + locked: "アカウントがロックされています。" + timeout: "セッション切れになりました。続くにはもう一度ログインしてください。" + unauthenticated: "進むにはログインまたは新規登録する必要があります。" + unconfirmed: "進にはアカウントを確認する必要があります。" + invitations: + invitation_token_invalid: "ご使用の招待トークンは無効です!" + send_instructions: "招待メールを送信しました。" + updated: "パスワードの設定に成功しました。既にログイン済みです。" + mailer: + confirmation_instructions: + confirm: "アカウントを認証する" + subject: "認証手続き" + you_can_confirm: "次のリンクからアカウントが認証できます。" + hello: "%{email}さん、こんにちは!" + invitation: + accept: "招待を承諾する" + ignore: "招待にご興味がない場合は、このメールを無視してください。" + no_account_till: "上のリンクへアクセスして新規登録するまではアカウントが作成されません。" + subject: "ダイアスポラへ参加しませんか!" + inviters: + accept_at: "、%{url}。下のリンクから承諾できます。" + has_invited_you: "%{name}さんはダイアスポラへの参加を招待しています。" + have_invited_you: "%{names}さん等はダイアスポラへの参加を招待しています。" + reset_password_instructions: + change: "パスワードを変更する" + ignore: "再設定を申請した覚えがない場合はこのメールを無視してください。" + someone_requested: "パスワード変更リンクの申請を預かりました。下のリンクから変更可能です。" + subject: "パスワード再設定手続き" + wont_change: "上のリンクをアクセスして新しいパスワードを登録するまではパスワードが変更されません。" + unlock_instructions: + account_locked: "ログイン失敗が多すぎたため、アカウントがロックされました。" + click_to_unlock: "アカウントのロックを解除するのに下記のリンクにクリックしてください。" + subject: "ロック解除説明" + unlock: "アカウントのロックを解除する" + welcome: "%{email}さん、ようこそ!" + passwords: + edit: + change_password: "パスワードを変更する" + new: + forgot_password: "パスワードを忘れましたか。" + no_account: "このメールアドレスに一致するアカウントは存在しません。招待待ちの方は、なるべく早く出せるように努力していますので、もう少々お待ちください。" + send_password_instructions: "パスワード再発行の手続きメールを送ってください。" + send_instructions: "数分後にパスワード再発行の手続きメールが届きます。" + updated: "パスワードの変更に成功しました。既にログイン済みです。" + registrations: + destroyed: "さようなら!アカウントの取消しに成功しました。またのご参加をお待ちしています。" + signed_up: "新規登録に成功しました。設定が有効な場合、確認メールも送信されました。" + updated: "アカウントの更新に成功しました。" + sessions: + new: + alpha_software: "これから使うソフトはアルファ版です。" + bugs_and_feedback: "バク発生に覚悟してください。小さな支障でもページ右側の「フィードバック」ボタンからご報告願います!頂いた問題報告はなるべく早く解決できるよう努力します。" + bugs_and_feedback_mobile: "バク発生に覚悟してください。小さな支障でもご報告願います!頂いた問題報告はなるべく早く解決できるよう努力します。" + login: "ログイン" + modern_browsers: "最新型のブラウザにしか対応していません。" + password: "パスワード" + remember_me: "ログインしたままにする" + sign_in: "ログイン" + username: "ユーザ名" + signed_in: "ログインに成功しました。" + signed_out: "ログアウトに成功しました。" + shared: + links: + forgot_your_password: "パスワードを忘れましたか。" + receive_confirmation: "認証手続きメールが届きませんでしたか。" + receive_unlock: "ロック解除の説明が届きませんでしたか。" + sign_in: "ログイン" + sign_up: "新規登録" + sign_up_closed: "一般の新規登録は現在受け付けていません。" + mail_signup_form: + sign_up_for_an_invite: "参加招待の希望者として登録したい!" + unlocks: + new: + resend_unlock: "ロック解除手続きメールを再送する" + send_instructions: "数分後にアカウントロック解除の手続きメールが届きます。" + unlocked: "アカウントのロック解除に成功しました。既にログイン済みです。" + errors: + messages: + already_confirmed: "既に認証済みです。" + not_found: "見つかりませんでした。" + not_locked: "ロックされませんでした。" diff --git a/config/locales/devise/devise.ko.yml b/config/locales/devise/devise.ko.yml new file mode 100644 index 000000000..07f9e724c --- /dev/null +++ b/config/locales/devise/devise.ko.yml @@ -0,0 +1,97 @@ +# Copyright (c) 2010, Diaspora Inc. This file is +# licensed under the Affero General Public License version 3 or later. See +# the COPYRIGHT file. + + +ko: + devise: + confirmations: + confirmed: "계정을 성공적으로 확인한 뒤 로그인하였습니다." + new: + resend_confirmation: "확인 메일 다시 보내기" + send_instructions: "몇 분 안으로 계정을 확인하기 위한 메일이 도착합니다." + failure: + inactive: "아직 계정이 활성화되지 않았습니다." + invalid: "유효하지 않은 사용자명과 암호" + invalid_token: "유효하지 않은 인증 토큰" + locked: "계정이 잠겼습니다." + timeout: "세션이 만료되었습니다. 다시 로그인하십시오." + unauthenticated: "더 나아가려면 로그인하거나 가입해야 합니다." + unconfirmed: "더 나아가기 전에 계정을 확인해야 합니다." + invitations: + invitation_token_invalid: "초대장 토큰이 유효하지 않습니다!" + send_instructions: "초대장을 보냈습니다" + updated: "암호를 성공적으로 바꾼 뒤 로그인하였습니다." + mailer: + confirmation_instructions: + confirm: "계정 확인하기" + subject: "확인 안내" + you_can_confirm: "아래 링크로 계정을 확인할 수 있습니다:" + hello: "%{email} 님 환영합니다!" + invitation: + accept: "초대 수락하기" + ignore: "초대를 수락하지 않으려면 이 메일을 무시하십시오." + no_account_till: "계정은 가입하지 않는 한 만들어지지 않습니다." + subject: "디아스포라로 초대합니다!" + inviters: + accept_at: "이 링크로 수락할 수 있습니다: %{url}" + has_invited_you: "%{name} 님이 귀하를 디아스포라에 초대하였습니다." + have_invited_you: "%{name} 님이 귀하를 디아스포라에 초대하였습니다." + reset_password_instructions: + change: "암호 바꾸기" + ignore: "암호 초기화를 요청하지 않았다면 이 메일을 무시하십시오." + someone_requested: "아래 링크로 암호를 다시 정할 수 었습니다:" + subject: "암호 초기화 안내" + wont_change: "암호는 링크를 클릭해서 새 암호를 만들기 전까지 바뀌지 않습니다." + unlock_instructions: + account_locked: "귀하의 계정은 로그인을 여러번 실패해 잠겼습니다." + click_to_unlock: "아래 링크로 계정을 풀을 수 있습니다." + subject: "계정 풀기 안내" + unlock: "계정 풀기" + welcome: "%{email} 님 환영합니다!" + passwords: + edit: + change_password: "암호 바꾸기" + new: + forgot_password: "암호를 잊었습니까?" + no_account: "등록되지 않은 이메일 주소입니다." + send_password_instructions: "암호 초기화 메일 보내기" + send_instructions: "몇 분 안으로 암호를 초기화하기 위한 메일이 도착합니다." + updated: "암호를 성공적으로 바꾼 뒤 로그인하였습니다." + registrations: + destroyed: "계정을 성공적으로 취소하였습니다." + signed_up: "성공적으로 가입하였습니다." + updated: "계정을 성공적으로 갱신하였습니다." + sessions: + new: + alpha_software: "이 소프트웨어는 알파 실험 단계입니다." + bugs_and_feedback: "여러 버그를 경험하실 수 있습니다. 오른쪽의 피드백 단추로 문제점을 보고해주십시오! 보고하신 문제점을 빠르게 해결하기 위해 최선을 다하겠습니다." + bugs_and_feedback_mobile: "여러 버그를 경험하실 수 있습니다. 문제점을 보고해주십시오! 보고하신 문제점을 빠르게 해결하기 위해 최선을 다하겠습니다." + login: "로그인" + modern_browsers: "최신 브라우저만 지원합니다." + password: "암호" + remember_me: "로그인 유지" + sign_in: "로그인" + username: "사용자명" + signed_in: "성공적으로 로그인하였습니다." + signed_out: "성공적으로 로그아웃하였습니다." + shared: + links: + forgot_your_password: "암호를 잊었습니까?" + receive_confirmation: "확인 안내를 받지 못했습니까?" + receive_unlock: "풀기 안내를 받지 못했슸니까?" + sign_in: "로그인" + sign_up: "가입하기" + sign_up_closed: "공개 가입이 닫혀있습니다." + mail_signup_form: + sign_up_for_an_invite: "초대받고 싶으면 이메일 주소를 등록해두십시오!" + unlocks: + new: + resend_unlock: "풀기 메일 다시 보내기" + send_instructions: "몇 분 안으로 계정을 풀기 위한 메일이 도착합니다." + unlocked: "계정을 성공적으로 풀은 뒤 로그인하였습니다." + errors: + messages: + already_confirmed: ": 이미 확인되었습니다" + not_found: ": 찾을 수 없습니다" + not_locked: ": 잠겨있지 읺습니다" diff --git a/config/locales/devise/devise.ml.yml b/config/locales/devise/devise.ml.yml index 281b60125..82acd053a 100644 --- a/config/locales/devise/devise.ml.yml +++ b/config/locales/devise/devise.ml.yml @@ -31,30 +31,30 @@ ml: invitation: accept: "ക്ഷണം സ്വീകരിക്കു" ignore: "താങ്കള്‍ക്ക് ഈ ക്ഷണം സ്വീകരിക്കേണ്ടെങ്കില്‍ ദയവായി ഈ കത്ത് അവഗണിക്കുക." - no_account_till: "Your account won't be created until you access the link above and sign up." + no_account_till: "മുകളിലുള്ള കണ്ണി ഉപയോഗിച്ച് ഇതില്‍ ചേരാതെ താങ്കളുടെ അക്കൌണ്ട് നിര്‍മ്മിക്കില്ല." subject: "ഡയസ്പോറയില്‍ ചേരാന്‍ താങ്കളെ ക്ഷണിച്ചിരിക്കുന്നു!" inviters: accept_at: ", at %{url}, you can accept it through the link below." - has_invited_you: "%{name} has invited you to join Diaspora" - have_invited_you: "%{names} have invited you to join Diaspora" + has_invited_you: "%{name} താങ്കളെ ഡയസ്പോറയില്‍ ചേരുന്നതിനായി ക്ഷണിച്ചിരിക്കുന്നു" + have_invited_you: "%{names} താങ്കളെ ഡയസ്പോറയില്‍ ചേരുന്നതിനായി ക്ഷണിച്ചിരിക്കുന്നു" reset_password_instructions: change: "എന്റെ രഹസ്യവാക്ക് മാറ്റുക" ignore: "താങ്കള്‍ ഇത് ആവശ്യപ്പെട്ടിലെങ്കില്‍ ദയവായി അവഗണിക്കുക." - someone_requested: "Someone has requested a link to change your password, and you can do this through the link below." + someone_requested: "താങ്കളുടെ രഹസ്യവാക്ക് മാറ്റുന്നതിന് ആരോ അപേക്ഷ നല്‍കിയിരിക്കുന്നു. മാറ്റുന്നതിനായി താഴെയുള്ള കണ്ണി തിരഞ്ഞെടുക്കാവുന്നതാണ്." subject: "Reset password instructions" - wont_change: "Your password won't change until you access the link above and create a new one." + wont_change: "മുകളിലുള്ള കണ്ണിയിലൂടെ പൂതിയ ഒരു രഹസ്യവാക്ക് നിര്‍മ്മിക്കാതെ അത് മാറ്റപ്പെടില്ല." unlock_instructions: account_locked: "Your account has been locked due to an excessive amount of unsuccessful sign in attempts." - click_to_unlock: "Click the link below to unlock your account:" - subject: "Unlock Instructions" - unlock: "Unlock my account" + click_to_unlock: "നിങ്ങളുടെ അക്കൌണ്ട് തുറക്കുന്നതിനായി താഴെയുള്ള കണ്ണി തെരഞ്ഞെടുക്കുക:" + subject: "അക്കൌണ്ട് തുറക്കുന്നതിനുള്ള വിവരങ്ങള്‍" + unlock: "എന്റെ ആക്കൌണ്ട് തുറക്കുക" welcome: "സ്വാഗതം %{email}!" passwords: edit: change_password: "എന്റെ രഹസ്യവാക്ക് മാറ്റുക" new: forgot_password: "താങ്കളുടെ രഹസ്യവാക്ക് മറന്നോ?" - no_account: "No account with this email exsists. If you are waiting for an invite, we are rolling them out as soon as possible" + no_account: "No account with this email exists. If you are waiting for an invite, we are rolling them out as soon as possible" send_password_instructions: "Send me reset password instructions" send_instructions: "You will receive an email with instructions about how to reset your password in a few minutes." updated: "Your password was changed successfully. You are now signed in." diff --git a/config/locales/devise/devise.pl.yml b/config/locales/devise/devise.pl.yml index 33d61ed08..21776eb18 100644 --- a/config/locales/devise/devise.pl.yml +++ b/config/locales/devise/devise.pl.yml @@ -54,7 +54,7 @@ pl: change_password: "Zmień hasło" new: forgot_password: "Nie pamiętasz hasła?" - no_account: "No account with this email exsists. If you are waiting for an invite, we are rolling them out as soon as possible" + no_account: "Konto o takim emailu nie istnieje. Jeżeli czekasz na nowe zaproszenia, wydajemy je tak szybko, jak to tylko możliwe." send_password_instructions: "Wyślij mi instrukcje resetowania hasła" send_instructions: "W ciągu kilku minut otrzymasz e-maila zawierającego instrukcjie dotyczące zresetowania hasła." updated: "Twoje hasło zostało zmienione. Zalogowano pomyślnie." diff --git a/config/locales/devise/devise.sl.yml b/config/locales/devise/devise.sl.yml index 5f6e86f8f..203f6f0ee 100644 --- a/config/locales/devise/devise.sl.yml +++ b/config/locales/devise/devise.sl.yml @@ -12,7 +12,7 @@ sl: send_instructions: "V nekaj minutah boste po e-pošti prejeli navodila, kako potrditi vaš uporabniški račun." failure: inactive: "Vaš račun še ni aktiviran." - invalid: "Napačen e-naslov ali geslo." + invalid: "Napačeno uporabniško ime ali geslo." invalid_token: "Neveljavna avtentikacija." locked: "Vaš račun je zaklenjen." timeout: "Vaša seja je potekla. Za nadaljevanje se ponovno prijavite." @@ -54,7 +54,7 @@ sl: change_password: "Spremeni geslo" new: forgot_password: "Ste pozabili geslo?" - no_account: "Uporabniški račun s tem e-naslovom ne obstaja. V kolikor čakate na povabilo, ga lahko v kratkem pričakujete." + no_account: "Uporabniški račun s tem e-naslovom ne obstaja. V kolikor še čakate na povabilo, ga lahko v kratkem pričakujete." send_password_instructions: "Pošlji navodila za ponastavitev gesla" send_instructions: "V nekaj minutah boste po e-pošti prejeli navodila za ponastavitev vašega gesla." updated: "Vaše geslo je bilo uspešno spremenjeno. Zdaj ste prijavljeni." diff --git a/config/locales/devise/devise.zh-CN.yml b/config/locales/devise/devise.zh-CN.yml new file mode 100644 index 000000000..0f87631d2 --- /dev/null +++ b/config/locales/devise/devise.zh-CN.yml @@ -0,0 +1,97 @@ +# Copyright (c) 2010, Diaspora Inc. This file is +# licensed under the Affero General Public License version 3 or later. See +# the COPYRIGHT file. + + +zh-CN: + devise: + confirmations: + confirmed: "帐号确认成功。您已经成功登录。" + new: + resend_confirmation: "重送发送帐号确认邮件" + send_instructions: "您会在几分钟内收到一封邮件,它将指引您完成帐号确认步骤。" + failure: + inactive: "你的帐号尚未激活。" + invalid: "邮箱或密码有误。" + invalid_token: "验证信息不合法。" + locked: "您的帐号已锁定。" + timeout: "会话超时。若要继续,请重新登录。" + unauthenticated: "请您登录或注册。" + unconfirmed: "你必须先验证帐号才能继续。" + invitations: + invitation_token_invalid: "邀请码验证失败。" + send_instructions: "邀请发送成功。" + updated: "密码设定成功。您已经成功登录。" + mailer: + confirmation_instructions: + confirm: "确认帐号" + subject: "帐号确认步骤" + you_can_confirm: "你可以点击下面的链接确认帐号:" + hello: "您好, %{email}!" + invitation: + accept: "接受邀请" + ignore: "如果您不想接受邀请, 请忽略这封邮件。" + no_account_till: "点击以上链接并注册后, 你才能创建帐号。" + subject: "您被邀请加入Diaspora!" + inviters: + accept_at: " (%{url}), 你可以点击下面的链接接收邀请。" + has_invited_you: "%{name} 邀请您加入Diaspora" + have_invited_you: "%{names} 邀请您加入Diaspora" + reset_password_instructions: + change: "重置密码" + ignore: "如果您并没有请求重置密码, 请忽略这封信件。" + someone_requested: "有人请求重置您的密码,若确实要这么做,请点击下面的链接。" + subject: "密码重置步骤" + wont_change: "在点击以上链接重置密码后,您的密码才会改变。" + unlock_instructions: + account_locked: "您的帐号因为登录失败次数异常而被锁定。" + click_to_unlock: "点击下面的链接以解锁您的帐号:" + subject: "帐号解锁步骤" + unlock: "解锁帐号" + welcome: "欢迎您, %{email}!" + passwords: + edit: + change_password: "修改密码" + new: + forgot_password: "忘记密码?" + no_account: "没有与此邮箱关联的帐号。如果您在等待邀请函, 我们将尽快寄出." + send_password_instructions: "请向我发送密码重置步骤" + send_instructions: "几分钟内您将收到一封包含密码重置步骤的邮件。" + updated: "密码修改成功。您已经登入了。" + registrations: + destroyed: "再见!您的帐号已经关闭。希望不久后再会。" + signed_up: "您已经成功注册。如果有设定的话, 确认信会送到您的邮箱。" + updated: "帐号更新成功。" + sessions: + new: + alpha_software: "你即将使用处于开发初期的功能。" + bugs_and_feedback: "给您一个提醒, 你将可能遇到bug。 遇到任何问题,都请您点击浏览器右边的\"反馈\"按钮向我们反馈! 我们会尽快处理您反馈的任何问题。" + bugs_and_feedback_mobile: "给您一个提醒, 你将可能遇到bug。 遇到任何问题都请你向我们反馈! 我们会尽快处理你反馈的任何问题." + login: "登录" + modern_browsers: "只支持较新的浏览器。" + password: "密码" + remember_me: "记住密码" + sign_in: "登录" + username: "用户名" + signed_in: "登录成功。" + signed_out: "登出成功。" + shared: + links: + forgot_your_password: "忘记密码?" + receive_confirmation: "没有收到确认步骤?" + receive_unlock: "没有收到重置步骤?" + sign_in: "登录" + sign_up: "注册" + sign_up_closed: "目前不开放公开注册。" + mail_signup_form: + sign_up_for_an_invite: "凭邀请函注册!" + unlocks: + new: + resend_unlock: "重新发送解锁步骤" + send_instructions: "几分钟后您将收到一封邮件,它将指引您解锁您的帐号。" + unlocked: "帐号解锁成功。你已经登录。" + errors: + messages: + already_confirmed: "已确认" + not_found: "未找到" + not_locked: "未锁定" diff --git a/config/locales/diaspora/ar.yml b/config/locales/diaspora/ar.yml index 45f838a7f..63936dda4 100644 --- a/config/locales/diaspora/ar.yml +++ b/config/locales/diaspora/ar.yml @@ -354,7 +354,7 @@ ar: recent_posts: "Recent Posts" recent_public_posts: "Recent Public Posts" return_to_aspects: "Return to your aspects page" - similar_contacts: "similar contacts" + see_all: "See all" start_sharing: "start sharing" to_accept_or_ignore: "to accept or ignore it." you_have_no_tags: "you have no tags!" diff --git a/config/locales/diaspora/bg.yml b/config/locales/diaspora/bg.yml new file mode 100644 index 000000000..ca353a089 --- /dev/null +++ b/config/locales/diaspora/bg.yml @@ -0,0 +1,617 @@ +# Copyright (c) 2010, Diaspora Inc. This file is +# licensed under the Affero General Public License version 3 or later. See +# the COPYRIGHT file. + + +bg: + _comments: "Коментари" + _home: "Home" + _photos: "снимки" + _services: "Услуги" + account: "Акаунт" + activerecord: + errors: + models: + contact: + attributes: + person_id: + taken: "must be unique among this user's contacts." + person: + attributes: + diaspora_handle: + taken: "вече е зает." + request: + attributes: + from_id: + taken: "is a duplicate of a pre-existing request." + user: + attributes: + email: + taken: "е вече заета." + person: + invalid: "is invalid." + username: + taken: "е вече заето." + ago: "преди %{time}" + all_aspects: "Всички аспекти" + application: + helper: + unknown_person: "непознато лице" + video_title: + unknown: "Unknown Video Title" + are_you_sure: "Сигурни ли сте?" + aspect_memberships: + destroy: + failure: "Лицето не бе премахнато от аспекта" + no_membership: "Избраното лице не може да бъде намерено в този апект" + success: "Лицето е премахнато от аспекта" + aspects: + add_to_aspect: + failure: "Контактът не бе добавен към аспекта." + success: "Контактът е добавен към аспекта." + aspect_contacts: + done_editing: "готово" + aspect_stream: + activity: "активност" + post_time: "ред на публикуване" + sort_by: "сортиране по:" + contacts_not_visible: "Контактите в аспекта няма да бъдат видими един за друг." + contacts_visible: "Контактите в аспекта ще бъдат видими един за друг." + create: + failure: "Аспектът не бе създаден." + success: "Новият аспект %{name} бе създаден" + destroy: + failure: "%{name} не е празен, затова не може да бъде изтрит." + success: "%{name} бе изтрит." + edit: + add_existing: "Добавяне на съществуващ контакт" + aspect_list_is_not_visible: "списъкът на аспекта е скрит за останалите в аспекта" + aspect_list_is_visible: "списъкът на аспекта е открит за останалите в аспекта" + confirm_remove_aspect: "Наистина ли желаете да бъде премахнат аспектът?" + done: "Готово" + make_aspect_list_visible: "нека аспектът бъде видим" + remove_aspect: "Изтриване на аспекта" + rename: "преименуване" + update: "update" + updating: "updating" + few: "%{count} аспекта" + helper: + are_you_sure: "Наистина ли желаете да бъде изтриете аспектът?" + aspect_not_empty: "Аспектът не е празен" + remove: "премахване" + index: + handle_explanation: "Това е вашият адрес в Diaspora. Наподобява адрес на ел. поща - давате го на хора, за да се свържат с вас." + no_contacts: "Няма контакти" + post_a_message: "публикуване на съобщение >>" + manage: + add_a_new_aspect: "Добавяне на аспект" + add_a_new_contact: "Добавяне на контакт" + drag_to_add: "Влачете за да добавите хора" + manage_aspects: "Управление на аспектите" + no_requests: "Няма нови покани" + requests: "Покани" + many: "%{count} аспекта" + move_contact: + error: "Грешка при преместване на контакт: %{inspect}" + failure: "didn't work %{inspect}" + success: "Лицето е преместено в нов аспект" + new_aspect: + create: "Създаване" + name: "Име" + no_posts_message: + start_talking: "Няма публикации. Бъдете първи!" + one: "1 аспект" + other: "%{count} аспекта" + seed: + family: "Семейство" + work: "Работа" + show: + edit_aspect: "редактиране на аспекта" + update: + failure: "Аспектът %{name} има твърде дълго име. Не може да бъде запаметен." + success: "Аспектът %{name} е успешно редактиран." + zero: "няма аспекти" + back: "Назад" + bookmarklet: + explanation: "%{link} от където и да е, запаметявайки връзката като отметка." + explanation_link_text: "Публикувайте в Diaspora" + post_something: "Публикувайте нещо в Diaspora" + post_success: "Публикувано!" + cancel: "Отказ" + comments: + few: "%{count} коментара" + many: "%{count} коментара" + new_comment: + comment: "коментар" + commenting: "Коментиране..." + one: "1 коментар" + other: "%{count} коментара" + zero: "няма коментари" + contacts: + create: + failure: "Контактът не бе създаден" + destroy: + failure: "Връзката с %{name} не бе премахната" + success: "Връзката с %{name} е премахната" + few: "%{count} контакта" + many: "%{count} контакта" + one: "1 контакт" + other: "%{count} контакта" + share_with_pane: + accepts: "Щом %{name} приеме ще можете да следите публикациите си в Diaspora" + add_new_aspect: "добавяне на нов аспект" + share_with: "Започнете да споделяте с %{name}" + zero: "няма контакти" + conversations: + create: + sent: "Съобщението е изпратено" + destroy: + success: "Разговорът е премахнат успешно" + helper: + new_messages: + few: "%{count} нови съобщения" + many: "%{count} нови съобщения" + one: "1 ново съобщение" + other: "%{count} нови съобщения" + zero: "няма нови съобщения" + index: + create_a_new_message: "създаване на съобщение" + inbox: "Входящи" + message_inbox: "Входяща кутия" + new_message: "Ново съобщение" + no_conversation_selected: "няма избран разговор" + no_messages: "няма съобщения" + new: + send: "Изпращане" + subject: "тема" + to: "до" + show: + delete: "изтриване и блокиране" + reply: "отговор" + date: + formats: + birthday: "%B %d" + birthday_with_year: "%B %d %Y" + fullmonth_day: "%B %d" + delete: "Изтриване" + email: "Ел. поща" + error_messages: + helper: + correct_the_following_errors_and_try_again: "Поправете следните грешки и опитайте отново." + invalid_fields: "Невалидни полета" + fill_me_out: "Попълнете ме" + hide: "Скриване" + home: + show: + already_account: "вече имате акаунт?" + choice: "Choice" + choice_explanation: "Diaspora предоставя възможност за сортиране на контактите в групи наречени аспекти. Те са уникална функция, която позволява споделянето на снимки, истории и шеги само с хората, за които са предвидени." + learn_about_host: "Научете как да стартирате Diaspora на собствен сървър." + login_here: "се впишете" + ownership: "Собственост" + ownership_explanation: "Вие притежавате снимките си и не е необходимо да се отказвате от това си право само за да ги споделите. Вие запазвате собствеността си върху всичко споделено в Diaspora - това ви осигурява контрол над разпространението." + share_what_you_want: "Споделяйте каквото желаете, с когото пожелаете." + simplicity: "Леснота" + simplicity_explanation: "Споделянето чрез Diaspora е просто и лесно. Характерно за Diaspora е че запазва личния ви живот поверителен без нужда от настройване различни страници с безброй опции." + tagline_first_half: "Споделете каквото желаете," + tagline_second_half: "с когото пожелаете." + invitations: + check_token: + not_found: "Данните за поканата не са намерени" + create: + already_contacts: "Вече сте свързани с тава лице" + already_sent: "Вече сте свързани с тава лице." + no_more: "Не разполагате с повече покани." + rejected: "The following email addresses had problems: " + sent: "Покани са изпратени до: " + edit: + sign_up: "регистриране" + new: + already_invited: "Вече е поканен" + aspect: "Аспект" + comma_seperated_plz: "Можете да въведете повече от една ел. поща като ги разделяте със запетаи." + if_they_accept_info: "ако приемат ще бъдат добавени към аспекта в който сте ги поканили." + invite_someone_to_join: "Поканете някой в Diaspora!" + personal_message: "Лично съобщение" + resend: "Повторно изпращане" + send_an_invitation: "Изпращане на поканата" + send_invitation: "Send invitation" + to: "До" + layouts: + application: + have_a_problem: "Имате проблем? Открийте решението тук" + powered_by: "POWERED BY DIASPORA*" + public_feed: "Public Diaspora Feed for %{name}" + toggle: "toggle mobile site" + whats_new: "какво ново?" + your_aspects: "вашите аспекти" + header: + blog: "блог" + code: "код" + login: "Вписване" + logout: "отписване" + profile: "профил" + settings: "настройки" + likes: + likes: + people_dislike_this: + few: "не е харесана от %{count} човека" + many: "не е харесана е от %{count} човека" + one: "не е харесана от 1 човек" + other: "не е харесана от %{count} човека" + zero: "всички са я харесали" + people_like_this: + few: "харесана от %{count} човека" + many: "харесана от %{count} човека" + one: "1 person liked this" + other: "%{count} people liked this" + zero: "no people liked this" + more: "Още" + next: "next" + no_results: "Няма намерени резултати" + notifications: + also_commented: "also commented on %{post_author}'s" + also_commented_deleted: "добави коментар на вече изтрита публикация" + comment_on_post: "коментира ваша" + deleted: "deleted" + helper: + new_notifications: + few: "%{count} нови известия" + many: "%{count} нови известия" + one: "1 ново известие" + other: "%{count} нови известия" + zero: "няма нови известия" + index: + and: "и" + and_others: "и %{number} други" + mark_all_as_read: "Маркиране на всички като прочетени" + notifications: "Известия" + mentioned: "ви спомена в" + new_request: "ви предложи да споделяте." + post: "публикация" + private_message: "ви изпрати съобщение." + request_accepted: "прие поканата ви за споделяне." + notifier: + also_commented: + commented: "has also commented on %{post_author}'s post:" + sign_in: "Sign in to view it." + subject: "%{name} has also commented on %{post_author}'s post." + comment_on_post: + commented: "has commented on your post:" + sign_in: "Sign in to view it." + subject: "%{name} коментира ваша публикация." + diaspora: "the diaspora email robot" + hello: "Здравейте %{name}!" + love: "love," + manage_your_email_settings: "manage your email settings" + mentioned: + mentioned: "ви спомена в публикация:" + sign_in: "Впишете се, за да я прегледате." + subject: "%{name} ви спомена в Diaspora*" + new_request: + just_sent_you: "just sent you a contact request on Diaspora*" + sign_in: "Впишете се тук" + subject: "new Diaspora* contact request from %{from}" + try_it_out: "You should really think about checking it out." + private_message: + message_subject: "Тема: %{subject}" + private_message: "ви изпрати лично съобщение:" + sign_in: "Впишете се, за да го прегледате." + subject: "%{name} ви изпрати лично съобщени в Diaspora*" + request_accepted: + accepted: "has accepted your contact request!" + sign_in: "Впишете се тук" + subject: "%{name} has accepted your contact request on Diaspora*" + single_admin: + admin: "Вашият администратор на Diaspora" + subject: "Съобщение относно акаунта ви в Diaspora:" + thanks: "Благодаря," + ok: "Добре" + or: "или" + password: "Парола" + password_confirmation: "Потвърждаване на паролата" + people: + add_contact_small: + add_contact_from_tag: "add contact from tag" + aspect_list: + edit_membership: "принадлежност към аспекти" + few: "%{count} човека" + helper: + people_on_pod_are_aware_of: " people on pod are aware of" + results_for: " резултата за %{params}" + index: + couldnt_find_them_send_invite: "Не можете да ги намерите? Пратете им покана!" + no_one_found: "...и никой не е намерен." + no_results: "Hey! You need to search for something." + results_for: "резултат от търсенето за" + many: "%{count} човека" + one: "1 човек" + other: "%{count} човека" + person: + add_contact: "добавяне на контакт" + already_connected: "Вече сте свързани" + pending_request: "Pending request" + thats_you: "Това сте вие!" + profile_sidebar: + bio: "биографични данни" + born: "рожден ден" + cannot_remove: "Лицето %{name} не може да бъде премахнато от последния аспект. (Ако желаете да бъде прекратена връзката с лицето е необходимо да премахнете контакта.)" + edit_my_profile: "Редактирайте профилът си" + gender: "пол" + in_aspects: "in aspects" + location: "местоположние" + remove_contact: "премахване на контакт" + remove_from: "Премахване на %{name} от %{aspect}?" + show: + add_some: "add some" + does_not_exist: "Person does not exist!" + edit: "edit" + incoming_request: "%{name} желае да споделя с вас" + mention: "Mention" + message: "Съобщение" + no_posts: "няма публикации за изобразяване!" + not_connected: "Вие не споделяте с лицето" + recent_posts: "Скорошни публикации" + recent_public_posts: "Скорошни публични публикации" + return_to_aspects: "Назад към страницата с аспекти" + see_all: "Вижте всички" + start_sharing: "започнете да споделяте" + to_accept_or_ignore: "to accept or ignore it." + you_have_no_tags: "you have no tags!" + webfinger: + fail: "За съжаление %{handle} не може да бъде намерен." + zero: "няма хора" + photos: + create: + integrity_error: "Снимката не бе качена. Сигурни ли сте, че сте избрали изображение?" + runtime_error: "Снимката не бе качена. Сигурни ли сте, че сте закопчали колана си?" + type_error: "Снимката не бе качена. Сигурни ли сте, че е добавено изображение?" + destroy: + notice: "Снимката е изтрита." + edit: + editing: "Редактиране" + new: + back_to_list: "Назад към списъка" + new_photo: "Нова снимка" + post_it: "публикуване!" + new_photo: + empty: "{file} е празен. Моля, изберете наново файловете без празния." + invalid_ext: "{file} е с невалидно разширение. Позволени са само: {extensions}." + size_error: "{file} е твърде голям. Максималният разрешен размер е {sizeLimit}." + new_profile_photo: + or_select_one: "или изберете една от вашите (вече качени)" + upload: "Качете нова снимка за профила!" + photo: + view_all: "всички снимки на %{name}" + show: + collection_permalink: "collection permalink" + delete_photo: "Изтриване на изображение" + edit: "редактиране" + edit_delete_photo: "Редактиране на описанието / изтриване" + make_profile_photo: "ползване като профилна снимка" + original_post: "Оригинална публикация" + permalink: "permalink" + update_photo: "Update Photo" + view: "view" + update: + error: "Снимката не бе изтрита." + notice: "Photo successfully updated." + post_visibilites: + update: + post_hidden: "Публикацията на %{name} е скрита." + posts: + doesnt_exist: "публикацията не съществува!" + previous: "previous" + profile: "Профил" + profiles: + edit: + allow_search: "Разрешете търсенето в Diaspora за вас" + edit_profile: "Редактиране на профила" + first_name: "Собствено име" + last_name: "Фамилно име" + update_profile: "Обновяване на профила" + your_bio: "Биографични данни" + your_birthday: "Дата на раждане" + your_gender: "Пол" + your_location: "Местоположение" + your_name: "Име" + your_photo: "Снимка" + your_private_profile: "Вашият личен профил" + your_public_profile: "Вашият публичен профил" + your_tags: "Опишете се с до 5 #марки" + your_tags_placeholder: "например: #България #diaspora #фитнес #music" + update: + failed: "Failed to update profile" + updated: "Profile updated" + registrations: + closed: "Signups are closed on this Diaspora pod." + create: + success: "Вие се присъединихте към Diaspora!" + edit: + cancel_my_account: "Cancel my account" + edit: "Edit %{name}" + leave_blank: "(оставете празно ако не желаете да го променяте)" + password_to_confirm: "(за да бъдат потвърдени промените е необходима текущата ви парола)" + unhappy: "Unhappy?" + update: "Update" + new: + enter_email: "Въведете ел. поща" + enter_password: "Въведете парола" + enter_password_again: "Въведете отново същата парола" + enter_username: "Изберете си потребителско име (само букви, цифри и долна черта)" + sign_up: "Регистриране" + sign_up_for_diaspora: "Регистрирайте се в Diaspora" + requests: + create: + sending: "Изпращане" + sent: "You've asked to share with %{name}. They should see it next time they log in to Diaspora." + destroy: + error: "Моля, изберете аспект!" + ignore: "Ignored contact request." + success: "Сега споделяте." + helper: + new_requests: + few: "%{count} new requests!" + many: "%{count} new requests!" + one: "new request!" + other: "%{count} нови покани!" + zero: "няма нови покани" + manage_aspect_contacts: + existing: "Съществуващи контакти" + manage_within: "Manage contacts within" + new_request_to_person: + sent: "sent!" + search: "Търсене" + services: + create: + success: "Удостоверяването приключи успешно." + destroy: + success: "Удостоверението е изтрито успешно." + failure: + error: "възникна грешка при свързването с услугата" + finder: + friends: + few: "%{count} приятеля" + many: "%{count} приятеля" + one: "1 приятел" + other: "%{count} приятеля" + zero: "няма приятели" + invite_your_friends_from: "Поканете приятелите си от %{service}" + not_connected: "not connected" + index: + connect_to_facebook: "Свързване с facebook" + connect_to_twitter: "Свързване с twitter" + disconnect: "изключване" + edit_services: "Редактиране на услугите" + logged_in_as: "вписани сте като" + really_disconnect: "изключване на свързаността с %{service}?" + inviter: + click_link_to_accept_invitation: "Click this link to accept your invitation" + join_me_on_diaspora: "Join me on DIASPORA*" + remote_friend: + invite: "invite" + resend: "resend" + settings: "Настройки" + shared: + add_contact: + create_request: "Търси по Diaspora адрес" + diaspora_handle: "diaspora@handle.org" + enter_a_diaspora_username: "Въведете потребителско име от Diaspora:" + know_email: "Знаете адресите на ел. им поща? Трябва да ги поканите" + your_diaspora_username_is: "Вашето потребителско име в Diaspora е %{diaspora_handle}" + contact_list: + all_contacts: "Всички контакти" + cannot_remove: "Лицето не може да бъде премахнато от последния аспект. (Ако желаете да бъде прекратена връзката с лицето е необходимо да премахнете контакта.)" + footer: + logged_in_as: "вписани сте като %{name}" + your_aspects: "вашите аспекти" + invitations: + by_email: "по ел. поща" + dont_have_now: "За момента не разполагате с покани, но скоро ще имате!" + from_facebook: "От Facebook" + invitations_left: "(остават още %{count})" + invite_someone: "Поканете някого" + invite_your_friends: "Намерете приятелите си" + invites: "Покани" + invites_closed: "Invites are currently closed on this Diaspora pod" + notification: + new: "New %{type} from %{from}" + public_explain: + logged_in: "вписани сте в %{service}" + manage: "управление на свързаните услуги" + outside: "Публичните съобщения ще са видими и за хора извън Diaspora." + title: "Настройте свързване с услуга" + publisher: + add_photos: "добавете снимки" + all: "всички" + all_contacts: "всички контакти" + click_to_share_with: "Кликнете, за да споделите: " + make_public: "направете публично" + post_a_message_to: "Публикувайте публично съобяение в %{aspect}" + posting: "Публикуване..." + public: "Публично" + publishing_to: "публикуване в: " + share: "Споделете" + share_with: "споделяне с" + whats_on_your_mind: "какво мислите?" + reshare: + reshare: "споделяне с" + stream_element: + dislike: "Не ми харесва" + like: "Харесва ми" + status_messages: + create: + success: "Successfully mentioned: %{names}" + destroy: + failure: "Публикацията не бе изтрита" + helper: + no_message_to_display: "Няма съобщение за изобразяване." + new: + mentioning: "Mentioning: %{person}" + show: + destroy: "Изтриване" + not_found: "За съжаление публикацията не може да бъде намерена." + permalink: "permalink" + stream_helper: + hide_comments: "скриване на коментарите" + show_comments: "всички коментари" + tags: + show: + nobody_talking: "Никой не е говорил за %{tag}." + people_tagged_with: "Хора маркирани с %{tag}" + posts_tagged_with: "Публикации с марка #%{tag}" + the_world: "светът" + undo: "Отмяна?" + username: "Потребителско име" + users: + destroy: "Акаунтът е затворен успешно." + edit: + also_commented: "...някой коментира публикация на ваш контакт?" + change: "Промяна" + change_language: "Промяна на езика" + change_password: "Промяна на паролата" + close_account: "Затваряне на акаунта" + comment_on_post: "...някой коментира ваша публикация?" + current_password: "Текуща парола" + download_photos: "снимките ви" + download_xml: "данните ви (XML формат)" + edit_account: "Редактиране на акаунта" + export_data: "Сваляне на..." + mentioned: "...бъдете споменат в публикация?" + new_password: "Нова парола" + private_message: "...получите лично съобщение?" + receive_email_notifications: "Получаване на известие по ел. поща когато..." + request_acceptence: "...бъде приета отправена от вас покана за споделяне?" + request_received: "...получите покана за споделяне?" + your_email: "Вашата ел. поща" + your_handle: "Вашият адрес в Diaspora" + getting_started: + connect_on_diaspora: "Connect on Diaspora" + connect_services: "Свързване към други услуги" + could_not_find_anyone: "Could not find any friends on Diaspora*. Use the friend finder to invite them." + edit_profile: "Edit your profile" + finished: "Готово!" + save_and_continue: "Запиши и продължи" + signup_steps: "Finish your sign up by completing these three steps:" + skip: "прескачане на страницата" + step_2: + find_your_friends_on_diaspora: "Желаете ли да намерите приятелите си от Facebook в Diaspora?" + skip: "Skip" + step_3: + finish: "Готово" + people_already_on_diaspora: "Хора, които вече са в Diaspora" + welcome: "Добре дошли в Diaspora!" + public: + does_not_exist: "Потребителят %{username} не съществува!" + update: + email_notifications_changed: "Адресът за известяване е променен" + language_changed: "Езикът е сменен" + language_not_changed: "Езикът не бе променен" + password_changed: "Паролата е променена" + password_not_changed: "Паролата не бе променена" + webfinger: + fetch_failed: "failed to fetch webfinger profile for %{profile_url}" + hcard_fetch_failed: "there was a problem fetching the hcard for %{account}" + no_person_constructed: "No person could be constructed from this hcard." + not_enabled: "webfinger does not seem to be enabled for %{account}'s host" + xrd_fetch_failed: "there was an error getting the xrd from account %{account}" diff --git a/config/locales/diaspora/br.yml b/config/locales/diaspora/br.yml index d3034bb99..d80de325c 100644 --- a/config/locales/diaspora/br.yml +++ b/config/locales/diaspora/br.yml @@ -52,7 +52,7 @@ br: aspect_contacts: done_editing: "done editing" aspect_stream: - activity: "activity" + activity: "oberiantiz" post_time: "post time" sort_by: "diskouezh hervez:" contacts_not_visible: "Contacts in this aspect will not be able to see each other." @@ -80,7 +80,7 @@ br: aspect_not_empty: "Aspect not empty" remove: "skarzhañ" index: - handle_explanation: "This is your diaspora handle. Like an email address, you can give this to people to reach you." + handle_explanation: "Ar postel-mañ zo ho skor diaspora. E-giz ur chomlec'h-postel e c'hellit skignat anezhañ a-benn bezañ kavet gant an dud." no_contacts: "Darempred ebet" post_a_message: "post a message >>" manage: @@ -266,7 +266,7 @@ br: and_others: "ha %{number} reoù all" mark_all_as_read: "Mark All as Read" notifications: "Notifications" - mentioned: "has mentioned you in their" + mentioned: "en deus meneget ac'hanoc'h e-barzh ur skrid" new_request: "offered to share with you." post: "post" private_message: "sent you a message." @@ -354,12 +354,12 @@ br: recent_posts: "Recent Posts" recent_public_posts: "Recent Public Posts" return_to_aspects: "Return to your aspects page" - similar_contacts: "similar contacts" + see_all: "See all" start_sharing: "start sharing" to_accept_or_ignore: "to accept or ignore it." you_have_no_tags: "you have no tags!" webfinger: - fail: "Sorry, we couldn't find %{handle}." + fail: "Siwazh, n'eus ket moaien kavout %{handle}." zero: "den ebet" photos: create: @@ -494,7 +494,7 @@ br: settings: "Settings" shared: add_contact: - create_request: "Find by Diaspora handle" + create_request: "Klask diwar ar skor Diaspora" diaspora_handle: "diaspora@handle.org" enter_a_diaspora_username: "Enter a Diaspora username:" know_email: "Know their email address? You should invite them" @@ -584,7 +584,7 @@ br: request_acceptence: "...your share request is accepted?" request_received: "...you receive a new share request?" your_email: "Ho postel" - your_handle: "Your diaspora handle" + your_handle: "Ho skor diaspora" getting_started: connect_on_diaspora: "Connect on Diaspora" connect_services: "Connect your other services" @@ -596,7 +596,7 @@ br: skip: "skip getting started" step_2: find_your_friends_on_diaspora: "Would you like to find your Facebook friends on Diaspora?" - skip: "Skip" + skip: "Tremen e-biou" step_3: finish: "Echuiñ" people_already_on_diaspora: "People already on Diaspora" diff --git a/config/locales/diaspora/ca.yml b/config/locales/diaspora/ca.yml index 43aee2cf3..36e3b4080 100644 --- a/config/locales/diaspora/ca.yml +++ b/config/locales/diaspora/ca.yml @@ -301,7 +301,7 @@ ca: private_message: "us ha enviat un missatge." comment_on_post: "ha comentat la vostra" also_commented: "also commented on your contact's" - mentioned: "us ha mencionat a la seva" + mentioned: "us ha mencionat a una publicació" post: "publicació" deleted: "suprimida" also_commented_deleted: "ha comentat una publicació suprimida" @@ -386,8 +386,7 @@ ca: not_connected: "No esteu compartint amb aquesta persona" recent_posts: "Publicacions recents" recent_public_posts: "Publicacions públiques recents" - similar_contacts: "contactes similars" - start_sharing: "comença a compartir" + see_all: "Visualitza'ls tots" message: "Envia-li un missatge" mention: "Menciona'l" profile_sidebar: @@ -582,7 +581,7 @@ ca: reshare: reshare: "Torna a compartir" public_explain: - title: "Esteu a punt de publicar un missatge públic!" + title: "Configureu els serveis connectats" outside: "Els missatges públics seran visibles per qualsevol des de fora del Diàspora." logged_in: "s'ha entrat en %{service}" manage: "gestiona els serveis connectats" diff --git a/config/locales/diaspora/cs.yml b/config/locales/diaspora/cs.yml index af3d2113f..b8336a00a 100644 --- a/config/locales/diaspora/cs.yml +++ b/config/locales/diaspora/cs.yml @@ -228,7 +228,7 @@ cs: header: blog: "blog" code: "kód" - login: "přihlášení" + login: "přihlásit" logout: "odhlásit" profile: "profil" settings: "nastavení" @@ -251,7 +251,7 @@ cs: no_results: "Nebyly nalezeny žádné výsledky" notifications: also_commented: "také komentoval v %{post_author}" - also_commented_deleted: "komentován smazaný příspěvek" + also_commented_deleted: "komentoval ve smazaném příspěvku" comment_on_post: "komentoval váš" deleted: "smazáno" helper: @@ -266,7 +266,7 @@ cs: and_others: "a %{number} dalších" mark_all_as_read: "Označit vše jako přečtené" notifications: "Oznámení" - mentioned: "vás zmínil v jejich" + mentioned: "vás zmínil v příspěvku" new_request: "nabídnul vám sdílení." post: "zpráva" private_message: "vám poslal zprávu." @@ -354,7 +354,7 @@ cs: recent_posts: "Poslední příspěvky" recent_public_posts: "Poslední veřejné příspěvky" return_to_aspects: "Návrat na vaši stránku s aspekty" - similar_contacts: "podobné kontakty" + see_all: "Zobrazit všechno" start_sharing: "začít sdílet" to_accept_or_ignore: "přijmout nebo ignorovat." you_have_no_tags: "nemáte žádné značky!" @@ -520,7 +520,7 @@ cs: logged_in: "přihlášen do %{service}" manage: "upravit připojené služby" outside: "Veřejné příspěvky budou dostupné pro ostatní mimo Diasporu." - title: "Chystáte se poslat veřejnou zprávu!" + title: "Nastavit související služby" publisher: add_photos: "přidat fotky" all: "všechny" diff --git a/config/locales/diaspora/cy.yml b/config/locales/diaspora/cy.yml index 3e60d5812..074d2cc63 100644 --- a/config/locales/diaspora/cy.yml +++ b/config/locales/diaspora/cy.yml @@ -354,7 +354,7 @@ cy: recent_posts: "Recent Posts" recent_public_posts: "Recent Public Posts" return_to_aspects: "Return to your aspects page" - similar_contacts: "similar contacts" + see_all: "See all" start_sharing: "start sharing" to_accept_or_ignore: "to accept or ignore it." you_have_no_tags: "you have no tags!" diff --git a/config/locales/diaspora/da.yml b/config/locales/diaspora/da.yml index 647eb553c..869e56acb 100644 --- a/config/locales/diaspora/da.yml +++ b/config/locales/diaspora/da.yml @@ -82,7 +82,7 @@ da: index: handle_explanation: "Dette er dit diaspora handle. Som med en e-mail-adresse, kan du give denne til folk, så de kan kontakte dig." no_contacts: "Ingen kontakter" - post_a_message: "post a message >>" + post_a_message: "post en besked >>" manage: add_a_new_aspect: "Tilføj et nyt aspekt" add_a_new_contact: "Tilføj en ny kontaktperson" @@ -113,10 +113,10 @@ da: zero: "ingen aspekter" back: "Tilbage" bookmarklet: - explanation: "%{link} from anywhere by bookmarking this link." + explanation: "%{link} alle steder fra ved at bogmærke dette link." explanation_link_text: "Post på Diaspora" - post_something: "Post something to Diaspora" - post_success: "Posted! Closing!" + post_something: "Post noget til Diaspora" + post_success: "Posted! Lukker!" cancel: "Annullér" comments: few: "%{count} kommentarer" @@ -144,9 +144,9 @@ da: zero: "Ingen kontaktpersoner" conversations: create: - sent: "Message sent" + sent: "Meddelelse sendt" destroy: - success: "Conversation successfully removed" + success: "Samtale slettet med succes" helper: new_messages: few: "%{count} nye beskeder" @@ -180,7 +180,7 @@ da: correct_the_following_errors_and_try_again: "Ret følgende fejl og prøv igen." invalid_fields: "Ugyldige felter" fill_me_out: "Udfyld mig" - hide: "Hide" + hide: "Skjul" home: show: already_account: "har du allerede en konto?" @@ -222,7 +222,7 @@ da: have_a_problem: "Har du et problem? Find svaret her" powered_by: "POWERED BY DIASPORA*" public_feed: "Offentligt Diaspora nyheds feed for %{name}" - toggle: "toggle mobile site" + toggle: "skift mobil side" whats_new: "Hvad er nyt?" your_aspects: "dine aspekter" header: @@ -248,7 +248,7 @@ da: zero: "ingen personer kunne lide det" more: "Mere" next: "Næste" - no_results: "No Results Found" + no_results: "Ingen resultater fundet" notifications: also_commented: "kommenterede også på %{post_author}'s" also_commented_deleted: "kommenterede på en slettet post" @@ -354,7 +354,7 @@ da: recent_posts: "Nylige indlæg" recent_public_posts: "Seneste offentlige indlæg" return_to_aspects: "Tilbage til aspektsoversigt" - similar_contacts: "lignende kontakter" + see_all: "Se alle" start_sharing: "begynd at dele" to_accept_or_ignore: "at godkende eller ignorere det." you_have_no_tags: "du har ingen tags!" @@ -398,7 +398,7 @@ da: notice: "Billedet blev opdateret." post_visibilites: update: - post_hidden: "%{name}'s post has been hidden." + post_hidden: "%{name}'s post er blevet skjult." posts: doesnt_exist: "den post eksisterer ikke!" previous: "Forrige" @@ -503,8 +503,8 @@ da: all_contacts: "Alle kontaktpersoner" cannot_remove: "Kan ikke fjerne person fra sidste aspekt." footer: - logged_in_as: "logged in as %{name}" - your_aspects: "your aspects" + logged_in_as: "logget ind som %{name}" + your_aspects: "Dine aspekter" invitations: by_email: "vha. Email" dont_have_now: "Du har ikke nogen lige nu, men der kommer snart flere invitationer!" @@ -561,7 +561,7 @@ da: people_tagged_with: "Personer tagged med %{tag}" posts_tagged_with: "Poster tagged med #%{tag}" the_world: "Verden" - undo: "Undo?" + undo: "Fortryd?" username: "Brugernavn" users: destroy: "Kontoen er nu lukket." diff --git a/config/locales/diaspora/de.yml b/config/locales/diaspora/de.yml index e48059665..0d57f8490 100644 --- a/config/locales/diaspora/de.yml +++ b/config/locales/diaspora/de.yml @@ -266,7 +266,7 @@ de: and_others: "und %{number} andere" mark_all_as_read: "Markiere alle als gelesen" notifications: "Benachrichtigungen" - mentioned: "hat dich erwähnt in " + mentioned: "hat dich in einem Beitrag erwähnt" new_request: "hat angeboten mit dir zu teilen." post: "Beitrag" private_message: "hat dir eine Nachricht gesendet." @@ -354,7 +354,7 @@ de: recent_posts: "Neueste Beiträge" recent_public_posts: "Neueste öffentliche Beiträge" return_to_aspects: "Kehre zur Aspekt-Übersicht zurück." - similar_contacts: "ähnliche Kontakte" + see_all: "Alle zeigen" start_sharing: "Fang an zu teilen!" to_accept_or_ignore: "um zu akzeptieren oder zu ignorieren." you_have_no_tags: "Du hast keine Tags!" @@ -520,7 +520,7 @@ de: logged_in: "Eingeloggt in %{service}" manage: "verbundene Dienste verwalten" outside: "Öffentliche Nachrichten sind für andere außerhalb von Diaspora sichtbar." - title: "Du bist dabei, eine öffentliche Nachricht zu posten!" + title: "Verbundene Dienste verwalten" publisher: add_photos: "Fotos hinzufügen" all: "alle" @@ -573,8 +573,8 @@ de: close_account: "Konto schließen" comment_on_post: "… jemand deinen Beitrag kommentiert hat?" current_password: "Derzeitiges Passwort" - download_photos: "Meine Fotos herunterladen" - download_xml: "Meine Daten herunterladen (XML)" + download_photos: "Fotos herunterladen" + download_xml: "Daten herunterladen (XML)" edit_account: "Konto bearbeiten" export_data: "Daten exportieren" mentioned: "… du in einem Beitrag erwähnt wirst?" diff --git a/config/locales/diaspora/el.yml b/config/locales/diaspora/el.yml index b4225e33a..f57f9456e 100644 --- a/config/locales/diaspora/el.yml +++ b/config/locales/diaspora/el.yml @@ -343,7 +343,7 @@ el: remove_contact: "αφαίρεση επαφής" remove_from: "Αφαίρεση του χρήστη %{name} από τη πτυχή %{aspect}?" show: - add_some: "προσθέστε κάποιον" + add_some: "προσθέστε κάποιες" does_not_exist: "Ο/Η χρήστης δεν υπάρχει!" edit: "επεξεργασία" incoming_request: "Ο/Η %{name} θέλει να μοιραστεί μαζί σας" @@ -354,7 +354,7 @@ el: recent_posts: "Πρόσφατες δημοσιεύσεις" recent_public_posts: "Πρόσφατες Δημόσιες Δημοσιεύσεις" return_to_aspects: "Επιστροφή στη σελίδα με τις πτυχές σας" - similar_contacts: "παρόμοιες επαφές" + see_all: "Εμφάνιση όλων" start_sharing: "ξεκινήσετε την κοινή χρήση" to_accept_or_ignore: "να το αποδεχθεί ή να το αγνοήσει." you_have_no_tags: "δεν έχετε ετικέτες!" diff --git a/config/locales/diaspora/en.yml b/config/locales/diaspora/en.yml index fe501ff29..071125563 100644 --- a/config/locales/diaspora/en.yml +++ b/config/locales/diaspora/en.yml @@ -254,9 +254,9 @@ en: header: profile: "profile" settings: "settings" - logout: "logout" + logout: "log out" blog: "blog" - login: "login" + login: "log in" code: "code" application: powered_by: "POWERED BY DIASPORA*" @@ -287,10 +287,10 @@ en: private_message: "sent you a message." comment_on_post: "commented on your" also_commented: "also commented on %{post_author}'s" - mentioned: "has mentioned you in a post" - post: "post" + mentioned: "has mentioned you in a " + post: "post." deleted: "deleted" - also_commented_deleted: "commented on a deleted post" + also_commented_deleted: "commented on a deleted post." index: notifications: "Notifications" mark_all_as_read: "Mark All as Read" @@ -365,7 +365,7 @@ en: not_connected: "You are not sharing with this person" recent_posts: "Recent Posts" recent_public_posts: "Recent Public Posts" - similar_contacts: "similar contacts" + see_all: "See all" start_sharing: "start sharing" message: "Message" mention: "Mention" @@ -553,7 +553,7 @@ en: reshare: reshare: "Reshare" public_explain: - title: "You are about to post a public message!" + title: "Set up connected services" outside: "Public messages will be available for others outside of Diaspora to see." logged_in: "logged in to %{service}" manage: "manage connected services" diff --git a/config/locales/diaspora/en_shaw.yml b/config/locales/diaspora/en_shaw.yml index 50f8bd40f..b2a396ffe 100644 --- a/config/locales/diaspora/en_shaw.yml +++ b/config/locales/diaspora/en_shaw.yml @@ -266,7 +266,7 @@ en_shaw: and_others: "𐑯 %{number} 𐑳𐑞𐑼𐑟" mark_all_as_read: "𐑥𐑸𐑒 𐑷𐑤 𐑨𐑟 𐑮𐑧𐑛" notifications: "𐑯𐑴𐑑𐑦𐑓𐑦𐑒𐑱𐑖𐑩𐑯𐑟" - mentioned: "𐑣𐑨𐑟 𐑥𐑧𐑯𐑖𐑩𐑯𐑛 𐑿 𐑦𐑯 𐑞𐑺" + mentioned: "𐑣𐑨𐑟 𐑥𐑧𐑯𐑖𐑩𐑯𐑛 𐑿 𐑦𐑯 𐑩 𐑐𐑴𐑕𐑑" new_request: "𐑪𐑓𐑼𐑛 𐑑 𐑖𐑺 𐑢𐑦𐑞 𐑿." post: "𐑐𐑴𐑕𐑑" private_message: "𐑕𐑧𐑯𐑑 𐑿 𐑩 𐑥𐑧𐑕𐑩𐑡." @@ -354,7 +354,7 @@ en_shaw: recent_posts: "𐑮𐑰𐑕𐑩𐑯𐑑 𐑐𐑴𐑕𐑑𐑕" recent_public_posts: "𐑮𐑰𐑕𐑩𐑯𐑑 𐑐𐑳𐑚𐑤𐑦𐑒 𐑐𐑴𐑕𐑑𐑕" return_to_aspects: "𐑮𐑦𐑑𐑻𐑯 𐑑 𐑿𐑼 𐑨𐑕𐑐𐑧𐑒𐑑𐑕 𐑐𐑱𐑡" - similar_contacts: "𐑕𐑦𐑥𐑦𐑤𐑼 𐑒𐑪𐑯𐑑𐑨𐑒𐑑𐑕" + see_all: "𐑕𐑰 𐑷𐑤" start_sharing: "𐑕𐑑𐑸𐑑 𐑖𐑺𐑦𐑙" to_accept_or_ignore: "𐑑 𐑩𐑒𐑕𐑧𐑐𐑑 𐑹 𐑦𐑜𐑯𐑹 𐑦𐑑." you_have_no_tags: "𐑿 𐑣𐑨𐑝 𐑯𐑴 𐑑𐑨𐑜𐑟!" @@ -520,7 +520,7 @@ en_shaw: logged_in: "𐑤𐑪𐑜𐑛 𐑦𐑯 𐑑 %{service}" manage: "𐑥𐑨𐑯𐑩𐑡 𐑒𐑩𐑯𐑧𐑒𐑑𐑩𐑛 𐑕𐑻𐑝𐑦𐑕𐑩𐑟" outside: "𐑐𐑳𐑚𐑤𐑦𐑒 𐑥𐑧𐑕𐑩𐑡𐑩𐑟 𐑢𐑦𐑤 𐑚𐑰 𐑩𐑝𐑱𐑤𐑩𐑚𐑩𐑤 𐑓𐑹 𐑳𐑞𐑼𐑟 𐑬𐑑𐑕𐑲𐑛 𐑝 ·𐑛𐑦𐑨𐑕𐑐𐑹𐑩 𐑑 𐑕𐑰." - title: "𐑿 𐑸 𐑩𐑚𐑬𐑑 𐑑 𐑐𐑴𐑕𐑑 𐑩 𐑐𐑳𐑚𐑤𐑦𐑒 𐑥𐑧𐑕𐑩𐑡!" + title: "𐑕𐑧𐑑 𐑳𐑐 𐑒𐑩𐑯𐑧𐑒𐑑𐑩𐑛 𐑕𐑻𐑝𐑦𐑕𐑩𐑟" publisher: add_photos: "𐑨𐑛 𐑓𐑴𐑑𐑴𐑟" all: "𐑷𐑤" diff --git a/config/locales/diaspora/eo.yml b/config/locales/diaspora/eo.yml index d01b9105d..25c00ea86 100644 --- a/config/locales/diaspora/eo.yml +++ b/config/locales/diaspora/eo.yml @@ -354,7 +354,7 @@ eo: recent_posts: "Recent Posts" recent_public_posts: "Recent Public Posts" return_to_aspects: "Return to your aspects page" - similar_contacts: "similar contacts" + see_all: "See all" start_sharing: "start sharing" to_accept_or_ignore: "to accept or ignore it." you_have_no_tags: "you have no tags!" diff --git a/config/locales/diaspora/es-CL.yml b/config/locales/diaspora/es-CL.yml index 06de1f900..907d71d1e 100644 --- a/config/locales/diaspora/es-CL.yml +++ b/config/locales/diaspora/es-CL.yml @@ -266,7 +266,7 @@ es-CL: and_others: "y otros %{number}" mark_all_as_read: "Marcar todo como leido" notifications: "Notificaciones" - mentioned: "te mencionó en su" + mentioned: "te mencionó en un post" new_request: "quiere compartir contigo." post: "post" private_message: "te envió un mensaje." @@ -354,7 +354,7 @@ es-CL: recent_posts: "Posteos Recientes" recent_public_posts: "Posteos Públicos Recientes" return_to_aspects: "Volver a tu página de aspectos" - similar_contacts: "Contactos similares" + see_all: "Ver todos" start_sharing: "Empezar a compartir" to_accept_or_ignore: "aceptar o ignorar." you_have_no_tags: "No tienes ninguna etiqueta!" @@ -520,7 +520,7 @@ es-CL: logged_in: "entrar a %{service}" manage: "manejar los servicios conectados" outside: "Los mensajes públicos estarán disponibles para que otros fuera de Diaspora los puedan ver." - title: "¡Estás a punto de postear un mensaje público!" + title: "Configurar los servicios conectados" publisher: add_photos: "agregar fotos" all: "todo" diff --git a/config/locales/diaspora/es.yml b/config/locales/diaspora/es.yml index 66be51f6e..2eed19d3f 100644 --- a/config/locales/diaspora/es.yml +++ b/config/locales/diaspora/es.yml @@ -42,59 +42,59 @@ es: are_you_sure: "¿Estás seguro?" aspect_memberships: destroy: - failure: "No se pudo eliminar a la persona del Aspecto" - no_membership: "No se pudo encontrar a la persona seleccionada en ese Aspecto" - success: "Persona eliminada con éxito del Aspecto" + failure: "No se pudo eliminar a la persona del aspecto" + no_membership: "No se pudo encontrar a la persona seleccionada en ese aspecto" + success: "Persona eliminada con éxito del aspecto" aspects: add_to_aspect: - failure: "Error añadiendo el contacto al Aspecto." - success: "Contacto añadido con éxito al Aspecto." + failure: "Error añadiendo el contacto al aspecto." + success: "Contacto añadido con éxito al aspecto." aspect_contacts: done_editing: "Aceptar" aspect_stream: activity: "actividad" post_time: "fecha de publicación" sort_by: "ordenar por:" - contacts_not_visible: "Los contactos de este Aspecto no podrán verse." - contacts_visible: "Los contactos de este Aspecto podrán verse." + contacts_not_visible: "Los contactos de este aspecto no podrán verse." + contacts_visible: "Los contactos de este aspecto podrán verse." create: - failure: "Error creando el Aspecto." - success: "Tu nuevo Aspecto %{name} fue creado." + failure: "Error creando el aspecto." + success: "Tu nuevo aspecto %{name} fue creado." destroy: failure: "El aspecto %{name} no está vacío y no pudo ser borrado." success: "%{name} fue eliminado con éxito." edit: add_existing: "Añadir un contacto existente." - aspect_list_is_not_visible: "Lista de contactos oculta para los demás en el Aspecto" - aspect_list_is_visible: "Lista de contactos visible para los demás en el Aspecto" - confirm_remove_aspect: "¿Seguro que quieres eliminar este Aspecto?" + aspect_list_is_not_visible: "la lista de contactos del aspecto está ocultada" + aspect_list_is_visible: "la lista de contactos del aspecto es visible" + confirm_remove_aspect: "¿Seguro que quieres eliminar este aspecto?" done: "Listo" - make_aspect_list_visible: "Hacer visible la lista de contactos en el Aspecto." - remove_aspect: "Eliminar este Aspecto" + make_aspect_list_visible: "Lista de contactos visible." + remove_aspect: "Eliminar este aspecto" rename: "renombrar" update: "Actualizar" updating: "actualizando" few: "%{count} aspectos" helper: - are_you_sure: "¿Seguro que quieres eliminar este Aspecto?" - aspect_not_empty: "El Aspecto no está vacío" + are_you_sure: "¿Seguro que quieres eliminar este aspecto?" + aspect_not_empty: "El aspecto no está vacío" remove: "eliminar" index: handle_explanation: "Ésta es tu dirección Diaspora*. Como una dirección de correo, puedes dársela a la gente para que te encuentren." no_contacts: "No hay contactos" post_a_message: "publica un mensaje >>" manage: - add_a_new_aspect: "Añadir nuevo Aspecto" + add_a_new_aspect: "Añadir nuevo aspecto" add_a_new_contact: "Añadir nuevo contacto" drag_to_add: "Arrastrar para añadir" - manage_aspects: "Gestionar Aspectos" + manage_aspects: "Gestión de aspectos" no_requests: "No hay nuevas solicitudes" requests: "Solicitudes" many: "%{count} aspectos" move_contact: error: "Error moviendo el contacto: %{inspect}" failure: "%{inspect} no funcionó" - success: "Contacto movido al nuevo Aspecto" + success: "El contacto fue movido al nuevo aspecto" new_aspect: create: "Crear" name: "Nombre" @@ -106,10 +106,10 @@ es: family: "Familia" work: "Trabajo" show: - edit_aspect: "editar Aspecto" + edit_aspect: "editar aspecto" update: - failure: "Tu Aspecto, %{name}, tenía un nombre demasiado largo para guardarlo." - success: "Tu Aspecto, %{name}, fue editado con éxito." + failure: "Tu aspecto, %{name}, tenía un nombre muy largo para guardarlo." + success: "Tu aspecto, %{name}, fue editado con éxito." zero: "no hay aspectos" back: "Atrás" bookmarklet: @@ -139,7 +139,7 @@ es: other: "%{count} contactos" share_with_pane: accepts: "Una vez que %{name} acepte, veras sus demás publicaciones en Diaspora*" - add_new_aspect: "añadir nuevo Aspecto" + add_new_aspect: "añadir nuevo aspecto" share_with: "Empezar a compartir con %{name}" zero: "no hay contactos" conversations: @@ -185,7 +185,7 @@ es: show: already_account: "¿Todavía no tienes una cuenta?" choice: "Elección" - choice_explanation: "Diaspora* te permite organizar conexiones en grupos llamados Aspectos. En Diaspora*, los Aspectos aseguran que tus fotos, historias y bromas sean compartidas sólo con la gente que tu quieras." + choice_explanation: "Diaspora* te permite organizar conexiones en grupos llamados aspectos. En Diaspora*, los aspectos aseguran que tus fotos, historias y bromas sean compartidas sólo con la gente que tu quieras." learn_about_host: "Aprende acerca de cómo hostear tu propio servidor Diaspora*." login_here: "conectar aquí" ownership: "propiedad" @@ -210,7 +210,7 @@ es: already_invited: "Ya invitado" aspect: "Aspecto" comma_seperated_plz: "Puedes escribir múltiples direcciones de correo separadas por comas." - if_they_accept_info: "Si aceptan, serán añadidos al Aspecto que selecciones." + if_they_accept_info: "Si aceptan, serán añadidos al aspecto que selecciones." invite_someone_to_join: "¡Invita a alguien a unirse a Diaspora*!" personal_message: "Mensaje Personal" resend: "Reenviado" @@ -224,7 +224,7 @@ es: public_feed: "Canal público de %{name} " toggle: "cambiar sitio movil" whats_new: "Novedades en Diaspora*" - your_aspects: "Tus Aspectos" + your_aspects: "tus aspectos" header: blog: "Blog" code: "Código" @@ -252,7 +252,7 @@ es: notifications: also_commented: "participó en la publicación de %{post_author}" also_commented_deleted: "participó en una publicación eliminada" - comment_on_post: "comentó en tu" + comment_on_post: "comentó tu" deleted: "eliminado" helper: new_notifications: @@ -266,7 +266,7 @@ es: and_others: "y otros %{number}" mark_all_as_read: "Marcar todo como leído" notifications: "Notificaciones" - mentioned: "te nombró en su" + mentioned: "te mencionó en una" new_request: "quisiera compartir contigo." post: "publicación" private_message: "te envió un mensaje." @@ -285,9 +285,9 @@ es: love: "¡Qué pasa!" manage_your_email_settings: "configura tu correo" mentioned: - mentioned: "te nombró en una publicación:" + mentioned: "te mencionó en una publicación:" sign_in: "Conéctate para verlo." - subject: "%{name} te ha nombrado en Diaspora*" + subject: "%{name} te mencionó en Diaspora*" new_request: just_sent_you: "acaban de enviarte una solicitud de contacto Diaspora*" sign_in: "Conéctate aquí" @@ -314,7 +314,7 @@ es: add_contact_small: add_contact_from_tag: "añadir contacto desde una etiqueta" aspect_list: - edit_membership: "editar el Aspecto donde está el contacto" + edit_membership: "editar aspectos asociados" few: "%{count} personas" helper: people_on_pod_are_aware_of: "La gente que está en POD son conscientes de" @@ -335,10 +335,10 @@ es: profile_sidebar: bio: "Biografía" born: "Fecha de Nacimiento" - cannot_remove: "%{name} no puede eliminarse del último Aspecto. (Si quieres dejar de compartir con él, debes elimínarlo.)" + cannot_remove: "%{name} no puede eliminarse del último aspecto. (Si quieres dejar de compartir, deberas eliminarlo.)" edit_my_profile: "Editar mi perfil" gender: "Género / Sexo" - in_aspects: "en Aspectos" + in_aspects: "en aspectos" location: "Ubicación " remove_contact: "eliminar contacto" remove_from: "¿Eliminar a %{name} de %{aspect}?" @@ -353,8 +353,8 @@ es: not_connected: "No estás conectado con esta persona." recent_posts: "Últimas Publicaciones" recent_public_posts: "Últimas Publicaciones (El mundo)" - return_to_aspects: "Volver a tu página de Aspectos." - similar_contacts: "Contactos similares" + return_to_aspects: "Volver a tu página de aspectos" + see_all: "Ver todos" start_sharing: "Empezar a compartir" to_accept_or_ignore: "Aceptar o ignorar" you_have_no_tags: "¡No tienes etiquetas!" @@ -446,7 +446,7 @@ es: sending: "Enviando" sent: "Quisieras compartir con %{name}. Lo verá la próxima vez que entre en Diaspora*." destroy: - error: "¡Selecciona un Aspecto!" + error: "¡Selecciona un aspecto!" ignore: "Solicitud de contacto ignorada." success: "Ahora están compartiendo." helper: @@ -501,10 +501,10 @@ es: your_diaspora_username_is: "Su nombre de usuario Diaspora* es: %{diaspora_handle}" contact_list: all_contacts: "Todos los contactos" - cannot_remove: "No puede eliminarse a la persona del último Aspecto. (Si quieres desconectar de esta persona debes elminarla de tus contactos.)" + cannot_remove: "No puede eliminarse a la persona del último aspecto. (Si quieres dejar de compartir deberas elminarla.)" footer: logged_in_as: "Conectado como %{name}" - your_aspects: "Tus Aspectos" + your_aspects: "tus aspectos" invitations: by_email: "por Email" dont_have_now: "No tienes invitaciones ahora mismo pero, ¡pronto llegarán más!" @@ -520,7 +520,7 @@ es: logged_in: "Conectado a %{service}" manage: "Servicios conectados" outside: "Las publicaciones para \"el mundo\" podrán verse fuera de Diaspora*." - title: "¡Estás a punto de hacer una publicación!" + title: "Configurar los servicios conectados" publisher: add_photos: "Añadir fotos" all: "todo" @@ -533,7 +533,7 @@ es: publishing_to: "publicar en: " share: "Compartir" share_with: "compartir con" - whats_on_your_mind: "¿Qué tienes en mente?" + whats_on_your_mind: "...y qué te cuentas?" reshare: reshare: "Publicar en..." stream_element: @@ -561,7 +561,7 @@ es: people_tagged_with: "Personas etiquetadas en %{tag}" posts_tagged_with: "Publicaciones etiquetadas con #%{tag}" the_world: "el mundo" - undo: "Deshacer?" + undo: "¿Deshacer?" username: "Nombre de usuario" users: destroy: "Cuenta cerrada con éxito." diff --git a/config/locales/diaspora/eu.yml b/config/locales/diaspora/eu.yml index 0094f9515..818350088 100644 --- a/config/locales/diaspora/eu.yml +++ b/config/locales/diaspora/eu.yml @@ -266,7 +266,7 @@ eu: and_others: "eta beste %{number}(e)k" mark_all_as_read: "Guztiak irakurrita" notifications: "Jakinarazpenak" - mentioned: "aipatu zaituzte bere" + mentioned: "(e)k zu aipatu zaitu mezu batean" new_request: "(e)k zurekin partekatu nahi du." post: "mezua" private_message: "(e)k mezu bat bidali dizu." @@ -354,7 +354,7 @@ eu: recent_posts: "Mezu Berrienak" recent_public_posts: "Azken berri publikoak" return_to_aspects: "Zure alderdi orrialdera itzuli" - similar_contacts: "antzeko adiskide" + see_all: "Guztiak ikusi" start_sharing: "harremanetan hasi" to_accept_or_ignore: "onartu edo utzi." you_have_no_tags: "ez duzu etiketarik!" @@ -520,7 +520,7 @@ eu: logged_in: "%{service}(e)n sartuta" manage: "kudeatu lotutako zerbitzuak" outside: "Mezu publikoak edozeinek irakurtzeko ahalmena izango ditu, Diaspora kontua ez badu ere." - title: "Mezu publiko bat partekatzear zaude!" + title: "Zerbitzu konektatuak kudeatu" publisher: add_photos: "argazkiak gehitu" all: "guztiak" diff --git a/config/locales/diaspora/fi.yml b/config/locales/diaspora/fi.yml index 7de04f2c5..cdb50c6d9 100644 --- a/config/locales/diaspora/fi.yml +++ b/config/locales/diaspora/fi.yml @@ -354,7 +354,7 @@ fi: recent_posts: "Viimeisimmät tapahtumat" recent_public_posts: "Viimeisimmät julkiset tapahtumat" return_to_aspects: "Palaa näkymiin" - similar_contacts: "Yhteiset kontaktit" + see_all: "See all" start_sharing: "aloita jakamaan" to_accept_or_ignore: "hyväksyäksesi, tai hylätäksesi sen." you_have_no_tags: "Sinulla ei ole tageja!" diff --git a/config/locales/diaspora/fr.yml b/config/locales/diaspora/fr.yml index fc4f67c94..cdc7bb7d7 100644 --- a/config/locales/diaspora/fr.yml +++ b/config/locales/diaspora/fr.yml @@ -113,7 +113,7 @@ fr: zero: "aucun aspect" back: "Retour" bookmarklet: - explanation: "%{link} depuis n'importe où ajoutant ce bookmarklet à vos marque-pages/favoris." + explanation: "%{link} depuis n'importe où en ajoutant ce bookmarklet à vos marque-pages ou favoris." explanation_link_text: "Publier sur Diaspora" post_something: "Publier quelque chose sur Diaspora" post_success: "Publié ! Fermeture !" @@ -229,7 +229,7 @@ fr: blog: "blog" code: "code" login: "connexion" - logout: "se déconnecter" + logout: "déconnexion" profile: "profil" settings: "paramètres" likes: @@ -266,7 +266,7 @@ fr: and_others: "et %{number} autres" mark_all_as_read: "Tout marquer comme lu" notifications: "Notifications" - mentioned: "vous a mentionné(e) dans son" + mentioned: "vous a mentionné(e) dans une publication" new_request: "a proposé de partager avec vous." post: "message" private_message: "vous a envoyé un message." @@ -354,7 +354,7 @@ fr: recent_posts: "Messages récents" recent_public_posts: "Messages publics récents" return_to_aspects: "Retourner à votre page des aspects" - similar_contacts: "Contacts similaires" + see_all: "Tout afficher" start_sharing: "commencer à partager" to_accept_or_ignore: "pour l'accepter ou l'ignorer." you_have_no_tags: "vous n'avez aucun tag !" @@ -520,7 +520,7 @@ fr: logged_in: "connecté(e) à %{service}" manage: "gérer les services connectés" outside: "Les messages publics pourront être vus par d'autres en dehors de Diaspora." - title: "Vous êtes sur le point d'envoyer un message public !" + title: "Mettre en place des services connectés" publisher: add_photos: "ajouter des photos" all: "tous" diff --git a/config/locales/diaspora/ga.yml b/config/locales/diaspora/ga.yml index e2b78f78e..c1affa0ee 100644 --- a/config/locales/diaspora/ga.yml +++ b/config/locales/diaspora/ga.yml @@ -354,7 +354,7 @@ ga: recent_posts: "Póstanna Déanaí" recent_public_posts: "Póstanna Phoiblí Déanaí" return_to_aspects: "Dul siar chuig leathanach gnéithe" - similar_contacts: "teagmháillí cosúil" + see_all: "See all" start_sharing: "start sharing" to_accept_or_ignore: "chun glacadh leis nó neamhaird a dhéanamh de" you_have_no_tags: "you have no tags!" diff --git a/config/locales/diaspora/he.yml b/config/locales/diaspora/he.yml index 59dabd8bb..49351ec28 100644 --- a/config/locales/diaspora/he.yml +++ b/config/locales/diaspora/he.yml @@ -82,7 +82,7 @@ he: index: handle_explanation: "זהו שם המשתמש שלך בדיאספורה. כמו כתובת דואר אלקטרוני, ניתן לחלוק אותו עם אנשים כדי שיגיעו אליך." no_contacts: "אין אנשי קשר" - post_a_message: "post a message >>" + post_a_message: "פרסום הודעה >>" manage: add_a_new_aspect: "הוספת היבט חדש" add_a_new_contact: "הוספת איש קשר חדש" @@ -266,7 +266,7 @@ he: and_others: "ו־%{number} אחרים" mark_all_as_read: "סימון הכול כלאחר קריאה" notifications: "התרעות" - mentioned: "הזכיר/ה אותך ב־" + mentioned: "הזכיר/ה אותך ברשומה" new_request: "הציע/ה לשתף אתך." post: "רשומה" private_message: "שלח/ה לך הודעה." @@ -354,7 +354,7 @@ he: recent_posts: "רשומות אחרונות" recent_public_posts: "הרשומות הציבוריות האחרונות" return_to_aspects: "באפשרותך לחזור לעמוד ההיבטים שלך" - similar_contacts: "אנשי קשר דומים" + see_all: "צפייה בהכול" start_sharing: "התחלת השיתוף" to_accept_or_ignore: "כדי לקבל או לדחות אותה." you_have_no_tags: "אין לך תגיות!" @@ -448,7 +448,7 @@ he: destroy: error: "נא לבחור בהיבט!" ignore: "התעלמת מבקשת החברות." - success: "אתם חברים כעת." + success: "את/ה משתף/ת כעת." helper: new_requests: few: "%{count} בקשות חדשות!" @@ -511,7 +511,7 @@ he: from_facebook: "מ־Facebook" invitations_left: "(%{count} נותרו)" invite_someone: "שליחת הזמנה" - invite_your_friends: "הזמנת החברים שלך" + invite_your_friends: "חיפוש החברים שלך" invites: "הזמנות" invites_closed: "נכון לעכשיו ההזמנות לפוד זה של דיאספורה סגורות" notification: @@ -520,7 +520,7 @@ he: logged_in: "נכנסת אל %{service}" manage: "ניהול השירותים המקושרים" outside: "ההודעות הציבוריות יהיו זמינות לצפייה חיצונית גם מחוץ לרשת דיאספורה." - title: "ההודעה מיועדת לפרסום ציבורי!" + title: "הגדרת שירותים מקושרים" publisher: add_photos: "הוספת תמונות" all: "הכול" diff --git a/config/locales/diaspora/hu.yml b/config/locales/diaspora/hu.yml index 2e39a89e0..7c2c92045 100644 --- a/config/locales/diaspora/hu.yml +++ b/config/locales/diaspora/hu.yml @@ -266,7 +266,7 @@ hu: and_others: "és %{number} másik" mark_all_as_read: "Mind megjelölése olvasottként" notifications: "Értesítések" - mentioned: "megemlítettek téged a" + mentioned: "megemlített téged egy bejegyzésben" new_request: "megosztást ajánlott neked." post: "bejegyzés" private_message: "üzenetet küldött neked." @@ -354,7 +354,7 @@ hu: recent_posts: "Legutóbbi bejegyzések" recent_public_posts: "Legutóbbi nyilvános bejegyzések" return_to_aspects: "Menj vissza a csoportokhoz" - similar_contacts: "hasonló kapcsolatok" + see_all: "Összes" start_sharing: "Megosztás indítása" to_accept_or_ignore: "hogy elfogadd vagy elutasítsd." you_have_no_tags: "nincs címkéd!" @@ -520,7 +520,7 @@ hu: logged_in: "bejelentkezve ide: %{service}" manage: "kapcsolódó szolgáltatások kezelése" outside: "A publikus üzeneteket a Diaspora-n kívüli személyek is láthatják." - title: "Publikus üzenetet fogsz megjelentetni!" + title: "Kapcsolódó szolgáltatások beállítása" publisher: add_photos: "képek hozzáadása" all: "összes" diff --git a/config/locales/diaspora/id.yml b/config/locales/diaspora/id.yml index 6b76ef15e..cad531019 100644 --- a/config/locales/diaspora/id.yml +++ b/config/locales/diaspora/id.yml @@ -354,7 +354,7 @@ id: recent_posts: "Recent Posts" recent_public_posts: "Recent Public Posts" return_to_aspects: "Return to your aspects page" - similar_contacts: "similar contacts" + see_all: "See all" start_sharing: "start sharing" to_accept_or_ignore: "to accept or ignore it." you_have_no_tags: "you have no tags!" diff --git a/config/locales/diaspora/is.yml b/config/locales/diaspora/is.yml index 1ac36afc5..f28d03786 100644 --- a/config/locales/diaspora/is.yml +++ b/config/locales/diaspora/is.yml @@ -354,7 +354,7 @@ is: recent_posts: "Nýlegar færslur" recent_public_posts: "Recent Public Posts" return_to_aspects: "Return to your aspects page" - similar_contacts: "svipaðir tengiliðir" + see_all: "See all" start_sharing: "Byrja að samnýta" to_accept_or_ignore: "að samþykkja eða hunsa það." you_have_no_tags: "you have no tags!" diff --git a/config/locales/diaspora/it.yml b/config/locales/diaspora/it.yml index 53e708ad4..e861fb5f7 100644 --- a/config/locales/diaspora/it.yml +++ b/config/locales/diaspora/it.yml @@ -33,7 +33,7 @@ it: username: taken: "è già stato preso." ago: "%{time} fa" - all_aspects: "All aspects" + all_aspects: "Tutti gli aspetti" application: helper: unknown_person: "persona sconosciuta" @@ -59,22 +59,22 @@ it: contacts_visible: "I contatti in questo aspetto potranno vedersi tra loro." create: failure: "Creazione dell'aspetto fallita." - success: "Clicca sul segno più nella parte sinistra per dire a Diaspora chi può vedere il tuo nuovo aspetto." + success: "Il tuo nuovo aspetto %name è stato creato" destroy: - failure: "%{name} non è stato rimosso perchè non è vuoto." + failure: "%{name} non è stato rimosso perché non è vuoto." success: "%{name} è stato rimosso con successo." edit: add_existing: "Aggiungi un contatto esistente" - aspect_list_is_not_visible: "aspect list is hidden to others in aspect" - aspect_list_is_visible: "aspect list is visible to others in aspect" + aspect_list_is_not_visible: "l'elenco degli aspetti è nascosto agli altri nell'aspetto" + aspect_list_is_visible: "l'elenco degli aspetti è visibile agli altri nell'aspetto" confirm_remove_aspect: "Sei sicuro di voler eliminare questo aspetto?" - done: "Done" - make_aspect_list_visible: "rendi i contatti presenti in questo aspetto visibili agli altri" + done: "Completato" + make_aspect_list_visible: "rendi visibile la lista degli aspetti?" remove_aspect: "Elimina questo aspetto" rename: "rinomina" - update: "update" - updating: "updating" - few: "%{count} aspects" + update: "aggiorna" + updating: "aggiornamento in corso" + few: "%{count} aspetti" helper: are_you_sure: "Sei sicuro di voler eliminare questo aspetto?" aspect_not_empty: "Aspetto non vuoto" @@ -82,15 +82,15 @@ it: index: handle_explanation: "Questo è il tuo contatto Diaspora. Lo puoi dare alle persone per farti trovare, come un indirizzo email." no_contacts: "Nessun contatto" - post_a_message: "post a message >>" + post_a_message: "invia un messaggio >>" manage: - add_a_new_aspect: "Aggiungi un nuovo aspetto" + add_a_new_aspect: "Aggiungi aspetto della vita" add_a_new_contact: "Aggiungi un nuovo contatto" drag_to_add: "Trascina per aggiungere qualcuno" - manage_aspects: "Amministra aspetti" + manage_aspects: "Amministra gli aspetti della tua vita" no_requests: "Nessuna nuova richiesta" requests: "Richieste" - many: "%{count} aspects" + many: "%{count} aspetti" move_contact: error: "Errore nello spostare il contatto: %{inspect}" failure: "non ha funzionato %{inspect}" @@ -100,8 +100,8 @@ it: name: "Nome" no_posts_message: start_talking: "Nessuno ha ancora detto niente. Inizia la conversazione!" - one: "1 aspect" - other: "%{count} aspects" + one: "un aspetto" + other: "%{count} aspetti" seed: family: "Famiglia" work: "Lavoro" @@ -110,23 +110,23 @@ it: update: failure: "Il tuo aspetto, %{name}, ha un nome troppo lungo per poter essere salvato." success: "Il tuo aspetto, %{name}, è stato modificato con successo." - zero: "no aspects" + zero: "nessun aspetto" back: "Indietro" bookmarklet: - explanation: "%{link} from anywhere by bookmarking this link." - explanation_link_text: "Post to Diaspora" - post_something: "Post something to Diaspora" - post_success: "Posted! Closing!" + explanation: "%{link} da ovunque aggiungendo come segnalibro questo link." + explanation_link_text: "Pubblica su Diaspora" + post_something: "Pubblica qualcosa su Diaspora" + post_success: "Inviato! Sta per chiudersi!" cancel: "Annulla" comments: - few: "%{count} comments" - many: "%{count} comments" + few: "%{count} commenti" + many: "%{count} commenti" new_comment: - comment: "Commento" + comment: "commento" commenting: "Invio commento in corso..." - one: "1 comment" - other: "%{count} comments" - zero: "no comments" + one: "1 commento" + other: "%{count} commenti" + zero: "nessun commento" contacts: create: failure: "Impossibile creare il contatto" @@ -134,40 +134,40 @@ it: failure: "Impossibile disconnettersi da %{name}" success: "Disconnessione effettuata con successo da %{name}" few: "%{count} contatti" - many: "%{count} contacts" + many: "%{count} contatti" one: "1 contatto" other: "%{count} contatti" share_with_pane: - accepts: "Quando %{name} avrà accettato, inizierete a vedere reciprocamente i vostri posts su Diaspora" + accepts: "Quando %{name} avrà accettato, inizierete a vedere reciprocamente i vostri post su Diaspora" add_new_aspect: "aggiungi ad un nuovo aspetto" share_with: "Inizia a condividere con %{name}" zero: "nessun contatto" conversations: create: - sent: "Message sent" + sent: "Messaggio inviato" destroy: - success: "Conversation successfully removed" + success: "Conversazione rimossa con successo" helper: new_messages: - few: "%{count} new messages" - many: "%{count} new messages" - one: "1 new messages" - other: "%{count} new messages" - zero: "no new messages" + few: "%{count} nuovi messaggi" + many: "%{count} nuovi messaggi" + one: "un nuovo messaggio" + other: "%{count} nuovi messaggi" + zero: "nessun nuovo messaggio" index: - create_a_new_message: "create a new message" - inbox: "Inbox" - message_inbox: "Message Inbox" - new_message: "New Message" - no_conversation_selected: "no conversation selected" - no_messages: "no messages" + create_a_new_message: "scrivi un nuovo messaggio" + inbox: "In arrivo" + message_inbox: "Messaggi in arrivo" + new_message: "Nuovo Messaggio" + no_conversation_selected: "nessuna conversazione selezionata" + no_messages: "nessun messaggio" new: - send: "Send" - subject: "subject" - to: "to" + send: "Invia" + subject: "oggetto" + to: "a" show: - delete: "delete and block conversation" - reply: "reply" + delete: "cancella e blocca la conversazione" + reply: "rispondi" date: formats: birthday: "%d %B" @@ -180,10 +180,10 @@ it: correct_the_following_errors_and_try_again: "Correggi i seguenti errori e riprova." invalid_fields: "Campi non validi" fill_me_out: "Riempimi" - hide: "Hide" + hide: "Nascondi" home: show: - already_account: "hai già account?" + already_account: "hai già un account?" choice: "Scelta" choice_explanation: "Diaspora ti permette di suddividere le tue connessioni in gruppi chiamati aspetti. Solo su Diaspora, gli aspetti fanno si che le foto, i racconti e gli scherzi siano condivisi solamente con le persone che desideri." learn_about_host: "Impara come ospitare il tuo server Diaspora." @@ -213,7 +213,7 @@ it: if_they_accept_info: "se loro accettano, saranno aggiunti all'aspetto in cui li hai invitati." invite_someone_to_join: "Invita qualcuno ad unirsi a Diaspora!" personal_message: "Messaggio privato" - resend: "Inviato di nuovo" + resend: "Invia di nuovo" send_an_invitation: "Invia un invito" send_invitation: "Invito inviato" to: "A" @@ -221,34 +221,34 @@ it: application: have_a_problem: "Hai un problema? Trova qui la soluzione" powered_by: "CREATO CON DIASPORA*" - public_feed: "Public Diaspora Feed for %{name}" + public_feed: "Feed pubblici Diaspora di %{name}" toggle: "attiva/disattiva sito mobile" whats_new: "novità" - your_aspects: "I tuoi aspetti" + your_aspects: "i tuoi aspetti" header: blog: "blog" code: "codice" login: "accedi" logout: "esci" - profile: "profile" - settings: "settings" + profile: "profilo" + settings: "impostazioni" likes: likes: people_dislike_this: - few: "%{count} people disliked this" - many: "%{count} people disliked this" - one: "1 person disliked this" - other: "%{count} people disliked this" - zero: "no people disliked this" + few: "non piace a %{count} persone" + many: "non piace a %{count} persone " + one: "non piace ad una persona " + other: "non piace a %{count} persone" + zero: "non piace a zero persone" people_like_this: - few: "%{count} people liked this" - many: "%{count} people liked this" - one: "1 person liked this" - other: "%{count} people liked this" - zero: "no people liked this" + few: "piace a %{count} persone" + many: "piace a %{count} persone" + one: "piace ad una persona" + other: "piace a %{count} persone" + zero: "piace a nessuno" more: "Altro" next: "successivo" - no_results: "No Results Found" + no_results: "Nessun Risultato Trovato" notifications: also_commented: "ha anche commentato su quello di %{post_author}" also_commented_deleted: "hai commentato un post cancellato" @@ -256,47 +256,47 @@ it: deleted: "eliminato" helper: new_notifications: - few: "%{count} new notifications" - many: "%{count} new notifications" - one: "1 new notifications" - other: "%{count} new notifications" - zero: "no new notifications" + few: "%{count} nuove notifiche" + many: "%{count} nuove notifiche" + one: "una nuova notifica" + other: "%{count} nuove notifiche" + zero: "nessuna notifica" index: - and: "and" - and_others: "and %{number} others" + and: "e" + and_others: "e altri %{number}" mark_all_as_read: "Segna Tutti come Letti" notifications: "Notifiche" - mentioned: "ti ha menzionato nel suo" + mentioned: "ti ha menzionato in un post" new_request: "vuole condividere con te." post: "post" - private_message: "sent you a message." + private_message: "ti ha inviato un messaggio." request_accepted: "ha accettato la tua richiesta di condivisione." notifier: also_commented: commented: "ha anche commentato sul post di %{post_author}:" - sign_in: "Autenticati per vederlo." + sign_in: "Accedi per vederlo." subject: "%{name} ha anche commentato sul post di %{post_author}." comment_on_post: commented: "ha commentato il tuo post:" - sign_in: "Autenticati per vederlo." + sign_in: "Accedi per vederlo." subject: "%{name} ha commentato il tuo post." diaspora: "l'email robot di diaspora" hello: "Ciao %{name}!" love: "amore," - manage_your_email_settings: "manage your email settings" + manage_your_email_settings: "gestisci le tue impostazioni email" mentioned: mentioned: "ti ha menzionato in un post:" - sign_in: "Loggati per vederlo." + sign_in: "Accedi per vederlo." subject: "%{name} ti ha menzionato su Diaspora*" new_request: just_sent_you: "ti ha appena inviato una richiesta di contatto su Diaspora*" - sign_in: "accedi qui" + sign_in: "Accedi qui" subject: "nuova richiesta di contatto su Diaspora* da %{from}" try_it_out: "Dovresti veramente provarlo." private_message: - message_subject: "Subject: %{subject}" - private_message: "has sent you a private message:" - sign_in: "Sign in to view it." + message_subject: "Oggetto: %{subject}" + private_message: "ti ha inviato un messaggio privato:" + sign_in: "Accedi per vederlo." subject: "%{name} ti ha inviato un messaggio privato su Diaspora*" request_accepted: accepted: "ha accettato la tua richiesta di contatto!" @@ -312,10 +312,10 @@ it: password_confirmation: "Conferma password" people: add_contact_small: - add_contact_from_tag: "add contact from tag" + add_contact_from_tag: "aggiungi contatto da etichetta" aspect_list: edit_membership: "modifica appartenenza all'aspetto" - few: "%{count} people" + few: "%{count} persone" helper: people_on_pod_are_aware_of: " le persone sul pod sanno che" results_for: " risultati per %{params}" @@ -324,14 +324,14 @@ it: no_one_found: "...e nessuno è stato trovato." no_results: "Ehi! Devi inserire qualcosa da cercare." results_for: "risultati della ricerca per" - many: "%{count} people" - one: "1 person" - other: "%{count} people" + many: "%{count} persone" + one: "una persona" + other: "%{count} persone" person: add_contact: "aggiungi contatto" already_connected: "Già connesso" - pending_request: "richiesta in sospeso" - thats_you: "sei tu!" + pending_request: "Richiesta in sospeso" + thats_you: "Sei tu!" profile_sidebar: bio: "bio" born: "data di nascita" @@ -339,41 +339,41 @@ it: edit_my_profile: "Modifica il mio profilo" gender: "sesso" in_aspects: "negli aspetti" - location: "location" + location: "dove ti trovi" remove_contact: "rimuovi contatto" remove_from: "Rimuovere %{name} da %{aspect}?" show: - add_some: "add some" + add_some: "aggiungine alcune" does_not_exist: "La persona non esiste!" - edit: "edit" + edit: "modifica" incoming_request: "%{name} vuole condividere con te" - mention: "Mention" - message: "Message" + mention: "Menziona" + message: "Messaggio" no_posts: "nessun post da mostrare!" not_connected: "Non sei in contatto con %{name}" recent_posts: "Post Recenti" recent_public_posts: "Post pubblici recenti" return_to_aspects: "Torna alla pagina dei tuoi aspetti" - similar_contacts: "contatti simili" + see_all: "Visualizza tutti" start_sharing: "inizia a condividere" to_accept_or_ignore: "per accettarla o ignorarla." - you_have_no_tags: "you have no tags!" + you_have_no_tags: "non hai etichette!" webfinger: fail: "Spiacenti, non possiamo trovare %{handle}." - zero: "no people" + zero: "nessuna persona" photos: create: integrity_error: "Il caricamento della foto non è riuscito. Sei sicuro che fosse un'immagine?" - runtime_error: "La fotografia non si è caricata. Hai dimenticato forse la cintura?" + runtime_error: "La fotografia non si è caricata. Hai dimenticato forse di allacciare la cintura?" type_error: "La foto non si è caricata. Sei sicuro di aver aggiunto un'immagine?" destroy: notice: "Foto eliminata." edit: - editing: "Modifica" + editing: "Modifica in corso" new: back_to_list: "Torna all'elenco" new_photo: "Nuova foto" - post_it: "inseriscila!" + post_it: "condividi!" new_photo: empty: "{file} è vuoto, per favore seleziona di nuovo i file senza di esso." invalid_ext: "{file} ha un estensione non valida. Sono permesse soltanto {extensions}." @@ -388,7 +388,7 @@ it: delete_photo: "Elimina foto" edit: "modifica" edit_delete_photo: "Modifica descrizione della foto / elimina foto" - make_profile_photo: "usala come foto profilo" + make_profile_photo: "usa come immagine del profilo" original_post: "Post Originale" permalink: "permalink" update_photo: "Aggiorna Foto" @@ -398,28 +398,28 @@ it: notice: "Foto aggiornata con successo." post_visibilites: update: - post_hidden: "%{name}'s post has been hidden." + post_hidden: "Il post di %{name} è stato nascosto." posts: - doesnt_exist: "that post does not exist!" + doesnt_exist: "questo post non esiste!" previous: "precedente" profile: "Profilo" profiles: edit: allow_search: "Permetti ad altri di trovarti su Diaspora" - edit_profile: "Edita il profilo" + edit_profile: "Modifica il profilo" first_name: "Nome" last_name: "Cognome" update_profile: "Aggiorna Profilo" your_bio: "La tua biografia" your_birthday: "Il tuo compleanno" your_gender: "Sesso" - your_location: "Your location" + your_location: "Dove ti trovi" your_name: "Il tuo nome" your_photo: "La tua foto" - your_private_profile: "Your private profile" - your_public_profile: "Your public profile" - your_tags: "You: in 5 #tags" - your_tags_placeholder: "i.e. #diaspora #ironing #kittens #music" + your_private_profile: "Il tuo profilo privato" + your_public_profile: "Il tuo profilo pubblico" + your_tags: "Tu: in 5 #tags" + your_tags_placeholder: "per esempio #diaspora #stirare #gattini #musica" update: failed: "Aggiornamento del profilo non riuscito" updated: "Profilo aggiornato" @@ -428,7 +428,7 @@ it: create: success: "Ti sei unito a Diaspora!" edit: - cancel_my_account: "Cancele il mio account" + cancel_my_account: "Cancella il mio account" edit: "Modifica %{name}" leave_blank: "(lascialo bianco se non vuoi modificarlo)" password_to_confirm: "(abbiamo bisogno della tua password per confermare le tue modifiche)" @@ -444,23 +444,23 @@ it: requests: create: sending: "Invio in corso..." - sent: "Hai chiesto di condividire come %{name}. Dovrebbero vederlo nel loro prossimo accesso." + sent: "Hai chiesto di condividere come %{name}. Dovrebbero vederlo nel loro prossimo accesso su Diaspora." destroy: error: "Seleziona un aspetto!" - ignore: "Richiesta di amicizia ignorata." - success: "Adesso siete amici." + ignore: "Richiesta di entrare in contatto ignorata." + success: "Adesso potete condividere." helper: new_requests: - few: "%{count} new requests!" - many: "%{count} new requests!" - one: "new request!" - other: "%{count} new requests!" - zero: "no new requests" + few: "%{count} nuove richieste!" + many: "%{count} nuove richieste!" + one: "una nuova richiesta!" + other: "%{count} nuove richieste!" + zero: "nessuna nuova richiesta" manage_aspect_contacts: existing: "Contatti esistenti" - manage_within: "Amministra contatti tra" + manage_within: "Amministra contatti" new_request_to_person: - sent: "inviato!" + sent: "richiesta inviata!" search: "Cerca" services: create: @@ -472,7 +472,7 @@ it: finder: friends: few: "%{count} amici" - many: "%{count} friends" + many: "%{count} amici" one: "1 amico" other: "%{count} amici" zero: "nessun amico" @@ -483,7 +483,7 @@ it: connect_to_twitter: "Connettiti a twitter" disconnect: "disconnetti" edit_services: "Modifica servizi" - logged_in_as: "connesso come" + logged_in_as: "accesso effettuato come" really_disconnect: "disconnettere %{service}?" inviter: click_link_to_accept_invitation: "Fai click su questo link per accettare l'invito" @@ -494,24 +494,24 @@ it: settings: "Impostazioni" shared: add_contact: - create_request: "Cerca tramite contatto Diaspora" + create_request: "Cerca fra i nomi utente Diaspora" diaspora_handle: "Contatto Diaspora" - enter_a_diaspora_username: "Inserisci un username Diaspora" + enter_a_diaspora_username: "Inserisci un nome utente Diaspora" know_email: "Conosci i loro indirizzi email? Dovresti invitarli" - your_diaspora_username_is: "Il tuo username Diaspora è: %{diaspora_handle}" + your_diaspora_username_is: "Il tuo nome utente Diaspora è: %{diaspora_handle}" contact_list: all_contacts: "Tutti i contatti" cannot_remove: "Impossibile rimuovere la persona dall'ultimo aspetto." footer: - logged_in_as: "logged in as %{name}" - your_aspects: "your aspects" + logged_in_as: "accesso effettuato come %{name}" + your_aspects: "i tuoi aspetti" invitations: by_email: "via Email" dont_have_now: "Non ne hai alcuno per il momento, ma altri arriveranno presto!" from_facebook: "Da Facebook" invitations_left: "(%{count} rimanenti)" invite_someone: "Invita qualcuno" - invite_your_friends: "Invita i tuoi amici" + invite_your_friends: "Cerca i tuoi amici" invites: "Inviti" invites_closed: "Al momento gli inviti sono chiusi su questo pod Diaspora." notification: @@ -520,75 +520,75 @@ it: logged_in: "accesso effettuato a %{service}" manage: "gestisci i servizi collegati" outside: "I messaggi pubblici saranno visibili a persone al di fuori di Diaspora." - title: "Stai per inviare un messaggio pubblico!" + title: "Configura i servizi collegati" publisher: add_photos: "aggiungi foto" all: "tutti" all_contacts: "tutti i contatti" - click_to_share_with: "Click to share with: " - make_public: "pubblica" + click_to_share_with: "Clicca per condividere con: " + make_public: "rendi pubblico" post_a_message_to: "Invia un messaggio a %{aspect}" posting: "Invio in corso..." - public: "Public" - publishing_to: "publishing to: " + public: "Pubblico" + publishing_to: "stai condividendo con: " share: "Condividi" - share_with: "Condividi con" + share_with: "condividi con" whats_on_your_mind: "cosa stai pensando?" reshare: reshare: "Ricondividi" stream_element: - dislike: "I dislike this" - like: "I like this" + dislike: "Non mi piace" + like: "Mi piace" status_messages: create: - success: "Successfully mentioned: %{names}" + success: "Menzionati con successo: %{names}" destroy: failure: "Eliminazione post non riuscita" helper: no_message_to_display: "Nessun messaggio da visualizzare." new: - mentioning: "Mentioning: %{person}" + mentioning: "stai menzionando: %{person}" show: destroy: "Elimina" - not_found: "Sorry, we couldn't find that post." + not_found: "Ci scusiamo, non possiamo trovare il post." permalink: "permalink" stream_helper: hide_comments: "nascondi i commenti" show_comments: "mostra tutti i commenti" tags: show: - nobody_talking: "Nobody is talking about %{tag} yet." - people_tagged_with: "People tagged with %{tag}" - posts_tagged_with: "Posts tagged with #%{tag}" + nobody_talking: "Nessuno sta ancora parlando di %{tag}." + people_tagged_with: "Persone etichettate come %{tag}" + posts_tagged_with: "Post etichettati come #%{tag}" the_world: "il mondo" - undo: "Undo?" - username: "Username" + undo: "Annullare?" + username: "Nome Utente" users: destroy: "Account chiuso con successo." edit: - also_commented: "...someone also comments on your contact's post?" + also_commented: "...qualcun altro ha commentato il post del tuo contatto?" change: "Cambia" change_language: "Cambia Lingua" change_password: "Cambia Password" close_account: "Chiudi Account" - comment_on_post: "...someone comments on your post?" + comment_on_post: "...qualcuno ha commentato il tuo post?" current_password: "Password attuale" download_photos: "scarica le mie foto" download_xml: "scarica il mio xml" edit_account: "Modifica account" export_data: "Esporta Dati" - mentioned: "...you are mentioned in a post?" + mentioned: "...sei menzionato in un post?" new_password: "Nuova Password" - private_message: "...you receive a private message?" + private_message: "...hai ricevuto un messaggio privato?" receive_email_notifications: "Vuoi ricevere notifiche via email?" - request_acceptence: "...your share request is accepted?" - request_received: "...you receive a new share request?" + request_acceptence: "...la tua richiesta di condivisione è stata accettata?" + request_received: "...la tua richiesta di condivisione è stata accettata?" your_email: "La tua email" your_handle: "Il tuo contatto Diaspora" getting_started: connect_on_diaspora: "Connetti su Diaspora" connect_services: "Collega i tuoi servizi" - could_not_find_anyone: "Could not find any friends on Diaspora*. Use the friend finder to invite them." + could_not_find_anyone: "Non è possibile trovare neanche un tuo amico su Diaspora*. Usa barra di ricerca amici per trovarli." edit_profile: "Modifica il tuo profilo" finished: "Finito!" save_and_continue: "Salva e continua" @@ -612,6 +612,6 @@ it: webfinger: fetch_failed: "impossibile recuperare il profilo webfinger da %{profile_url}" hcard_fetch_failed: "impossibile recuperare l'hcard di %{account}" - no_person_constructed: "Questa hcard non contiene i dati di una persona." + no_person_constructed: "Non si può risalire a neanche una persona da questa hcard." not_enabled: "webfinger non attivo sull'host di %{account}" xrd_fetch_failed: "impossibile recuperare il xrd dall'account %{account}" diff --git a/config/locales/diaspora/ja.yml b/config/locales/diaspora/ja.yml new file mode 100644 index 000000000..af17b41ab --- /dev/null +++ b/config/locales/diaspora/ja.yml @@ -0,0 +1,617 @@ +# Copyright (c) 2010, Diaspora Inc. This file is +# licensed under the Affero General Public License version 3 or later. See +# the COPYRIGHT file. + + +ja: + _comments: "Comments" + _home: "Home" + _photos: "写真" + _services: "Services" + account: "Account" + activerecord: + errors: + models: + contact: + attributes: + person_id: + taken: "このユーザの他の連絡先と重複してはいけません。" + person: + attributes: + diaspora_handle: + taken: "既に使われています。" + request: + attributes: + from_id: + taken: "既存のリクエストと重複しています。" + user: + attributes: + email: + taken: "既に使われています。" + person: + invalid: "無効です。" + username: + taken: "既に使われています。" + ago: "%{time} ago" + all_aspects: "All Aspects" + application: + helper: + unknown_person: "unknown person" + video_title: + unknown: "Unknown Video Title" + are_you_sure: "本当にいいですか。" + aspect_memberships: + destroy: + failure: "人をアスペクトから除外するのに失敗しました" + no_membership: "選択した人はそのアスペクト内に見つかりませんでした" + success: "人をアスペクトから除外するのに成功しました" + aspects: + add_to_aspect: + failure: "Failed to add contact to aspect." + success: "Successfully added contact to aspect." + aspect_contacts: + done_editing: "done editing" + aspect_stream: + activity: "activity" + post_time: "post time" + sort_by: "sort by:" + contacts_not_visible: "Contacts in this aspect will not be able to see each other." + contacts_visible: "Contacts in this aspect will be able to see each other." + create: + failure: "Aspect creation failed." + success: "Your new aspect %{name} was created" + destroy: + failure: "%{name} is not empty and could not be removed." + success: "%{name} was successfully removed." + edit: + add_existing: "Add an existing contact" + aspect_list_is_not_visible: "aspect list is hidden to others in aspect" + aspect_list_is_visible: "aspect list is visible to others in aspect" + confirm_remove_aspect: "Are you sure you want to delete this aspect?" + done: "Done" + make_aspect_list_visible: "make aspect list visible?" + remove_aspect: "Delete this aspect" + rename: "rename" + update: "update" + updating: "updating" + few: "%{count} aspects" + helper: + are_you_sure: "Are you sure you want to delete this aspect?" + aspect_not_empty: "Aspect not empty" + remove: "remove" + index: + handle_explanation: "This is your diaspora handle. Like an email address, you can give this to people to reach you." + no_contacts: "No contacts" + post_a_message: "post a message >>" + manage: + add_a_new_aspect: "Add a new aspect" + add_a_new_contact: "Add a new contact" + drag_to_add: "Drag to add people" + manage_aspects: "Manage aspects" + no_requests: "No new requests" + requests: "Requests" + many: "%{count} aspects" + move_contact: + error: "Error moving contact: %{inspect}" + failure: "didn't work %{inspect}" + success: "Person moved to new aspect" + new_aspect: + create: "Create" + name: "Name" + no_posts_message: + start_talking: "Nobody has said anything yet. Get the conversation started!" + one: "1 aspect" + other: "%{count} aspects" + seed: + family: "Family" + work: "Work" + show: + edit_aspect: "edit aspect" + update: + failure: "Your aspect, %{name}, had too long name to be saved." + success: "Your aspect, %{name}, has been successfully edited." + zero: "no aspects" + back: "前へ" + bookmarklet: + explanation: "%{link} from anywhere by bookmarking this link." + explanation_link_text: "Post to Diaspora" + post_something: "Post something to Diaspora" + post_success: "Posted! Closing!" + cancel: "取り消す" + comments: + few: "コメント%{count}件" + many: "コメント%{count}件" + new_comment: + comment: "コメント" + commenting: "コメント投稿中…" + one: "コメント1件" + other: "コメント%{count}件" + zero: "コメントがありません" + contacts: + create: + failure: "Failed to create contact" + destroy: + failure: "Failed to disconnect from %{name}" + success: "Successfully disconnected from %{name}" + few: "%{count} contacts" + many: "%{count} contacts" + one: "1 contact" + other: "%{count} contacts" + share_with_pane: + accepts: "Once %{name} accepts, you'll start seeing each other's posts on Diaspora" + add_new_aspect: "add to new aspect" + share_with: "Start sharing with %{name}" + zero: "no contacts" + conversations: + create: + sent: "Message sent" + destroy: + success: "Conversation successfully removed" + helper: + new_messages: + few: "%{count} new messages" + many: "%{count} new messages" + one: "1 new messages" + other: "%{count} new messages" + zero: "no new messages" + index: + create_a_new_message: "create a new message" + inbox: "Inbox" + message_inbox: "Message Inbox" + new_message: "New Message" + no_conversation_selected: "no conversation selected" + no_messages: "no messages" + new: + send: "Send" + subject: "subject" + to: "to" + show: + delete: "delete and block conversation" + reply: "reply" + date: + formats: + birthday: "%B %d" + birthday_with_year: "%B %d %Y" + fullmonth_day: "%B %d" + delete: "削除" + email: "Email" + error_messages: + helper: + correct_the_following_errors_and_try_again: "Correct the following errors and try again." + invalid_fields: "Invalid Fields" + fill_me_out: "Fill me out" + hide: "隠す" + home: + show: + already_account: "already have an account?" + choice: "Choice" + choice_explanation: "Diaspora lets you sort your connections into groups called aspects. Unique to Diaspora, aspects ensure that your photos, stories and jokes are shared only with the people you intend." + learn_about_host: "Learn about how to host your own Diaspora server." + login_here: "log in here" + ownership: "Ownership" + ownership_explanation: "You own your pictures, and you shouldn’t have to give that up just to share them. You maintain ownership of everything you share on Diaspora, giving you full control over how it's distributed." + share_what_you_want: "Share what you want, with whom you want." + simplicity: "Simplicity" + simplicity_explanation: "Diaspora makes sharing clean and easy – and this goes for privacy too. Inherently private, Diaspora doesn’t make you wade through pages of settings and options just to keep your profile secure." + tagline_first_half: "Share what you want," + tagline_second_half: "with whom you want." + invitations: + check_token: + not_found: "Invitation token not found" + create: + already_contacts: "You are already connected with this person" + already_sent: "You already invited this person." + no_more: "You have no more invitations." + rejected: "The following email addresses had problems: " + sent: "Invitations have been sent to: " + edit: + sign_up: "sign_up" + new: + already_invited: "Already invited" + aspect: "Aspect" + comma_seperated_plz: "You can enter multiple email addresses separated by commas." + if_they_accept_info: "if they accept, they will be added to the aspect you invited them." + invite_someone_to_join: "Invite someone to join Diaspora!" + personal_message: "Personal message" + resend: "Resend" + send_an_invitation: "Send an invitation" + send_invitation: "Send invitation" + to: "To" + layouts: + application: + have_a_problem: "Have a problem? Find an answer here" + powered_by: "POWERED BY DIASPORA*" + public_feed: "%{name}さんの公開ダイアスポラフィード" + toggle: "携帯サイトの切替え" + whats_new: "最新情報" + your_aspects: "アスペクト" + header: + blog: "ブログ" + code: "code" + login: "ログイン" + logout: "ログアウト" + profile: "プロフィール" + settings: "設定" + likes: + likes: + people_dislike_this: + few: "%{count} people disliked this" + many: "%{count} people disliked this" + one: "1 person disliked this" + other: "%{count} people disliked this" + zero: "no people disliked this" + people_like_this: + few: "%{count} people liked this" + many: "%{count} people liked this" + one: "1 person liked this" + other: "%{count} people liked this" + zero: "no people liked this" + more: "More" + next: "next" + no_results: "No Results Found" + notifications: + also_commented: "also commented on %{post_author}'s" + also_commented_deleted: "commented on a deleted post." + comment_on_post: "commented on your" + deleted: "deleted" + helper: + new_notifications: + few: "%{count} new notifications" + many: "%{count} new notifications" + one: "1 new notifications" + other: "%{count} new notifications" + zero: "no new notifications" + index: + and: "and" + and_others: "and %{number} others" + mark_all_as_read: "Mark All as Read" + notifications: "Notifications" + mentioned: "has mentioned you in a " + new_request: "offered to share with you." + post: "post." + private_message: "sent you a message." + request_accepted: "accepted your share request." + notifier: + also_commented: + commented: "has also commented on %{post_author}'s post:" + sign_in: "Sign in to view it." + subject: "%{name} has also commented on %{post_author}'s post." + comment_on_post: + commented: "has commented on your post:" + sign_in: "Sign in to view it." + subject: "%{name} has commented on your post." + diaspora: "the diaspora email robot" + hello: "Hello %{name}!" + love: "love," + manage_your_email_settings: "manage your email settings" + mentioned: + mentioned: "mentioned you in a post:" + sign_in: "Sign in to view it." + subject: "%{name} has mentioned you on Diaspora*" + new_request: + just_sent_you: "just sent you a contact request on Diaspora*" + sign_in: "Sign in here" + subject: "new Diaspora* contact request from %{from}" + try_it_out: "You should really think about checking it out." + private_message: + message_subject: "Subject: %{subject}" + private_message: "has sent you a private message:" + sign_in: "Sign in to view it." + subject: "%{name} has sent you a private message on Diaspora*" + request_accepted: + accepted: "has accepted your contact request!" + sign_in: "Sign in here" + subject: "%{name} has accepted your contact request on Diaspora*" + single_admin: + admin: "Your Diaspora administrator" + subject: "A message about your Diaspora account:" + thanks: "Thanks," + ok: "OK" + or: "or" + password: "Password" + password_confirmation: "Password confirmation" + people: + add_contact_small: + add_contact_from_tag: "add contact from tag" + aspect_list: + edit_membership: "edit aspect membership" + few: "%{count} people" + helper: + people_on_pod_are_aware_of: " people on pod are aware of" + results_for: " results for %{params}" + index: + couldnt_find_them_send_invite: "Couldn't find them? Send an invite!" + no_one_found: "...and no one was found." + no_results: "Hey! You need to search for something." + results_for: "search results for" + many: "%{count} people" + one: "1 person" + other: "%{count} people" + person: + add_contact: "add contact" + already_connected: "Already connected" + pending_request: "Pending request" + thats_you: "That's you!" + profile_sidebar: + bio: "bio" + born: "birthday" + cannot_remove: "Cannot remove %{name} from last aspect. (If you want to disconnect from this person you must remove contact.)" + edit_my_profile: "Edit my profile" + gender: "gender" + in_aspects: "in aspects" + location: "location" + remove_contact: "remove contact" + remove_from: "Remove %{name} from %{aspect}?" + show: + add_some: "add some" + does_not_exist: "Person does not exist!" + edit: "edit" + incoming_request: "%{name} wants to share with you" + mention: "Mention" + message: "Message" + no_posts: "no posts to display!" + not_connected: "You are not sharing with this person" + recent_posts: "Recent Posts" + recent_public_posts: "Recent Public Posts" + return_to_aspects: "Return to your aspects page" + see_all: "See all" + start_sharing: "start sharing" + to_accept_or_ignore: "to accept or ignore it." + you_have_no_tags: "you have no tags!" + webfinger: + fail: "Sorry, we couldn't find %{handle}." + zero: "no people" + photos: + create: + integrity_error: "写真のアップロードに失敗しました。確かに画像ファイルだったのでしょうか。" + runtime_error: "写真のアップロードに失敗しました。シートベルトはしっかりとお締めでしょうか。" + type_error: "写真のアップロードに失敗しました。確かに画像ファイルを添付しましたか。" + destroy: + notice: "写真を削除しました。" + edit: + editing: "編集中" + new: + back_to_list: "一覧に戻る" + new_photo: "新しい写真" + post_it: "投稿する!" + new_photo: + empty: "{file} is empty, please select files again without it." + invalid_ext: "{file} has invalid extension. Only {extensions} are allowed." + size_error: "{file} is too large, maximum file size is {sizeLimit}." + new_profile_photo: + or_select_one: "or select one from your already existing" + upload: "Upload a new profile photo!" + photo: + view_all: "%{name}の写真をすべてみる" + show: + collection_permalink: "コレクションのパーマリンク" + delete_photo: "写真を削除する" + edit: "編集" + edit_delete_photo: "写真の説明を編集する/写真を削除する" + make_profile_photo: "プロフィール写真にする" + original_post: "元の投稿" + permalink: "パーマリンク" + update_photo: "写真を更新する" + view: "表示" + update: + error: "Failed to edit photo." + notice: "Photo successfully updated." + post_visibilites: + update: + post_hidden: "%{name}'s post has been hidden." + posts: + doesnt_exist: "that post does not exist!" + previous: "前へ" + profile: "プロフィール" + profiles: + edit: + allow_search: "ダイアスポラ内の検索を許可します" + edit_profile: "プロフィールの編集" + first_name: "名" + last_name: "姓" + update_profile: "プロフィール更新" + your_bio: "略歴" + your_birthday: "誕生日" + your_gender: "性別" + your_location: "所在地" + your_name: "姓名" + your_photo: "写真" + your_private_profile: "非公開プロフィール" + your_public_profile: "公開プロフィール" + your_tags: "自分を表す5つの#タグ" + your_tags_placeholder: "例:#ダイアスポラ #家事 #子猫 #音楽" + update: + failed: "プロフィール更新に失敗しました" + updated: "プロフィールを更新しました" + registrations: + closed: "Signups are closed on this Diaspora pod." + create: + success: "You've joined Diaspora!" + edit: + cancel_my_account: "Cancel my account" + edit: "Edit %{name}" + leave_blank: "(leave blank if you don't want to change it)" + password_to_confirm: "(we need your current password to confirm your changes)" + unhappy: "Unhappy?" + update: "Update" + new: + enter_email: "Enter an e-mail" + enter_password: "Enter a password" + enter_password_again: "Enter the same password as before" + enter_username: "Pick a username (only letters, numbers, and underscores)" + sign_up: "Sign up" + sign_up_for_diaspora: "Sign up for Diaspora" + requests: + create: + sending: "Sending" + sent: "You've asked to share with %{name}. They should see it next time they log in to Diaspora." + destroy: + error: "Please select an aspect!" + ignore: "Ignored contact request." + success: "You are now sharing." + helper: + new_requests: + few: "%{count} new requests!" + many: "%{count} new requests!" + one: "new request!" + other: "%{count} new requests!" + zero: "no new requests" + manage_aspect_contacts: + existing: "Existing contacts" + manage_within: "Manage contacts within" + new_request_to_person: + sent: "sent!" + search: "Search" + services: + create: + success: "Authentication successful." + destroy: + success: "Successfully deleted authentication." + failure: + error: "there was an error connecting that service" + finder: + friends: + few: "%{count} friends" + many: "%{count} friends" + one: "1 friend" + other: "%{count} friends" + zero: "no friends" + invite_your_friends_from: "Invite your friends from %{service}" + not_connected: "not connected" + index: + connect_to_facebook: "Connect to facebook" + connect_to_twitter: "Connect to twitter" + disconnect: "disconnect" + edit_services: "Edit services" + logged_in_as: "logged in as" + really_disconnect: "disconnect %{service}?" + inviter: + click_link_to_accept_invitation: "Click this link to accept your invitation" + join_me_on_diaspora: "Join me on DIASPORA*" + remote_friend: + invite: "invite" + resend: "resend" + settings: "Settings" + shared: + add_contact: + create_request: "Find by Diaspora handle" + diaspora_handle: "diaspora@handle.org" + enter_a_diaspora_username: "Enter a Diaspora username:" + know_email: "Know their email address? You should invite them" + your_diaspora_username_is: "Your Diaspora username is: %{diaspora_handle}" + contact_list: + all_contacts: "All contacts" + cannot_remove: "Cannot remove person from last aspect. (If you want to disconnect from this person you must remove contact.)" + footer: + logged_in_as: "logged in as %{name}" + your_aspects: "your aspects" + invitations: + by_email: "by Email" + dont_have_now: "You don't have any right now, but more invites are coming soon!" + from_facebook: "From Facebook" + invitations_left: "(%{count} left)" + invite_someone: "Invite someone" + invite_your_friends: "Find your friends" + invites: "Invites" + invites_closed: "Invites are currently closed on this Diaspora pod" + notification: + new: "New %{type} from %{from}" + public_explain: + logged_in: "logged in to %{service}" + manage: "manage connected services" + outside: "Public messages will be available for others outside of Diaspora to see." + title: "Set up connected services" + publisher: + add_photos: "add photos" + all: "all" + all_contacts: "all contacts" + click_to_share_with: "Click to share with: " + make_public: "make public" + post_a_message_to: "Post a message to %{aspect}" + posting: "Posting..." + public: "Public" + publishing_to: "publishing to: " + share: "Share" + share_with: "share with" + whats_on_your_mind: "what's on your mind?" + reshare: + reshare: "Reshare" + stream_element: + dislike: "I dislike this" + like: "I like this" + status_messages: + create: + success: "Successfully mentioned: %{names}" + destroy: + failure: "Failed to delete post" + helper: + no_message_to_display: "No message to display." + new: + mentioning: "Mentioning: %{person}" + show: + destroy: "Delete" + not_found: "Sorry, we couldn't find that post." + permalink: "permalink" + stream_helper: + hide_comments: "コメント非表示" + show_comments: "すべてのコメント表示" + tags: + show: + nobody_talking: "Nobody is talking about %{tag} yet." + people_tagged_with: "People tagged with %{tag}" + posts_tagged_with: "Posts tagged with #%{tag}" + the_world: "the world" + undo: "Undo?" + username: "Username" + users: + destroy: "Account successfully closed." + edit: + also_commented: "...someone also comments on your contact's post?" + change: "Change" + change_language: "Change Language" + change_password: "Change Password" + close_account: "Close Account" + comment_on_post: "...someone comments on your post?" + current_password: "Current password" + download_photos: "download my photos" + download_xml: "download my xml" + edit_account: "Edit account" + export_data: "Export Data" + mentioned: "...you are mentioned in a post?" + new_password: "New Password" + private_message: "...you receive a private message?" + receive_email_notifications: "Receive email notifications when..." + request_acceptence: "...your share request is accepted?" + request_received: "...you receive a new share request?" + your_email: "Your email" + your_handle: "Your diaspora handle" + getting_started: + connect_on_diaspora: "Connect on Diaspora" + connect_services: "Connect your other services" + could_not_find_anyone: "Could not find any friends on Diaspora*. Use the friend finder to invite them." + edit_profile: "Edit your profile" + finished: "Finished!" + save_and_continue: "Save and continue" + signup_steps: "Finish your sign up by completing these three steps:" + skip: "skip getting started" + step_2: + find_your_friends_on_diaspora: "Would you like to find your Facebook friends on Diaspora?" + skip: "Skip" + step_3: + finish: "Finish" + people_already_on_diaspora: "People already on Diaspora" + welcome: "Welcome to Diaspora!" + public: + does_not_exist: "User %{username} does not exist!" + update: + email_notifications_changed: "Email notifications changed" + language_changed: "Language Changed" + language_not_changed: "Language Change Failed" + password_changed: "Password Changed" + password_not_changed: "Password Change Failed" + webfinger: + fetch_failed: "failed to fetch webfinger profile for %{profile_url}" + hcard_fetch_failed: "there was a problem fetching the hcard for %{account}" + no_person_constructed: "No person could be constructed from this hcard." + not_enabled: "webfinger does not seem to be enabled for %{account}'s host" + xrd_fetch_failed: "there was an error getting the xrd from account %{account}" diff --git a/config/locales/diaspora/ko.yml b/config/locales/diaspora/ko.yml new file mode 100644 index 000000000..cabd0d784 --- /dev/null +++ b/config/locales/diaspora/ko.yml @@ -0,0 +1,617 @@ +# Copyright (c) 2010, Diaspora Inc. This file is +# licensed under the Affero General Public License version 3 or later. See +# the COPYRIGHT file. + + +ko: + _comments: "댓글" + _home: "처음" + _photos: "사진" + _services: "서비스" + account: "계정" + activerecord: + errors: + models: + contact: + attributes: + person_id: + taken: "이미 쓰이고 있습니다." + person: + attributes: + diaspora_handle: + taken: "이미 쓰이고 있습니다." + request: + attributes: + from_id: + taken: "이미 요청하였습니다." + user: + attributes: + email: + taken: "이미 쓰이고 있습니다." + person: + invalid: "유효하지 않습니다." + username: + taken: "이미 쓰이고 있습니다." + ago: "%{time} 전" + all_aspects: "모든 애스펙" + application: + helper: + unknown_person: "알 수 없는 사람" + video_title: + unknown: "알 수 없는 비디오 제목" + are_you_sure: "확실합니까?" + aspect_memberships: + destroy: + failure: "애스펙에서 지우지 못했습니다" + no_membership: "애스펙에서 찾을 수 없는 사람입니다" + success: "애스펙에서 성공적으로 지웠습니다" + aspects: + add_to_aspect: + failure: "컨택을 애스펙에 넣을 수 없습니다." + success: "컨택을 애스펙에 성공적으로 넣었습니다." + aspect_contacts: + done_editing: "고치기 완료" + aspect_stream: + activity: "활동순" + post_time: "올린순" + sort_by: "순서:" + contacts_not_visible: "이 애스펙에 있는 사람들이 서로를 볼 수 없습니다." + contacts_visible: "이 애스펙에 있는 사람들이 서로를 볼 수 있습니다." + create: + failure: "새 애스펙을 만들 수 없습니다." + success: "%{name} 애스펙을 만들었습니다." + destroy: + failure: "%{name} 애스펙을 지우려면 먼저 비워야합니다." + success: "%{name} 애스펙을 성공적으로 지웠습니다." + edit: + add_existing: "있는 컨택 추가" + aspect_list_is_not_visible: "애스펙의 다른 이들에게 애스펙 모록을 감춥니다." + aspect_list_is_visible: "애스펙의 다른 이들에게 애스펙 목록을 보입니다." + confirm_remove_aspect: "이 애스펙을 지우려는게 확실합니까?" + done: "완료" + make_aspect_list_visible: "애스펙 목록을 볼 수 있게 합니까?" + remove_aspect: "이 애스펙 지우기" + rename: "이름 바꾸기" + update: "갱신" + updating: "갱신중" + few: "애스펙 %{count}개" + helper: + are_you_sure: "이 애스펙을 지우려는게 확실합니까?" + aspect_not_empty: "애스펙이 비어있지 않습니다" + remove: "지우기" + index: + handle_explanation: "이 디아스포라 핸들은 이메일 주소처럼 남에게 건넬 수 있습니다." + no_contacts: "컨택 없음" + post_a_message: "새 메시지 올리기 >>" + manage: + add_a_new_aspect: "애스펙 추가" + add_a_new_contact: "컨택 추가" + drag_to_add: "추가할 사람을 끌어놓으세요" + manage_aspects: "애스펙 관리" + no_requests: "새 요청 없음" + requests: "요청" + many: "애스펙 %{count}개" + move_contact: + error: "%{inspect} 컨택을 옮기는데 에러가 발생하였습니다" + failure: "%{inspect} 님을 옮길 수 없습니다" + success: "새 애스펙으로 옮겼습니다" + new_aspect: + create: "만들기" + name: "이름" + no_posts_message: + start_talking: "아직 아무 이야기도 없습니다. 대화를 시작하세요!" + one: "애스펙 한 개" + other: "애스펙 %{count}개" + seed: + family: "가족" + work: "직장" + show: + edit_aspect: "애스펙 고치기" + update: + failure: "%{name} 애스펙은 이름이 너무 길어 저장할 수 없습니다." + success: "%{name} 애스펙을 성공적으로 고쳤습니다." + zero: "애스펙 없음" + back: "돌아가기" + bookmarklet: + explanation: "%{link} 링크를 북마크로 추가하세요." + explanation_link_text: "디아스포라에 올리기" + post_something: "디아스포라에 올리기" + post_success: "올렸습니다! 닫힙니다!" + cancel: "취소" + comments: + few: "댓글 %{count}개" + many: "댓글 %{count}개" + new_comment: + comment: "댓글 달기" + commenting: "댓글 다는 중···" + one: "댓글 한 개" + other: "댓글 %{count}개" + zero: "댓글 없음" + contacts: + create: + failure: "컨택을 만들 수 없습니다" + destroy: + failure: "%{name} 컨택을 끊을 수 없습니다" + success: "%{name} 컨택을 성공적으로 끊었습니다" + few: "컨택 %{count}명" + many: "컨택 %{count}명" + one: "컨택 한 명" + other: "컨택 %{count}명" + share_with_pane: + accepts: "%{name} 님이 수락하면 디아스포라에서 서로를 볼 수 있습니다." + add_new_aspect: "새 애스펙에 넣기" + share_with: "%{name} 님에게 공유 요청" + zero: "컨택 없음" + conversations: + create: + sent: "쪽지를 보냈습니다" + destroy: + success: "대화를 성공적으로 지웠습니다" + helper: + new_messages: + few: "새 쪽지 %{count}개" + many: "새 쪽지 %{count}개" + one: "새 쪽지 한 개" + other: "새 쪽지 %{count}개" + zero: "새 쪽지 없음" + index: + create_a_new_message: "쪽지 보내기" + inbox: "쪽지함" + message_inbox: "쪽지함" + new_message: "새 쪽지" + no_conversation_selected: "대화를 고르지 않았습니다" + no_messages: "쪽지 없음" + new: + send: "보내기" + subject: "제목" + to: "받는이" + show: + delete: "지운 뒤 대화를 차단합니다" + reply: "답장" + date: + formats: + birthday: "%B %d일" + birthday_with_year: "%Y년 %B %d일" + fullmonth_day: "%B %d일" + delete: "지우기" + email: "이메일" + error_messages: + helper: + correct_the_following_errors_and_try_again: "아래의 에러를 정정한 뒤 다시 시도하십시오." + invalid_fields: "유효하지 않은 항목" + fill_me_out: "채워주세요" + hide: "숨기기" + home: + show: + already_account: "이미 계정을 가지고 있습니까?" + choice: "선택" + choice_explanation: "디아스포라에서는 애스펙이라는 모둠으로 관계를 관리합니다. 디아스포라만의 독특함인 애스펙은 나의 사진, 이야기, 농담이 내가 의도한 사람들과만 공유되도록 보장합니다." + learn_about_host: "디아스포라 서버를 직접 운영하는 방법" + login_here: "로그인" + ownership: "소유권" + ownership_explanation: "내 사진을 내가 소유합니다. 공유하기 위해 소유권을 포기하지 않아도 됩니다. 어떻게 배포될지를 온전히 제어함으로서 디아스포라에서 공유한 모든 것들의 소유권을 유지합니다." + share_what_you_want: "원하는 사람들과 원하는 걸 공유하자" + simplicity: "간편함" + simplicity_explanation: "디아스포라에서는 깨끗하고 쉽게 공유합니다. 개인정보도 마친가지입니다. 본래 개인적인 디아스포라에서는 프로필 보안을 유지하기 위해 여러 페이지에 걸친 설정과 옵션을 힘겹게 거치지 않아도 됩니다." + tagline_first_half: "Share what you want," + tagline_second_half: "with whom you want." + invitations: + check_token: + not_found: "초대장 토큰을 찾을 수 없습니다" + create: + already_contacts: "이미 컨택인 사람입니다." + already_sent: "이미 초대한 사람입니다." + no_more: "가진 초대장 이 없습니다." + rejected: "아래의 이메일 주소는 문제가 있습니다: " + sent: "초대장이 보내진 이메일 주소: " + edit: + sign_up: "로그인" + new: + already_invited: "초대한 친구들" + aspect: "애스펙" + comma_seperated_plz: "쉼표로 구분하여 여러 이메일 주소를 넣을 수 있습니다." + if_they_accept_info: "수락한 친구는 초대했던 애스펙에 추가됩니다." + invite_someone_to_join: "친구를 디아스포라로 초대하세요!" + personal_message: "쪽지" + resend: "다시 보내기" + send_an_invitation: "초대장 보내기" + send_invitation: "초대장 보내기" + to: "받는이" + layouts: + application: + have_a_problem: "문제가 있습니까? 여기서 해결하세요" + powered_by: "POWERED BY DIASPORA*" + public_feed: "%{name} 님의 공개 디아스포라 피드" + toggle: "모바일 사이트 전환" + whats_new: "새로운 점" + your_aspects: "애스펙" + header: + blog: "블로그" + code: "코드" + login: "로그인" + logout: "로그아웃" + profile: "프로필" + settings: "설정" + likes: + likes: + people_dislike_this: + few: "%{count}명이 싫어합니다" + many: "%{count}명이 싫어합니다" + one: "한 명이 싫어합니다" + other: "%{count}명이 싫어합니다" + zero: "아무도 싫어하지 않습니다" + people_like_this: + few: "%{count}명이 좋아합니다" + many: "%{count}명이 좋아합니다" + one: "한 명이 좋아합니다" + other: "%{count}명이 좋아합니다" + zero: "아무도 좋아하지 않습니다" + more: "더" + next: "다음" + no_results: "결과 없음" + notifications: + also_commented: " 님도 댓글을 달았습니다: %{post_author} 님의" + also_commented_deleted: "지워진 공유물에 댓글을 달았습니다:" + comment_on_post: " 님이 댓글을 달았습니다:" + deleted: "지워졌습니다." + helper: + new_notifications: + few: "새 알림 %{count}개" + many: "새 알림 %{count}개" + one: "새 알림 한 개" + other: "새 알림 %{count}개" + zero: "새 알림 없음" + index: + and: "그리고" + and_others: "나머지 %{number}개" + mark_all_as_read: "모두 읽음으로 표시" + notifications: "알림" + mentioned: " 님이 귀하를 멘션하였습니다." + new_request: " 님이 공유를 요청하였습니다." + post: "공유물" + private_message: " 님이 쪽지를 보냈습니다." + request_accepted: " 님이 공유 요청을 수락하였습니다." + notifier: + also_commented: + commented: "님도 %{post_author} 님의 공유물에 댓글을 달았습니다:" + sign_in: "로그인하기" + subject: "%{name} 님도 %{post_author} 님의 공유물에 댓글을 달았습니다." + comment_on_post: + commented: "님이 귀하의 공유물에 댓글을 달았습니다:" + sign_in: "로그인하기" + subject: "%{name} 님이 귀하의 공유물에 댓글을 달았습니다." + diaspora: "디아스포라 자동 이메일" + hello: "%{name} 님!" + love: "" + manage_your_email_settings: "이메일 설정 관리" + mentioned: + mentioned: "님이 디아스포라*의 글에서 귀하를 멘션했습니다:" + sign_in: "로그인하기" + subject: "%{name} 님이 디아스포라*에서 귀하를 멘션했습니다" + new_request: + just_sent_you: "님이 방금 디아스포라*에서 새 요청을 보냈습니다" + sign_in: "로그인하기" + subject: "%{from} 님이 새 디아스포라* 컨택 요청" + try_it_out: "꼭 확인해보세요!" + private_message: + message_subject: "제목: %{subject}" + private_message: "님이 디아스포라*에서 쪽지를 보냈습니다:" + sign_in: "로그인하기" + subject: "%{name} 님이 디아스포라*에서 쪽지를 보냈습니다" + request_accepted: + accepted: "님이 공유 요청을 수락했습니다!" + sign_in: "로그인하기" + subject: "%{name} 님이 디아스포라*에서 공유 요청을 수락했습니다" + single_admin: + admin: "디아스포라 관리자" + subject: "귀하의 디아스포라 계정에 대한 메시지:" + thanks: "고맙습니다." + ok: "확인" + or: "또는" + password: "암호" + password_confirmation: "암호 확인" + people: + add_contact_small: + add_contact_from_tag: "태그에서 컨택 추가" + aspect_list: + edit_membership: "속한 애스펙 고치기" + few: "%{count}명" + helper: + people_on_pod_are_aware_of: " people on pod are aware of" + results_for: "%{params} 결과" + index: + couldnt_find_them_send_invite: "찾을 수 없는 사람들을 초대하세요!" + no_one_found: "검색 결과가 없습니다" + no_results: "검색 결과가 없습니다" + results_for: "검색 결과:" + many: "%{count}명" + one: "한 명" + other: "%{count}명" + person: + add_contact: "컨택 추가" + already_connected: "이미 연결되었습니다" + pending_request: "이미 요청하였습니다" + thats_you: "바로 나!" + profile_sidebar: + bio: "자기소개" + born: "생년월일" + cannot_remove: "모든 컨택은 적어도 한 애스펙에 속해야 합니다. 공유를 끊고 싶다면 컨택을 지워야 합니다." + edit_my_profile: "프로필 고치기" + gender: "성별" + in_aspects: "속한 애스펙:" + location: "위치" + remove_contact: "컨택 지우기" + remove_from: "%{aspect}에서 %{name} 님을 지울까요?" + show: + add_some: "태그 달기" + does_not_exist: "없는 사람입니다!" + edit: "고치기" + incoming_request: "%{name} 님이 공유를 요청했습니다" + mention: "멘션" + message: "쪽지" + no_posts: "보여줄 공유물이 없습니다!" + not_connected: "열결되지 않은 사람입니다" + recent_posts: "최근 공유물" + recent_public_posts: "최근 공개 공유물" + return_to_aspects: "애스펙 페이지로 돌아가" + see_all: "모두 보기" + start_sharing: "공유 요청" + to_accept_or_ignore: "수락 또는 거절하기" + you_have_no_tags: "달아둔 태그가 없습니다!" + webfinger: + fail: "%{handle} 핸들을 찾을 수 없습니다." + zero: "없음" + photos: + create: + integrity_error: "사진 업로드할 수 없습니다. 이미지가 맞습니까?" + runtime_error: "사진을 업로드할 수 없습니다. 안전벨트를 확인하셨습니까?" + type_error: "사진 업로드 실패. 이미지를 추가하지 않았습니다." + destroy: + notice: "사진을 지웠습니다" + edit: + editing: "고치는 중" + new: + back_to_list: "목록으로 돌아가기" + new_photo: "새 사진" + post_it: "올리기!" + new_photo: + empty: "{file} 파일은 빈 파일입니다. 이 파일만 빼고 다시 시도하세요." + invalid_ext: "{file} 파일은 유효하지 않은 형식입니다. {extensions} 형식의 파일을 올려주세요." + size_error: "{file} 파일이 {sizeLimit} 보다 큽니다" + new_profile_photo: + or_select_one: "올려둔 사진 가운데 고르기" + upload: "새 프로필 사진 업로드하기!" + photo: + view_all: "%{name} 님의 모든 사진 보기" + show: + collection_permalink: "사진집 영구주소" + delete_photo: "사진 지우기" + edit: "고치기" + edit_delete_photo: "사진 설명 고치기 / 사진 지우기" + make_profile_photo: "프로필 사진 만들기" + original_post: "원래 공유물" + permalink: "영구주소" + update_photo: "사진 갱신" + view: "보기" + update: + error: "사진 고치기 실패." + notice: "사진을 성공적으로 갱신했습니다." + post_visibilites: + update: + post_hidden: "%{name} 님의 공유물을 감췄습니다." + posts: + doesnt_exist: "없는 공유물입니다!" + previous: "이전" + profile: "프로필" + profiles: + edit: + allow_search: "디아스포라에서 검색됩니다" + edit_profile: "프로필 고치기" + first_name: "이름" + last_name: "성씨" + update_profile: "프로필 갱신" + your_bio: "자기소개" + your_birthday: "생년월일" + your_gender: "성별" + your_location: "위치" + your_name: "이름" + your_photo: "사진" + your_private_profile: "개인 프로필" + your_public_profile: "공개 프로필" + your_tags: "태그 #tag" + your_tags_placeholder: "예) #diaspora #ironing #kittens #music" + update: + failed: "프로필 갱신 실패" + updated: "프로필을 갱신하였습니다" + registrations: + closed: "우리 디아스포라 팓은 가입이 닫혀있습니다." + create: + success: "디아스포라에 가입되었습니다!" + edit: + cancel_my_account: "취소" + edit: "%{name} 고치기" + leave_blank: "(바꾸지 않으려면 비워두세요)" + password_to_confirm: "(암호를 바꾸려면 원래 암호가 필요합니다)" + unhappy: "무슨 문제라도?" + update: "갱신하기" + new: + enter_email: "이메일 주소를 입력하세요" + enter_password: "암호를 입력하세요" + enter_password_again: "암호를 다시 입력하세요" + enter_username: "사용자명을 선택하세요 (로마자, 아라비아 숫자, 언더스코어만)" + sign_up: "가입하기" + sign_up_for_diaspora: "디아스포라에 가입하기" + requests: + create: + sending: "공유를 요청하고 있습니다." + sent: "%{name} 님에게 공유를 요청하였습니다." + destroy: + error: "애스펙을 골라주세요!" + ignore: "공유 요청을 거절하였습니다." + success: "공유하고 있습니다." + helper: + new_requests: + few: "요청이 %{count}개 들어왔습니다!" + many: "요청이 %{count}개 들어왔습니다!" + one: "요청이 한 개 들어왔습니다!" + other: "요청이 %{count}개 들어왔습니다!" + zero: "요청 없음" + manage_aspect_contacts: + existing: "Existing contacts" + manage_within: "컨택 관리하기:" + new_request_to_person: + sent: "요청하였습니다!" + search: "검색" + services: + create: + success: "성공적으로 인증되었습니다." + destroy: + success: "인증을 성공적으로 지웠습니다." + failure: + error: "서비스 연결중 에러가 발생하였습니다" + finder: + friends: + few: "친구 %{count}명" + many: "친구 %{count}명" + one: "친구 한 명" + other: "친구 %{count}명" + zero: "친구 없음" + invite_your_friends_from: "%{service} 서비스에서 친구 초대하기" + not_connected: "연결 없음" + index: + connect_to_facebook: "페이스북에 연결" + connect_to_twitter: "트위터에 연결" + disconnect: "끊기" + edit_services: "서비스 설정" + logged_in_as: "로그인 중: " + really_disconnect: "%{service} 서비스를 끊으시겠습니까?" + inviter: + click_link_to_accept_invitation: "초대를 수락려면 클릭하세요!" + join_me_on_diaspora: "디아스포라*에서 만나요!" + remote_friend: + invite: "초대하기" + resend: "다시 보내기" + settings: "설정" + shared: + add_contact: + create_request: "디아스포라 핸들로 찾기" + diaspora_handle: "diaspora@handle.org" + enter_a_diaspora_username: "디아스포라 사용자명을 입력하세요:" + know_email: "이메일 주소를 알면 초대할 수 있습니다!" + your_diaspora_username_is: "내 디아스포라 핸들: %{diaspora_handle}" + contact_list: + all_contacts: "모든 컨택" + cannot_remove: "모든 컨택은 적어도 하나의 애스펙에 속해야 합니다. 연결을 끊으려면 컨택을 지우세요." + footer: + logged_in_as: "%{name}로 로그인중" + your_aspects: "내 애스펙" + invitations: + by_email: "이메일 초대" + dont_have_now: "지금은 초대할 수 없습니다." + from_facebook: "페이스북에서 찾기" + invitations_left: "(%{count}통 남음)" + invite_someone: "초대하기" + invite_your_friends: "친구 초대하기" + invites: "초대" + invites_closed: "이 디아스포라는 초대가 닫혀있습니다." + notification: + new: "%{from} 님의 새 %{type}" + public_explain: + logged_in: "%{service}에 로그인 되었습니다" + manage: "연결된 서비스 관리" + outside: "공개 공유물은 디아스포라 밖의 사람들도 볼 수 있습니다." + title: "서비스 설정" + publisher: + add_photos: "사진 추가" + all: "모두" + all_contacts: "모든 컨택" + click_to_share_with: "공유할 대상을 클릭:" + make_public: "공개하기" + post_a_message_to: "%{aspect}에 공유물 올리기" + posting: "올리는 중···" + public: "공개" + publishing_to: "올릴 곳: " + share: "공유" + share_with: "공유하기: " + whats_on_your_mind: "무슨 생각해요?" + reshare: + reshare: "재공유" + stream_element: + dislike: "싪어요" + like: "좋아요" + status_messages: + create: + success: "%{names} 님을 성공적으로 멘션했습니다." + destroy: + failure: "공유물을 지울 수 없습니다." + helper: + no_message_to_display: "보여줄 공유물이 없습니다." + new: + mentioning: "%{person} 님을 멘션합니다" + show: + destroy: "지우기" + not_found: "공유물을 찾을 수 없습니다." + permalink: "영구주소" + stream_helper: + hide_comments: "댓글 감추기" + show_comments: "댓글 보기" + tags: + show: + nobody_talking: "아직 %{tag} 태그가 달린 공유물이 없습니다." + people_tagged_with: "%{tag} 태그가 달린 사람들" + posts_tagged_with: "#%{tag} 태그가 달린 공유물" + the_world: "공개" + undo: "돌이키겠습니까?" + username: "사용자명" + users: + destroy: "계정을 성공적으로 없앴습니다." + edit: + also_commented: "댓글 달았던 공유물에 내 컨택도 댓글을 달았을 때" + change: "바꾸기" + change_language: "언어 바꾸기" + change_password: "암호 바꾸기" + close_account: "계정 없애기" + comment_on_post: "내 공유물에 댓글이 달렸을 때" + current_password: "원래 암호" + download_photos: "내 사진 다운로드" + download_xml: "내 xml 다운로드" + edit_account: "계정 고치기" + export_data: "자료 뽑아내기" + mentioned: "내가 멘션되었을 때" + new_password: "새 암호" + private_message: "쪽지를 받았을 때" + receive_email_notifications: "이럴 때 이메일 알림을 받겠습니다" + request_acceptence: "요청했던 공유가 수락되었을 때" + request_received: "새로운 공유 요청을 받았을 때" + your_email: "이메일 주소" + your_handle: "디아스포라 핸들" + getting_started: + connect_on_diaspora: "디아스포라에서 공유를 요청하세요" + connect_services: "다른 서비스와 연결하세요" + could_not_find_anyone: "디아스포라*에서 친구를 찾을 수 없습니다. 친구를 초대하세요!" + edit_profile: "프로필을 고치세요" + finished: "완료!" + save_and_continue: "저장하고 다음으로" + signup_steps: "세 단계를 더 거치면 가입을 마칠 수 있습니다." + skip: "넘기기" + step_2: + find_your_friends_on_diaspora: "페이스북 친구들을 디아스포라로 초대하세요!" + skip: "넘기기" + step_3: + finish: "마치기" + people_already_on_diaspora: "디아스포라에 가입한 사람들" + welcome: "디아스포라에 오신걸 환영합니다!" + public: + does_not_exist: "%{username} 님을 찾을 수 없습니다!" + update: + email_notifications_changed: "이메일 알림을 바꿨습니다" + language_changed: "언어를 바꿨습니다" + language_not_changed: "언어를 바꿀 수 없습니다" + password_changed: "암호를 바꿨습니다" + password_not_changed: "암호를 바꿀 수 없습니다" + webfinger: + fetch_failed: "failed to fetch webfinger profile for %{profile_url}" + hcard_fetch_failed: "there was a problem fetching the hcard for %{account}" + no_person_constructed: "No person could be constructed from this hcard." + not_enabled: "webfinger does not seem to be enabled for %{account}'s host" + xrd_fetch_failed: "there was an error getting the xrd from account %{account}" diff --git a/config/locales/diaspora/lt.yml b/config/locales/diaspora/lt.yml index e4eb0e863..5f82d097d 100644 --- a/config/locales/diaspora/lt.yml +++ b/config/locales/diaspora/lt.yml @@ -354,7 +354,7 @@ lt: recent_posts: "Recent Posts" recent_public_posts: "Recent Public Posts" return_to_aspects: "Grįžti į aspektų puslapį" - similar_contacts: "similar contacts" + see_all: "See all" start_sharing: "start sharing" to_accept_or_ignore: "priimti arba ignoruoti." you_have_no_tags: "you have no tags!" diff --git a/config/locales/diaspora/mk.yml b/config/locales/diaspora/mk.yml index 634468a00..78529c29a 100644 --- a/config/locales/diaspora/mk.yml +++ b/config/locales/diaspora/mk.yml @@ -354,7 +354,7 @@ mk: recent_posts: "Recent Posts" recent_public_posts: "Recent Public Posts" return_to_aspects: "Return to your aspects page" - similar_contacts: "similar contacts" + see_all: "See all" start_sharing: "start sharing" to_accept_or_ignore: "to accept or ignore it." you_have_no_tags: "you have no tags!" diff --git a/config/locales/diaspora/ml.yml b/config/locales/diaspora/ml.yml index 9e8f70376..e47920b81 100644 --- a/config/locales/diaspora/ml.yml +++ b/config/locales/diaspora/ml.yml @@ -144,7 +144,7 @@ ml: zero: "സമ്പര്‍ക്കമൊന്നുമില്ല" conversations: create: - sent: "Message sent" + sent: "സന്ദേശം അയച്ചിരിക്കുന്നു" destroy: success: "Conversation successfully removed" helper: @@ -160,7 +160,7 @@ ml: message_inbox: "Message Inbox" new_message: "പുതിയ സന്ദേശം" no_conversation_selected: "no conversation selected" - no_messages: "no messages" + no_messages: "സന്ദേശങ്ങളൊന്നും ഇല്ല" new: send: "അയക്കു" subject: "വിഷയം" @@ -222,7 +222,7 @@ ml: have_a_problem: "പ്രശ്നമുണ്ടോ?" powered_by: "ഡയസ്പോറയാല്‍* ശക്തമാക്കിയത്" public_feed: "Public Diaspora Feed for %{name}" - toggle: "toggle mobile site" + toggle: "മൊബൈല്‍ സൈറ്റിലേക്ക് മാറുക" whats_new: "പുതിയത്?" your_aspects: "നിങ്ങളുടെ പരിചയങ്ങള്‍" header: @@ -241,10 +241,10 @@ ml: other: "%{count} people disliked this" zero: "no people disliked this" people_like_this: - few: "%{count} people liked this" - many: "%{count} people liked this" - one: "1 person liked this" - other: "%{count} people liked this" + few: "%{count} ആളുകള്‍ ഇത് ഇഷ്ടപ്പെടുന്നു" + many: "%{count} ആളുകള്‍ ഇത് ഇഷ്ടപ്പെടുന്നു" + one: "ഒരാള്‍ ഇത് ഇഷ്ടപ്പെടുന്നു" + other: "%{count} ആളുകള്‍ ഇത് ഇഷ്ടപ്പെടുന്നു" zero: "no people liked this" more: "കൂടുതല്‍" next: "അടുത്തത്" @@ -354,7 +354,7 @@ ml: recent_posts: "സമീപകാല കുറിപ്പുകള്‍" recent_public_posts: "സമീപകാല പൊതു കുറിപ്പുകള്‍" return_to_aspects: "താങ്കളുടെ പരിചയം താളിലേയ്ക്ക് തിരിച്ച് പോവുക" - similar_contacts: "സാമ്യമുള്ള സമ്പര്‍ക്കങ്ങള്‍" + see_all: "See all" start_sharing: "പങ്കുവച്ച് തുടങ്ങുക" to_accept_or_ignore: "to accept or ignore it." you_have_no_tags: "you have no tags!" @@ -384,7 +384,7 @@ ml: photo: view_all: "%{name}യുടെ എല്ലാ ചിത്രങ്ങളും കാണുക" show: - collection_permalink: "collection permalink" + collection_permalink: "ശേഖരണത്തിന്റെ സ്ഥിരംകണ്ണി" delete_photo: "ചിത്രം നീക്കുക" edit: "തിരുത്തുക" edit_delete_photo: "ചിത്രത്തിന്റെ വിവരണം തിരുത്തുക / ചിത്രം നീക്കം ചെയ്യുക" @@ -398,7 +398,7 @@ ml: notice: "ചിത്രം വിജയകരമായി പുതുക്കി." post_visibilites: update: - post_hidden: "%{name}'s post has been hidden." + post_hidden: "%{name}ന്റെ പോസ്റ്റ് മറച്ചിരിക്കുന്നു." posts: doesnt_exist: "ഈ കുറിപ്പ് നിലവിലില്ല!" previous: "മുന്‍‌പത്തെ" @@ -550,7 +550,7 @@ ml: mentioning: "Mentioning: %{person}" show: destroy: "നീക്കം ചെയ്യുക" - not_found: "Sorry, we couldn't find that post." + not_found: "ക്ഷമിക്കണം, പോസ്റ്റ് കണ്ടെത്താനായില്ല." permalink: "സ്ഥിരം കണ്ണി" stream_helper: hide_comments: "അഭിപ്രായങ്ങള്‍ മറയ്ക്കുക" @@ -564,7 +564,7 @@ ml: undo: "Undo?" username: "ഉപയോക്തൃനാമം" users: - destroy: "അക്കൌണ്ട് വിജയകരമായി അവസാനിപ്പിച്ചു." + destroy: "Account successfully closed." edit: also_commented: "...someone also comments on your contact's post?" change: "മാറ്റുക" diff --git a/config/locales/diaspora/nb.yml b/config/locales/diaspora/nb.yml index e77e2f34b..7ef93986e 100644 --- a/config/locales/diaspora/nb.yml +++ b/config/locales/diaspora/nb.yml @@ -354,7 +354,7 @@ nb: recent_posts: "Nylige Innlegg" recent_public_posts: "Nylige Offentlige Innlegg" return_to_aspects: "Tilbake til aspektene" - similar_contacts: "lignende kontakter" + see_all: "See all" start_sharing: "begynn å dele" to_accept_or_ignore: "for å akseptere eller ignorere." you_have_no_tags: "du har ingen tagger!" diff --git a/config/locales/diaspora/nl.yml b/config/locales/diaspora/nl.yml index 76e5dcd65..efd75e466 100644 --- a/config/locales/diaspora/nl.yml +++ b/config/locales/diaspora/nl.yml @@ -266,7 +266,7 @@ nl: and_others: "en %{number} anderen" mark_all_as_read: "Markeer alles gelezen" notifications: "Notificaties" - mentioned: "heeft je genoemd in zijn/haar" + mentioned: "heeft je genoemd in een post" new_request: "bood aan om met jou te delen." post: "post" private_message: "heeft je een bericht gestuurd." @@ -346,7 +346,7 @@ nl: add_some: "Voeg toe" does_not_exist: "Die persoon bestaat niet!" edit: "bewerk" - incoming_request: "% {name} wil met je delen" + incoming_request: "%{name} wil met je delen" mention: "Noemen" message: "Bericht" no_posts: "geen berichten om weer te geven!" @@ -354,7 +354,7 @@ nl: recent_posts: "Recente Berichten" recent_public_posts: "Recente Openbare Berichten" return_to_aspects: "Ga terug naar je aspecten pagina" - similar_contacts: "vergelijkbare contacten" + see_all: "Zie alles" start_sharing: "start met delen" to_accept_or_ignore: "om te accepteren of te negeren." you_have_no_tags: "je hebt geen tags!" diff --git a/config/locales/diaspora/pa.yml b/config/locales/diaspora/pa.yml index ef84b1dee..0495143c6 100644 --- a/config/locales/diaspora/pa.yml +++ b/config/locales/diaspora/pa.yml @@ -354,7 +354,7 @@ pa: recent_posts: "Recent Posts" recent_public_posts: "Recent Public Posts" return_to_aspects: "Return to your aspects page" - similar_contacts: "ਰਲਦੇ ਸੰਪਰਕ" + see_all: "See all" start_sharing: "start sharing" to_accept_or_ignore: "to accept or ignore it." you_have_no_tags: "you have no tags!" diff --git a/config/locales/diaspora/pl.yml b/config/locales/diaspora/pl.yml index 7c5f4e7ec..4d954ea8f 100644 --- a/config/locales/diaspora/pl.yml +++ b/config/locales/diaspora/pl.yml @@ -27,24 +27,24 @@ pl: user: attributes: email: - taken: "is already taken." + taken: "jest już używany." person: invalid: "is invalid." username: - taken: "is already taken." + taken: "jest już zajęta." ago: "%{time} temu" - all_aspects: "All aspects" + all_aspects: "Wszystkie aspekty" application: helper: unknown_person: "nieznana osoba" video_title: - unknown: "Unknown Video Title" + unknown: "Wideo bez nazwy" are_you_sure: "Na pewno?" aspect_memberships: destroy: - failure: "Failed to remove person from aspect" - no_membership: "Could not find the selected person in that aspect" - success: "Successfully removed person from aspect" + failure: "Nie udało się usunąć osoby z aspektu" + no_membership: "Nie udało się odnaleźć wskazanej osoby w tym aspekcie" + success: "Osoba pomyślnie usunięta z aspektu" aspects: add_to_aspect: failure: "Nie udało się dodać kontaktu do aspektu." @@ -52,29 +52,29 @@ pl: aspect_contacts: done_editing: "edycja zakończona" aspect_stream: - activity: "activity" - post_time: "post time" - sort_by: "sort by:" + activity: "aktywność" + post_time: "data wpisu" + sort_by: "sortuj po:" contacts_not_visible: "Kontakty z tego aspektu nie będą dla siebie widoczne." contacts_visible: "Kontakty z tego aspektu będą widziały się nawzajem." create: failure: "Nie udało się utworzyć aspektu." success: "Twój nowy aspekt, on nazwie %{name}, został utworzony" destroy: - failure: "%{name} is not empty and could not be removed." + failure: "%{name} nie jest pusty i nie może być usunięty." success: "%{name} został usunięty." edit: add_existing: "Dodaj istniejący kontakt" - aspect_list_is_not_visible: "aspect list is hidden to others in aspect" - aspect_list_is_visible: "aspect list is visible to others in aspect" + aspect_list_is_not_visible: "lista aspektów jest ukryta przed innymi z tego aspektu" + aspect_list_is_visible: "lista aspektów jest widoczna dla innych z tego aspektu" confirm_remove_aspect: "@{m,f:Jesteś|n:Czy na}{ pew}{m:ien|f:na|n:no}{m,f:, że } chcesz usunąć ten aspekt?" - done: "Done" - make_aspect_list_visible: "make aspect list visible?" + done: "Zrobione" + make_aspect_list_visible: "uczyń listę aspektów widoczną?" remove_aspect: "Usuń ten aspekt" rename: "zmień nazwę" - update: "update" + update: "aktualizuj" updating: "updating" - few: "%{count} aspects" + few: "%{count} aspekty" helper: are_you_sure: "@{m,f:Jesteś|n:Czy na}{ pew}{m:ien|f:na|n:no}{m,f:, że } chcesz usunąć ten aspekt?" aspect_not_empty: "Aspekt nie jest pusty" @@ -82,7 +82,7 @@ pl: index: handle_explanation: "To jest Twój identyfikator w Diasporze. Podobnie jak adresu e-mailowy, możesz podawać go innym, aby mogli się z Tobą skontaktować." no_contacts: "Brak kontaktów" - post_a_message: "post a message >>" + post_a_message: "napisz wiadomość >>" manage: add_a_new_aspect: "Dodaj nowy aspekt" add_a_new_contact: "Dodaj nowy kontakt" @@ -90,7 +90,7 @@ pl: manage_aspects: "Zarządzanie aspektami" no_requests: "Brak nowych zaproszeń" requests: "Zaproszenia" - many: "%{count} aspects" + many: "%{count} aspektów" move_contact: error: "Błąd przy przenoszeniu kontaktu: %{inspect}" failure: "nie zadziałało %{inspect}" @@ -100,74 +100,74 @@ pl: name: "Nazwa" no_posts_message: start_talking: "Nikt jeszcze nic nie powiedział. Rozkręć rozmowę!" - one: "1 aspect" - other: "%{count} aspects" + one: "1 aspekt" + other: "%{count} aspektów" seed: family: "Rodzina" work: "Praca" show: edit_aspect: "edytuj aspekt" update: - failure: "Your aspect, %{name}, had too long name to be saved." + failure: "Twój aspekt %{name} nie mógł zostać zapisany z powodu zbyt długiej nazwy." success: "Twój aspekt '%{name}' został pomyślnie zmieniony." - zero: "no aspects" + zero: "brak aspektów" back: "Wróć" bookmarklet: - explanation: "%{link} from anywhere by bookmarking this link." - explanation_link_text: "Post to Diaspora" - post_something: "Post something to Diaspora" + explanation: "%{link} z każdego miejsca dodając ten link do zakładek." + explanation_link_text: "Publikuj w serwisie Diaspora" + post_something: "Napisz coś na Diasporze" post_success: "Posted! Closing!" cancel: "Anuluj" comments: - few: "%{count} comments" - many: "%{count} comments" + few: "%{count} komentarze" + many: "%{count} komentarzy" new_comment: comment: "Skomentuj…" commenting: "Komentowanie…" - one: "1 comment" - other: "%{count} comments" - zero: "no comments" + one: "1 komentarz" + other: "%{count} komentarzy" + zero: "brak komentarzy" contacts: create: - failure: "Failed to create contact" + failure: "Nie udało się utworzyć kontaktu" destroy: - failure: "Failed to disconnect from %{name}" - success: "Successfully disconnected from %{name}" + failure: "Nie udało się odłączyć od %{name}" + success: "Pomyślnie odłączono od %{name}" few: "%{count} kontakty" - many: "%{count} contacts" + many: "%{count} kontaktów" one: "1 kontakt" other: "%{count} kontaktów" share_with_pane: - accepts: "Once %{name} accepts, you'll start seeing each other's posts on Diaspora" - add_new_aspect: "add to new aspect" - share_with: "Start sharing with %{name}" + accepts: "Kiedy %{name} zaakceptuje zaproszenie, zaczniecie widzieć nawzajem swoje wpisy w serwisie Diaspora" + add_new_aspect: "dodaj do nowego aspektu" + share_with: "Zacznij współdzielić z %{name}" zero: "brak kontaktów" conversations: create: - sent: "Message sent" + sent: "Wiadomość została wysłana" destroy: - success: "Conversation successfully removed" + success: "Pomyślnie usunięto rozmowę" helper: new_messages: - few: "%{count} new messages" - many: "%{count} new messages" - one: "1 new messages" - other: "%{count} new messages" - zero: "no new messages" + few: "%{count} nowe wiadomości" + many: "%{count} nowych wiadomości" + one: "1 nowa wiadomość" + other: "%{count} nowych wiadomości" + zero: "brak nowych wiadomości" index: - create_a_new_message: "create a new message" - inbox: "Inbox" - message_inbox: "Message Inbox" - new_message: "New Message" - no_conversation_selected: "no conversation selected" - no_messages: "no messages" + create_a_new_message: "stwórz nową wiadomość" + inbox: "Skrzynka odbiorcza" + message_inbox: "Skrzynka odbiorcza" + new_message: "Nowa wiadomość" + no_conversation_selected: "nie wybrano wątku" + no_messages: "brak wiadomości" new: - send: "Send" - subject: "subject" - to: "to" + send: "Wyślij" + subject: "temat" + to: "do" show: - delete: "delete and block conversation" - reply: "reply" + delete: "usuń i zablokuj rozmowę" + reply: "odpowiedz" date: formats: birthday: "%d %B" @@ -180,7 +180,7 @@ pl: correct_the_following_errors_and_try_again: "Popraw poniższe błędy i spróbuj ponownie." invalid_fields: "Pola z błędami" fill_me_out: "Wypełnij to pole" - hide: "Hide" + hide: "Ukryj" home: show: already_account: "masz już konto?" @@ -207,13 +207,13 @@ pl: edit: sign_up: "rejestracja" new: - already_invited: "Already invited" + already_invited: "Już zaproszony" aspect: "Aspekt" comma_seperated_plz: "Możesz podać kilka adresów e-mailowych, oddzielając je przecinkami." if_they_accept_info: "Jeśli wybrana osoba przyjmie zaproszenie, zostanie dodana do aspektów, do których ją zapros@{m:iłeś|f:iłaś|n:zono}." invite_someone_to_join: "Zaproś kogoś do Diaspory!" personal_message: "Dodatkowa wiadomość" - resend: "Resend" + resend: "Wyślij ponownie" send_an_invitation: "Wyślij zaproszenie" send_invitation: "Wyślij zaproszenie" to: "Do" @@ -221,85 +221,85 @@ pl: application: have_a_problem: "Masz problem? Tu znajdziesz rozwiązanie" powered_by: "POWERED BY DIASPORA*" - public_feed: "Public Diaspora Feed for %{name}" + public_feed: "Publiczny kanał Diaspory użytkownika %{name}" toggle: "przełącz widok mobilny" - whats_new: "what's new?" - your_aspects: "your aspects" + whats_new: "co nowego?" + your_aspects: "twoje aspekty" header: blog: "blog" code: "kod" login: "logowanie" logout: "wyloguj" - profile: "profile" - settings: "settings" + profile: "profil" + settings: "ustawienia" likes: likes: people_dislike_this: - few: "%{count} people disliked this" - many: "%{count} people disliked this" - one: "1 person disliked this" - other: "%{count} people disliked this" + few: "%{count} osoby nie lubią tego" + many: "%{count} osób nie lubi tego" + one: "1 osoba tego nie lubi" + other: "%{count} osób nie lubi tego" zero: "no people disliked this" people_like_this: - few: "%{count} people liked this" - many: "%{count} people liked this" - one: "1 person liked this" - other: "%{count} people liked this" - zero: "no people liked this" - more: "More" - next: "next" - no_results: "No Results Found" + few: "%{count} osoby polubiły to" + many: "%{count} osób polubiło to" + one: "1 osoba to polubiła" + other: "%{count} osób polubiło to" + zero: "nikt tego nie polubił" + more: "Więcej" + next: "następny" + no_results: "Nie znaleziono niczego" notifications: - also_commented: "also commented on" + also_commented: "skomentował również użytkownika %{post_author}" also_commented_deleted: "commented on a deleted post" comment_on_post: "komentuje twój" deleted: "usunięte" helper: new_notifications: - few: "%{count} new notifications" - many: "%{count} new notifications" - one: "1 new notifications" - other: "%{count} new notifications" - zero: "no new notifications" + few: "%{count} nowe powiadomienia" + many: "%{count} nowych powiadomień" + one: "1 nowe powiadomienie" + other: "%{count} nowych powiadomień" + zero: "brak nowych powiadomień" index: - and: "and" - and_others: "and %{number} others" - mark_all_as_read: "Mark All as Read" + and: "i" + and_others: "i %{number} innych" + mark_all_as_read: "Oznacz wszystkie jako przeczytane" notifications: "Powiadomienia" - mentioned: "has mentioned you in their" - new_request: "wysłał Ci zaproszenie do współdzielenia." - post: "post" - private_message: "sent you a message." + mentioned: "wspomniał o tobie we wpisie" + new_request: "chce zostać twoim znajomym." + post: "wpis" + private_message: "wysłał(a) ci wiadomość." request_accepted: "zaakceptował Twoje zaproszenie." notifier: also_commented: commented: "skomentował też wpis użytkownika %{post_author}:" sign_in: "Zaloguj się, aby je obejrzeć." - subject: "%{name} has also commented." + subject: "%{name} skomentował również wpis użytkownika %{post_author}." comment_on_post: - commented: "has commented on your post!" + commented: "skomentował twój wpis:" sign_in: "Zaloguj się, aby go obejrzeć." subject: "Użytkownik %{name} skomentował Twój wpis." diaspora: "robot e-mailowy diaspory" hello: "Cześć %{name}!" love: "uściski," - manage_your_email_settings: "manage your email settings" + manage_your_email_settings: "zarządzaj ustawieniami emaila" mentioned: - mentioned: "mentioned you in a post:" - sign_in: "Sign in to view it." - subject: "%{name} has mentioned you on Diaspora*" + mentioned: "wspomniał(a) o tobie we wpisie:" + sign_in: "Zaloguj się, aby uzyskać dostęp." + subject: "%{name} wspomniał o tobie w serwisie Diaspora*" new_request: just_sent_you: "właśnie wysłał(-a) Ci zaproszenie do Diaspory*" sign_in: "zaloguj się" subject: "nowe zaproszenie do znajomych w Diasporze* od %{from}" try_it_out: "Przemyśl to, naprawdę warto spróbować." private_message: - message_subject: "Subject: %{subject}" - private_message: "has sent you a private message:" - sign_in: "Sign in to view it." - subject: "%{name} has sent you a private message yon Diaspora*" + message_subject: "Temat: %{subject}" + private_message: "wysłał ci wiadomość prywatną:" + sign_in: "Zarejestruj się, aby zobaczyć." + subject: "%{name} wysłał ci prywatną wiadomość w serwisie Diaspora*" request_accepted: - accepted: "zaakceptował(-a) Twoje zaproszenie. Jest w aspekcie" + accepted: "zaakceptował Twoje zaproszenie!" sign_in: "Zaloguj się" subject: "%{name} zaakceptował(-a) twoje zaproszenie do znajomych w Diasporze*" single_admin: @@ -314,24 +314,24 @@ pl: add_contact_small: add_contact_from_tag: "add contact from tag" aspect_list: - edit_membership: "edit aspect membership" - few: "%{count} people" + edit_membership: "edytuj przynależność do aspektów" + few: "%{count} osoby" helper: people_on_pod_are_aware_of: " osoby na podzie wiedzą, że" results_for: " wyniki dla %{params}" index: - couldnt_find_them_send_invite: "Couldn't find them? Send an invite!" - no_one_found: "...and no one was found." - no_results: "Hey! You need to search for something." + couldnt_find_them_send_invite: "Nie znalazłeś ich? Wyślij im zaproszenie!" + no_one_found: "...i nikogo nie udało się znaleźć." + no_results: "Hej! Musisz coś wpisać w pole wyszukiwarki!" results_for: "wyniki wyszukiwania dla" - many: "%{count} people" - one: "1 person" - other: "%{count} people" + many: "%{count} osób" + one: "1 osoba" + other: "%{count} ludzi" person: add_contact: "dodaj kontakt" already_connected: "Już podłączono" pending_request: "zaproszenie oczekujące" - thats_you: "to przecież Ty!" + thats_you: "To przecież Ty!" profile_sidebar: bio: "notka biograficzna" born: "urodziny" @@ -339,28 +339,28 @@ pl: edit_my_profile: "Edycja mojego profilu" gender: "płeć" in_aspects: "w aspektach" - location: "location" + location: "położenie" remove_contact: "usuwanie kontaktu" remove_from: "Usunąć %{name} z aspektu %{aspect}?" show: - add_some: "add some" + add_some: "dodaj kogoś" does_not_exist: "Osoba nie istnieje!" - edit: "edit" - incoming_request: "Masz nowe zaproszenie od tej osoby." - mention: "Mention" - message: "Message" + edit: "edytuj" + incoming_request: "%{name} chce być twoim znajomym" + mention: "Wspomnij" + message: "Wiadomość" no_posts: "brak wpisów!" - not_connected: "You are not connected with this person" + not_connected: "Ta osoba nie jest twoim znajomym" recent_posts: "Ostatnie wpisy" - recent_public_posts: "Recent Public Posts" + recent_public_posts: "Ostatnie wpisy publiczne" return_to_aspects: "Wróć do strony aspektów" - similar_contacts: "similar contacts" + see_all: "Zobacz wszystkich" start_sharing: "współdziel" to_accept_or_ignore: "by je przyjąć lub zignorować." - you_have_no_tags: "you have no tags!" + you_have_no_tags: "nie masz tagów!" webfinger: fail: "Wybacz, nie można było znaleźć %{handle}." - zero: "no people" + zero: "nikt" photos: create: integrity_error: "Nie udało się przesłać zdjęcia. Czy @{m,f:jesteś pew}{m:ien|f:na|n:to na pewno}{m,f: że to} był obraz?" @@ -379,8 +379,8 @@ pl: invalid_ext: "Plik {file} ma niewłaściwe rozszerzenie. Akceptowane rozszerzenia: {extensions}" size_error: "Plik {file} jest zbyt duży, maksymalny rozmiar to {sizeLimit}." new_profile_photo: - or_select_one: "or select one from your already existing" - upload: "Upload a new profile photo!" + or_select_one: "lub wybierz jeden z już istniejących" + upload: "Załaduj nowe zdjęcie profilowe!" photo: view_all: "pokaż wszystkie zdjęcia należące do: %{name}" show: @@ -388,8 +388,8 @@ pl: delete_photo: "Usuń zdjęcie" edit: "edytuj" edit_delete_photo: "Edytuj opis zdjęcia / usuń zdjęcie" - make_profile_photo: "zrób zdjęcie profilowe" - original_post: "Original Post" + make_profile_photo: "ustaw jako zdjęcie profilowe" + original_post: "Pierwotny wpis" permalink: "permalink" update_photo: "Aktualizuj zdjęcie" view: "podgląd" @@ -398,31 +398,31 @@ pl: notice: "Pomyślnie zaktualizowano zdjęcie." post_visibilites: update: - post_hidden: "%{name}'s post has been hidden." + post_hidden: "wpis użytkownika %{name} został ukryty." posts: - doesnt_exist: "that post does not exist!" - previous: "previous" + doesnt_exist: "ten wpis nie istnieje!" + previous: "poprzedni" profile: "Profil" profiles: edit: - allow_search: "Allow for people to search for you within Diaspora" - edit_profile: "Edit profile" - first_name: "First name" - last_name: "Last name" - update_profile: "Update Profile" - your_bio: "Your bio" - your_birthday: "Your birthday" - your_gender: "Your gender" - your_location: "Your location" - your_name: "Your name" - your_photo: "Your photo" - your_private_profile: "Your private profile" - your_public_profile: "Your public profile" - your_tags: "You: in 5 #tags" - your_tags_placeholder: "i.e. #diaspora #ironing #kittens #music" + allow_search: "Pozwól ludziom na wyszukiwanie cię w serwisie Diaspora" + edit_profile: "Edytuj profil" + first_name: "Imię" + last_name: "Nazwisko" + update_profile: "Aktualizuj profil" + your_bio: "O tobie" + your_birthday: "Twoje urodziny" + your_gender: "Twoja płeć" + your_location: "Twoje położenie" + your_name: "Imię" + your_photo: "Twoje zdjęcie" + your_private_profile: "Twój profil prywatny" + your_public_profile: "Twój profil publiczny" + your_tags: "Ty: w 5 #tagach" + your_tags_placeholder: "np. #diaspora #prasowanie #kotki #muzyka" update: - failed: "Failed to update profile" - updated: "Profile updated" + failed: "Nie udało się zaktualizować profilu" + updated: "Profil został pomyślnie zaktualizowany" registrations: closed: "Na tym podzie Diaspory rejestracja jest zamknięta" create: @@ -451,11 +451,11 @@ pl: success: "Jesteście teraz znajomymi." helper: new_requests: - few: "%{count} new requests!" - many: "%{count} new requests!" - one: "new request!" - other: "%{count} new requests!" - zero: "no new requests" + few: "%{count} nowe zaproszenia!" + many: "%{count} nowych zaproszeń!" + one: "nowe zaproszenie!" + other: "%{count} nowych zaproszeń!" + zero: "brak nowych zaproszeń" manage_aspect_contacts: existing: "Istniejące kontakty" manage_within: "Zarządzanie kontaktami w" @@ -471,23 +471,23 @@ pl: error: "wystąpił błąd podczas łączenia z tą usługą" finder: friends: - few: "%{count} friends" - many: "%{count} friends" - one: "1 friend" - other: "%{count} friends" - zero: "no friends" - invite_your_friends_from: "Invite your friends from %{service}" - not_connected: "not connected" + few: "%{count} znajomych" + many: "%{count} znajomych" + one: "1 znajomy" + other: "%{count} znajomych" + zero: "żadnych znajomych" + invite_your_friends_from: "Zaproś swoich znajomych z serwisu %{service}" + not_connected: "nie połączono" index: connect_to_facebook: "Połącz z Facebookiem" connect_to_twitter: "Połącz z Twitterem" disconnect: "rozłącz" - edit_services: "Edit services" + edit_services: "Edytuj usługi" logged_in_as: "zalogowano jako" really_disconnect: "rozłączyć %{service}?" inviter: - click_link_to_accept_invitation: "Click this link to accept your invitation" - join_me_on_diaspora: "Join me on DIASPORA*" + click_link_to_accept_invitation: "Kliknij w ten link, aby przyjąć zaproszenie" + join_me_on_diaspora: "Dołącz do mnie w serwisie DIASPORA*" remote_friend: invite: "zaproś" resend: "wyślij ponownie" @@ -503,16 +503,16 @@ pl: all_contacts: "Wszystkie kontakty" cannot_remove: "Nie można usunąć osoby z jedynego pozostałego aspektu. (Jeśli chcesz się rozłączyć z tą osobą musisz ją usunąć ze znajomych.)" footer: - logged_in_as: "logged in as %{name}" - your_aspects: "your aspects" + logged_in_as: "zalogowany jako %{name}" + your_aspects: "twoje aspekty" invitations: - by_email: "by Email" + by_email: "przez e-mail" dont_have_now: "Nie masz wolnych zaproszeń, ale niebawem się pojawią!" - from_facebook: "From Facebook" + from_facebook: "z serwisu Facebook" invitations_left: "(pozostało %{count} zaproszeń)" invite_someone: "Zaproś kogoś" - invite_your_friends: "Invite your friends" - invites: "Invites" + invite_your_friends: "Znajdź znajomych" + invites: "Zaproszenia" invites_closed: "Wysyłanie zaproszeń jest obecnie wyłączony na tym podzie Diaspora" notification: new: "Nowy(-a,-e) %{type} od %{from}" @@ -525,23 +525,23 @@ pl: add_photos: "dodaj zdjęcia" all: "wszyscy" all_contacts: "wszyscy znajomi" - click_to_share_with: "Click to share with: " + click_to_share_with: "Kliknij, aby podzielić się z:" make_public: "upublicznij" post_a_message_to: "Wyślij wiadomość do %{aspect}" posting: "Wysyłanie…" public: "Public" - publishing_to: "publishing to: " + publishing_to: "publikuj na:" share: "Podziel się" share_with: "Podziel się z aspektem %{aspect}" whats_on_your_mind: "co Ci chodzi po głowie?" reshare: reshare: "Podziel się ponownie" stream_element: - dislike: "I dislike this" - like: "I like this" + dislike: "Nie lubię tego" + like: "Lubię to" status_messages: create: - success: "Successfully mentioned: %{names}" + success: "Pomyślnie wspomniano o: %{names}" destroy: failure: "Błąd podczas usuwania wpisu" helper: @@ -550,39 +550,39 @@ pl: mentioning: "Mentioning: %{person}" show: destroy: "Usuń" - not_found: "Sorry, we couldn't find that post." - permalink: "permalink" + not_found: "Niestety, nie udało się nam znaleźć tego wpisu." + permalink: "odnośnik bezpośredni" stream_helper: hide_comments: "ukryj komentarze" show_comments: "pokaż komentarze" tags: show: - nobody_talking: "Nobody is talking about %{tag} yet." - people_tagged_with: "People tagged with %{tag}" - posts_tagged_with: "Posts tagged with #%{tag}" + nobody_talking: "Nikt jeszcze nie rozmawia o %{tag}." + people_tagged_with: "Osoby opisane poprzez %{tag}" + posts_tagged_with: "Wpisy oznaczone jako #%{tag}" the_world: "świat" - undo: "Undo?" + undo: "Cofnąć?" username: "Nazwa użytkownika" users: destroy: "Konto zostało pomyślnie zamknięte." edit: - also_commented: "...someone also comments on your contact's post?" - change: "Change" + also_commented: "...ktoś także skomentuje wpis jednego z twoich kontaktów?" + change: "Zmień" change_language: "Zmień język" change_password: "Zmiana hasła" close_account: "Zamknij konto" - comment_on_post: "...someone comments on your post?" - current_password: "Current password" + comment_on_post: "...ktoś skomentuje twój wpis?" + current_password: "Obecne hasło" download_photos: "pobierz moje zdjęcia" download_xml: "pobierz mój xml" - edit_account: "Edit account" + edit_account: "Edytuj konto" export_data: "Eksportowanie danych" - mentioned: "...you are mentioned in a post?" + mentioned: "...zostałeś wspomniany(a) we wpisie?" new_password: "Nowe hasło" - private_message: "...you receive a private message?" - receive_email_notifications: "Receive email notificaions?" - request_acceptence: "...your share request is accepted?" - request_received: "...you receive a new share request?" + private_message: "...otrzymasz prywatną wiadomość?" + receive_email_notifications: "Otrzymywanie powiadomień emailowych kiedy..." + request_acceptence: "...twoje zaproszenie do współdzielenia zostanie zaakceptowane?" + request_received: "...otrzymasz nowe zaproszenie do współdzielenia?" your_email: "Twój e-mail" your_handle: "Twój identyfikator w Diasporze" getting_started: @@ -595,16 +595,16 @@ pl: signup_steps: "Dokończ rejestrację w trzech krokach:" skip: "pomiń wprowadzenie" step_2: - find_your_friends_on_diaspora: "Would you like to find your Facebook friends on Diaspora?" - skip: "Skip" + find_your_friends_on_diaspora: "Czy chciałbyś znaleźć swoich znajomych z serwisu Facebook w Diasporze?" + skip: "Pomiń" step_3: - finish: "Finish" - people_already_on_diaspora: "People already on Diaspora" + finish: "Zakończ" + people_already_on_diaspora: "Już używający Diaspory" welcome: "Witaj w Diasporze!" public: does_not_exist: "Użytkownik %{username} nie istnieje!" update: - email_notifications_changed: "Language Change Failed" + email_notifications_changed: "Zmieniono ustawienia powiadomień email" language_changed: "Zmieniono język" language_not_changed: "Nie udało się zmienić języka" password_changed: "Zmieniono hasło" diff --git a/config/locales/diaspora/pt-BR.yml b/config/locales/diaspora/pt-BR.yml index 239ed2b08..51e3fc255 100644 --- a/config/locales/diaspora/pt-BR.yml +++ b/config/locales/diaspora/pt-BR.yml @@ -354,7 +354,7 @@ pt-BR: recent_posts: "Postagens recentes" recent_public_posts: "Postagens públicas recentes" return_to_aspects: "Retornar à sua página de aspectos" - similar_contacts: "Contatos similares" + see_all: "See all" start_sharing: "Comece a compartilhar" to_accept_or_ignore: "Aceitar ou ignorar." you_have_no_tags: "you have no tags!" diff --git a/config/locales/diaspora/pt-PT.yml b/config/locales/diaspora/pt-PT.yml index 52ce28fec..b696ca945 100644 --- a/config/locales/diaspora/pt-PT.yml +++ b/config/locales/diaspora/pt-PT.yml @@ -354,7 +354,7 @@ pt-PT: recent_posts: "Recent Posts" recent_public_posts: "Recent Public Posts" return_to_aspects: "Voltar à página dos grupos" - similar_contacts: "contactos similares" + see_all: "See all" start_sharing: "começar a partilhar" to_accept_or_ignore: "para o aceitares ou ignorares" you_have_no_tags: "you have no tags!" diff --git a/config/locales/diaspora/ro.yml b/config/locales/diaspora/ro.yml index 9ca1c78b9..fdd285ca4 100644 --- a/config/locales/diaspora/ro.yml +++ b/config/locales/diaspora/ro.yml @@ -354,7 +354,7 @@ ro: recent_posts: "Recent Posts" recent_public_posts: "Recent Public Posts" return_to_aspects: "Return to your aspects page" - similar_contacts: "similar contacts" + see_all: "See all" start_sharing: "start sharing" to_accept_or_ignore: "to accept or ignore it." you_have_no_tags: "you have no tags!" diff --git a/config/locales/diaspora/ru.yml b/config/locales/diaspora/ru.yml index 8fbb0c6db..a25f28e10 100644 --- a/config/locales/diaspora/ru.yml +++ b/config/locales/diaspora/ru.yml @@ -266,7 +266,7 @@ ru: and_others: "и %{number} других" mark_all_as_read: "Отметить все как прочитанные" notifications: "Уведомления" - mentioned: "упомянул вас в своих" + mentioned: "упомянул вас в своих сообщениях" new_request: "предлагает поделиться с вами." post: "сообщение" private_message: "послал Вам сообщение." @@ -354,7 +354,7 @@ ru: recent_posts: "Последние сообщения" recent_public_posts: "Последние Публичные Посты" return_to_aspects: "Вернуться на страницу аспектов" - similar_contacts: "аналогичные контакты" + see_all: "Показать все" start_sharing: "поделиться" to_accept_or_ignore: "принять или игнорировать." you_have_no_tags: "у вас нет меток!" @@ -520,7 +520,7 @@ ru: logged_in: "вошли в %{service}" manage: "управление подключенными сервисами" outside: "Публичные сообщения доступны для чтения всем, даже за пределами вашей Диаспоры." - title: "Вы собираетесь отправить публичное сообщение!" + title: "Настройка подключенных услуг" publisher: add_photos: "добавить фотографии" all: "все" diff --git a/config/locales/diaspora/sk.yml b/config/locales/diaspora/sk.yml index 7b411b10f..d27246bb6 100644 --- a/config/locales/diaspora/sk.yml +++ b/config/locales/diaspora/sk.yml @@ -354,7 +354,7 @@ sk: recent_posts: "Posledné príspevky" recent_public_posts: "Nedávne verejné príspevky" return_to_aspects: "Vrátiť sa na stránku aspektov" - similar_contacts: "podobné kontakty" + see_all: "See all" start_sharing: "začať zdieľať" to_accept_or_ignore: "akceptovať, alebo ignorovať." you_have_no_tags: "you have no tags!" diff --git a/config/locales/diaspora/sl.yml b/config/locales/diaspora/sl.yml index 0e28df6d2..7cc62da08 100644 --- a/config/locales/diaspora/sl.yml +++ b/config/locales/diaspora/sl.yml @@ -33,7 +33,7 @@ sl: username: taken: "is already taken." ago: "%{time} nazaj" - all_aspects: "All aspects" + all_aspects: "Vse skupine" application: helper: unknown_person: "neznana oseba" @@ -55,8 +55,8 @@ sl: activity: "activity" post_time: "post time" sort_by: "sort by:" - contacts_not_visible: "Contacts in this aspect will not be able to see each other." - contacts_visible: "Contacts in this aspect will be able to see each other." + contacts_not_visible: "Stiki v tej skupini drug drugega ne bodo videli." + contacts_visible: "Stiki v tej skupini drug drugega lahko vidijo." create: failure: "Ustvarjanje skupine ni uspelo." success: "Skupina %{name} je ustvarjena" @@ -122,7 +122,7 @@ sl: few: "%{count} comments" many: "%{count} comments" new_comment: - comment: "komentar" + comment: "komentiraj" commenting: "komentiraj..." one: "1 comment" other: "%{count} comments" @@ -224,7 +224,7 @@ sl: public_feed: "Public Diaspora Feed for %{name}" toggle: "toggle mobile site" whats_new: "kaj je novega?" - your_aspects: "your aspects" + your_aspects: "vaše skupine" header: blog: "blog" code: "koda" @@ -246,11 +246,11 @@ sl: one: "1 person liked this" other: "%{count} people liked this" zero: "no people liked this" - more: "More" + more: "Več" next: "naslednja" no_results: "No Results Found" notifications: - also_commented: "komentirano tudi na vaših stikih" + also_commented: "komentirano tudi na %{post_author}" also_commented_deleted: "commented on a deleted post" comment_on_post: "komentar na vaš" deleted: "izbrisano" @@ -264,9 +264,9 @@ sl: index: and: "and" and_others: "and %{number} others" - mark_all_as_read: "Mark All as Read" + mark_all_as_read: "Označi vse kot prebrano" notifications: "Sporočila" - mentioned: "has mentioned you in their" + mentioned: "bili ste omenjeni v objavi" new_request: "nekdo želi deliti z vami." post: "prispevek" private_message: "sent you a message." @@ -275,9 +275,9 @@ sl: also_commented: commented: "prav tako komentirano na objavo osebe %{post_author}:" sign_in: "Za ogled se prijavite." - subject: "oseba %{name} je prav tako komentirala." + subject: "oseba %{name} je prav tako komentirala %{post_author}." comment_on_post: - commented: "komentar na vašo objavo!" + commented: "oseba je komentirala na vašo objavo:" sign_in: "Za ogled se prijavite." subject: "Oseba %{name} je komentirala vašo objavo." diaspora: "diaspora email robot" @@ -290,17 +290,17 @@ sl: subject: "%{name} has mentioned you on Diaspora*" new_request: just_sent_you: "poslana vam je bila prošnja za stik v Diaspori*" - sign_in: "prijavite se tukaj" + sign_in: "Prijavite se tukaj" subject: "nova Diaspora* prošnja za stik od %{from}" try_it_out: "Preverite in se prepričajte." private_message: message_subject: "Subject: %{subject}" private_message: "has sent you a private message:" sign_in: "Sign in to view it." - subject: "%{name} has sent you a private message yon Diaspora*" + subject: "oseba %{name} vam je poslala privatno sporočilo v Diaspori*" request_accepted: accepted: "vaše povabilo je bilo sprejeto!" - sign_in: "Sign in here" + sign_in: "Tukaj se registrirajte" subject: "Oseba %{name} je sprejela vaše povabilo za stik v Diaspori*" single_admin: admin: "Vaš administrator Diaspore" @@ -330,8 +330,8 @@ sl: person: add_contact: "dodaj stik" already_connected: "Ste že povezani" - pending_request: "čakajoče prošnje" - thats_you: "to ste vi!" + pending_request: "Čakajoče zahteve" + thats_you: "To ste vi!" profile_sidebar: bio: "življenjepis" born: "datum rojstva" @@ -346,15 +346,15 @@ sl: add_some: "add some" does_not_exist: "Oseba ne obstaja!" edit: "edit" - incoming_request: "Od te osebe ste prejeli novo prošnjo." + incoming_request: "%{name} želi deliti z vami." mention: "Mention" message: "Message" no_posts: "ni prispevkov na ogled!" - not_connected: "Niste povezani s/z %{name}" + not_connected: "S to osebo ne delite" recent_posts: "Zadnje objave" recent_public_posts: "Zadnje javne objave" return_to_aspects: "Vrnite se na vašo stran s skupinami" - similar_contacts: "podobni stiki" + see_all: "See all" start_sharing: "začni deliti" to_accept_or_ignore: "sprejmite ali zavrnite." you_have_no_tags: "you have no tags!" @@ -471,13 +471,13 @@ sl: error: "pri povezovanju s servisom je prišlo do napake" finder: friends: - few: "%{count} friends" + few: "%{count} prijateljev" many: "%{count} friends" - one: "1 friend" - other: "%{count} friends" - zero: "no friends" - invite_your_friends_from: "Invite your friends from %{service}" - not_connected: "not connected" + one: "1 prijatelj" + other: "%{count} prijateljev" + zero: "brez prijateljev" + invite_your_friends_from: "Povabi prijatelje iz %{service}" + not_connected: "ni povezano" index: connect_to_facebook: "Poveži se s facebook" connect_to_twitter: "Poveži se s twitter" @@ -486,11 +486,11 @@ sl: logged_in_as: "prijavljeni ste kot" really_disconnect: "prekinem povezavo s servisom %{service}?" inviter: - click_link_to_accept_invitation: "Click this link to accept your invitation" - join_me_on_diaspora: "Join me on DIASPORA*" + click_link_to_accept_invitation: "Kliknite na povezavo za potrditev vašega povabila" + join_me_on_diaspora: "Pridruži se mi na DIASPORI*" remote_friend: - invite: "invite" - resend: "resend" + invite: "povabi" + resend: "pošlji ponovno" settings: "Nastavitve" shared: add_contact: @@ -506,12 +506,12 @@ sl: logged_in_as: "logged in as %{name}" your_aspects: "your aspects" invitations: - by_email: "by Email" + by_email: "po e-pošti" dont_have_now: "Trenutno nimate povabil, vendar jih lahko v kratkem pričakujete!" - from_facebook: "From Facebook" + from_facebook: "iz Facebook-a" invitations_left: "(še %{count})" invite_someone: "Povabi osebo" - invite_your_friends: "Invite your friends" + invite_your_friends: "Povabi prijatelje" invites: "Povabila" invites_closed: "Za ta 'Diaspora pod' so povabila trenutno onemogočena." notification: @@ -531,11 +531,11 @@ sl: posting: "Objavljam..." public: "Public" publishing_to: "publishing to: " - share: "Deli" + share: "Objavi" share_with: "deli s/z" - whats_on_your_mind: "what's on your mind?" + whats_on_your_mind: "bi kaj želeli sporočiti?" reshare: - reshare: "Deli znova" + reshare: "Objavi še v" stream_element: dislike: "I dislike this" like: "I like this" @@ -572,7 +572,7 @@ sl: change_password: "Spremeni geslo" close_account: "Zapri uporabniški račun" comment_on_post: "...someone comments on your post?" - current_password: "Current password" + current_password: "Trenutno geslo" download_photos: "prenesi slike" download_xml: "prenesi v xml" edit_account: "Uredi uporabniški račun" @@ -580,7 +580,7 @@ sl: mentioned: "...you are mentioned in a post?" new_password: "Novo geslo" private_message: "...you receive a private message?" - receive_email_notifications: "Želite prejemati obvestila po e-pošti?" + receive_email_notifications: "Želite prejemati obvestila po e-pošti, ko..." request_acceptence: "...your share request is accepted?" request_received: "...you receive a new share request?" your_email: "Vaš e-naslov" diff --git a/config/locales/diaspora/sv.yml b/config/locales/diaspora/sv.yml index 8d62154d4..f650ef3cd 100644 --- a/config/locales/diaspora/sv.yml +++ b/config/locales/diaspora/sv.yml @@ -354,7 +354,7 @@ sv: recent_posts: "Postat nyligen" recent_public_posts: "Senaste publika inlägg" return_to_aspects: "Återgå till översikten" - similar_contacts: "liknande kontakter" + see_all: "See all" start_sharing: "börja dela" to_accept_or_ignore: "for att acceptera eller ignorera." you_have_no_tags: "du har inga taggar!" diff --git a/config/locales/diaspora/tr.yml b/config/locales/diaspora/tr.yml index 89223699c..effa57213 100644 --- a/config/locales/diaspora/tr.yml +++ b/config/locales/diaspora/tr.yml @@ -354,7 +354,7 @@ tr: recent_posts: "Recent Posts" recent_public_posts: "Recent Public Posts" return_to_aspects: "Return to your aspects page" - similar_contacts: "similar contacts" + see_all: "See all" start_sharing: "start sharing" to_accept_or_ignore: "kabul et veya yoksay." you_have_no_tags: "you have no tags!" diff --git a/config/locales/diaspora/zh-CN.yml b/config/locales/diaspora/zh-CN.yml new file mode 100644 index 000000000..d8d8fff53 --- /dev/null +++ b/config/locales/diaspora/zh-CN.yml @@ -0,0 +1,617 @@ +# Copyright (c) 2010, Diaspora Inc. This file is +# licensed under the Affero General Public License version 3 or later. See +# the COPYRIGHT file. + + +zh-CN: + _comments: "评论" + _home: "首页" + _photos: "照片" + _services: "服务" + account: "帐号" + activerecord: + errors: + models: + contact: + attributes: + person_id: + taken: "在好友中必须是唯一的。" + person: + attributes: + diaspora_handle: + taken: "已被注册。" + request: + attributes: + from_id: + taken: "与已存在的请求重复。" + user: + attributes: + email: + taken: "已被注册。" + person: + invalid: "不合法。" + username: + taken: "已被注册。" + ago: "%{time}前" + all_aspects: "所有情景" + application: + helper: + unknown_person: "未知用户" + video_title: + unknown: "未知影片标题" + are_you_sure: "你确定吗?" + aspect_memberships: + destroy: + failure: "从情景中移除好友失败" + no_membership: "在情景中找不到选择的好友" + success: "从情景中移除好友成功" + aspects: + add_to_aspect: + failure: "将好友添加到情景失败。" + success: "将好友添加到情景成功。" + aspect_contacts: + done_editing: "编辑完成" + aspect_stream: + activity: "活跃程度" + post_time: "发布时间" + sort_by: "排序方式:" + contacts_not_visible: "此情景中的好友相互不可见。" + contacts_visible: "此情景中的好友相互可见。" + create: + failure: "添加情景失败。" + success: "添加新情景 %{name} 成功" + destroy: + failure: "无法删除 %{name} ,它不是空的。" + success: "删除 %{name} 成功。" + edit: + add_existing: "添加好友" + aspect_list_is_not_visible: "情景中的好友不能看见本情景的好友列表" + aspect_list_is_visible: "情景中的好友能够看见本情景的好友列表" + confirm_remove_aspect: "你确定要删除这个情景?" + done: "完成" + make_aspect_list_visible: "是否让其他人可以看见本情景的好友列表?" + remove_aspect: "删除这个情景" + rename: "重命名" + update: "更新" + updating: "更新中" + few: "%{count}个情景" + helper: + are_you_sure: "您确定要删除这个情景?" + aspect_not_empty: "此情景不是空的" + remove: "删除" + index: + handle_explanation: "这是您的 diaspora 帐号, 就像是邮箱一样,你可以把它提供给想好友您的人。" + no_contacts: "没有任何好友" + post_a_message: "发布站内信>>" + manage: + add_a_new_aspect: "添加情景" + add_a_new_contact: "添加新的好友" + drag_to_add: "拖动以添加好友" + manage_aspects: "情景管理" + no_requests: "没有新请求" + requests: "请求" + many: "%{count}个情景" + move_contact: + error: "好友移动错误:%{inspect}" + failure: "%{inspect}没有成功" + success: "好友成功添加到新情景" + new_aspect: + create: "添加" + name: "名称" + no_posts_message: + start_talking: "还没人发布过内容。你发布第一条吧!" + one: "1个情景" + other: "%{count}个情景" + seed: + family: "家人" + work: "同事" + show: + edit_aspect: "编辑情景" + update: + failure: "情景 %{name} 名称太长了,不能保存" + success: "情景 %{name} 编辑成功。" + zero: "没有情景" + back: "后退" + bookmarklet: + explanation: "%{link} 收藏这个链接,即可随时发布新内容" + explanation_link_text: "发布到Diaspora" + post_something: "发布些新内容到Diaspora" + post_success: "发布完成!关闭中!" + cancel: "取消" + comments: + few: "%{count}条回复" + many: "%{count}条回复" + new_comment: + comment: "发布回复" + commenting: "回复发布中……" + one: "1条回复" + other: "%{count}条回应" + zero: "没有回复" + contacts: + create: + failure: "添加好友失败" + destroy: + failure: "与 %{name} 取消好友关系失败" + success: "与 %{name} 取消好友关系成功" + few: "%{count}个好友" + many: "%{count}个好友" + one: "1个好友" + other: "%{count}个好友" + share_with_pane: + accepts: "当 %{name} 同意请求后,你们就开始看到彼此在Diaspora上发布的内容" + add_new_aspect: "添加到新的情景" + share_with: "与 %{name} 分享" + zero: "没有好友" + conversations: + create: + sent: "消息发送成功" + destroy: + success: "消息移除成功" + helper: + new_messages: + few: "%{count}条新消息" + many: "%{count}条新消息" + one: "1条新消息" + other: "%{count}条新消息" + zero: "没有新消息" + index: + create_a_new_message: "发送一条新消息" + inbox: "收件箱" + message_inbox: "消息收件箱" + new_message: "新消息" + no_conversation_selected: "未选择任何对话" + no_messages: "没消息" + new: + send: "发送" + subject: "主题" + to: "收件人" + show: + delete: "删除并中止对话" + reply: "回复" + date: + formats: + birthday: "%m-%d" + birthday_with_year: "%Y-%m-%d" + fullmonth_day: "%B%d日" + delete: "删除" + email: "电子邮件" + error_messages: + helper: + correct_the_following_errors_and_try_again: "修正以下错误后重试。" + invalid_fields: "无效栏目" + fill_me_out: "填写我" + hide: "隐藏" + home: + show: + already_account: "已经有帐号了吗?" + choice: "选择" + choice_explanation: "Diaspora 让你将您的关系以\"情景\"分类。情景是Diaspora首创,用来确保您的照片,经历和笑话,只与您所希望的人分享。" + learn_about_host: "学习如何架设您自己的Diaspora服务器。" + login_here: "从这里登录" + ownership: "所有权" + ownership_explanation: "你拥有您的图片,且不因为分享而失去该权利。在Diaspora,所有你分享的内容,你都持有所有权,你可以控制它们的发布。" + share_what_you_want: "分享您想分享的内容,给您想分享给的人。" + simplicity: "简单" + simplicity_explanation: "Diaspora让分享变得干净而简单,对隐私设置也是这样。以隐私为出发点,Diaspora 让你不必千辛万苦的调整设置,就能保护您的个人信息安全。" + tagline_first_half: "分享您想分享的内容," + tagline_second_half: "给您想分享给的人。" + invitations: + check_token: + not_found: "找不到该邀请码" + create: + already_contacts: "你已经将他加为好友了" + already_sent: "你邀请过这个人了。" + no_more: "你没有邀请函了。" + rejected: "下列电子信箱有问题: " + sent: "邀请函已经寄给: " + edit: + sign_up: "注册" + new: + already_invited: "已邀请过" + aspect: "情景" + comma_seperated_plz: "你可以输入多个邮箱,输入多个时以逗号分隔。" + if_they_accept_info: "如果他们接受,就会自动被加入到您所邀请的情景中。" + invite_someone_to_join: "邀请好友来加入到Diaspora!" + personal_message: "个人信息" + resend: "重寄" + send_an_invitation: "发送邀请函" + send_invitation: "发送邀请函" + to: "收件人" + layouts: + application: + have_a_problem: "遇到问题?在这里可以找到解决方案" + powered_by: "Powered by DIASPORA*" + public_feed: "%{name} 的 Diaspora RSS Feed" + toggle: "切换为手机网页" + whats_new: "有什么新内容?" + your_aspects: "您的情景" + header: + blog: "博客" + code: "源码" + login: "登录" + logout: "登出" + profile: "个人档案" + settings: "设置" + likes: + likes: + people_dislike_this: + few: "有%{count}人觉得不好" + many: "有%{count}人觉得不好" + one: "有1个人觉得不好" + other: "有%{count}个人觉得不好" + zero: "没有人觉得不好" + people_like_this: + few: "有%{count}个人觉得好" + many: "有%{count}个人觉得好" + one: "有1个人觉得好" + other: "有%{count}个人觉得好" + zero: "没有人觉得好" + more: "更多" + next: "下一步" + no_results: "没有找到符合条件的内容" + notifications: + also_commented: "也在 %{post_author} 处发布了评论" + also_commented_deleted: "对已删除的内容发布了评论" + comment_on_post: "发布了评论,在您的" + deleted: "删除成功" + helper: + new_notifications: + few: "%{count}个新消息" + many: "%{count}个新消息" + one: "1个新消息" + other: "%{count}个新消息" + zero: "没有新消息" + index: + and: "和" + and_others: "和其他%{number}个人" + mark_all_as_read: "全部标示为已读" + notifications: "消息" + mentioned: "在他发布的内容中提到了你" + new_request: "想要与您分享。" + post: "日志" + private_message: "写了一则消息给您。" + request_accepted: "已同意和您分享。" + notifier: + also_commented: + commented: "也对 %{post_author} 的贴文发布了意见:" + sign_in: "登录后可以查看。" + subject: "%{name} 也评论了 %{post_author} 发布的内容。" + comment_on_post: + commented: "对评论了您发布的内容:" + sign_in: "登录后可以查看。" + subject: "%{name} 评论了您发布的内容。" + diaspora: "diaspora邮件机器人" + hello: "您好 %{name}!" + love: "衷心祝福," + manage_your_email_settings: "管理邮件设置" + mentioned: + mentioned: "在 Diaspora* 发布的内容中提到了您:" + sign_in: "登录后可以查看。" + subject: "%{name} 在 Diaspora* 上发布的内容中提到了您" + new_request: + just_sent_you: "刚刚在 Diaspora* 上与向您发送了好友请求" + sign_in: "由此登录" + subject: "%{from} 想与您在 Diaspora* 上建立好友请求" + try_it_out: "您赶紧来查看一下吧。" + private_message: + message_subject: "主题: %{subject}" + private_message: "已发送了私人信息给您:" + sign_in: "登录进来看看。" + subject: "%{name} 在 Diaspora* 给您发送了私人信息" + request_accepted: + accepted: "已接受了您的好友请求!" + sign_in: "由此登录" + subject: "%{name} 已在 Diaspora* 接收了您的好友请求" + single_admin: + admin: "为您服务的 Diaspora 管理员" + subject: "关于您 Diaspora 帐号的信息:" + thanks: "谢谢," + ok: "确定" + or: "或" + password: "密码" + password_confirmation: "密码确认" + people: + add_contact_small: + add_contact_from_tag: "从标签添加好友" + aspect_list: + edit_membership: "编辑所属情景" + few: "%{count}个好友" + helper: + people_on_pod_are_aware_of: " Pod上已知的人" + results_for: " %{params}的搜索结果" + index: + couldnt_find_them_send_invite: "找不到他们?邀请他们加入Diaspora吧!" + no_one_found: "……找不到任何内容。" + no_results: "嘿! 搜索必须要有目标呀。" + results_for: "搜索结果:" + many: "%{count}个好友" + one: "1个好友" + other: "%{count}个好友" + person: + add_contact: "加为好友" + already_connected: "已加为好友" + pending_request: "请求等候中" + thats_you: "这是你自己!" + profile_sidebar: + bio: "自我介绍" + born: "生日" + cannot_remove: "无法将好友从他所在的最后一个情景中移除。(如果你想与这个人断绝连接,你可以解除与他的好友关系。)" + edit_my_profile: "编辑我的个人档案" + gender: "性别" + in_aspects: "所属情景" + location: "位置" + remove_contact: "解除好友关系" + remove_from: "要从 %{aspect} 删除 %{name} 吗?" + show: + add_some: "添加一些" + does_not_exist: "好友不存在!" + edit: "编辑" + incoming_request: "%{name} 希望能与您分享" + mention: "提及" + message: "消息" + no_posts: "没有内容可以显示!" + not_connected: "你没有与他分享" + recent_posts: "最近的内容" + recent_public_posts: "最近的公开内容" + return_to_aspects: "回到您的情景主页" + see_all: "查看全部" + start_sharing: "开始分享" + to_accept_or_ignore: "接受或忽略它。" + you_have_no_tags: "您没有标签!" + webfinger: + fail: "抱歉,找不到 %{handle}。" + zero: "没有联络人" + photos: + create: + integrity_error: "照片上传失败。你确定它是图片吗?" + runtime_error: "照片上传失败。你确定有扣安全带吗?" + type_error: "照片上传失败。你确定有选择任何图片吗?" + destroy: + notice: "照片删除成功。" + edit: + editing: "编辑中" + new: + back_to_list: "回列表" + new_photo: "新照片" + post_it: "发布!" + new_photo: + empty: "文件 {file} 是空的,请重新选择文件,并且不要选中它。" + invalid_ext: "不支持文件 {file} 的格式。只接受{extensions}。" + size_error: "文件 {file} 太大了,上限是 {sizeLimit}。" + new_profile_photo: + or_select_one: "或从既有照片中挑选一张" + upload: "上传新的头像!" + photo: + view_all: "查看 %{name} 所有的照片" + show: + collection_permalink: "相册的永久链接" + delete_photo: "删除照片" + edit: "编辑" + edit_delete_photo: "编辑照片描述或删除照片" + make_profile_photo: "选为个人头像" + original_post: "原式内容" + permalink: "永久链接" + update_photo: "更新照片" + view: "查看" + update: + error: "照片更新失败。" + notice: "照片更新成功。" + post_visibilites: + update: + post_hidden: "隐藏 %{name} 的内容成功" + posts: + doesnt_exist: "内容不存在!" + previous: "上一步" + profile: "个人档案" + profiles: + edit: + allow_search: "允许别人在 Diaspora* 中搜索到你" + edit_profile: "编辑个人档案" + first_name: "名" + last_name: "姓" + update_profile: "更新个人档案" + your_bio: "您的自我介绍" + your_birthday: "您的生日" + your_gender: "您的性别" + your_location: "您的位置" + your_name: "您的名字" + your_photo: "您的照片" + your_private_profile: "您的私人档案" + your_public_profile: "您的公开档案" + your_tags: "你: 可以有5个“#标签”" + your_tags_placeholder: "比如 #diaspora #烫发 #猫咪 #音乐" + update: + failed: "个人档案更新失败" + updated: "个人档案更新成功" + registrations: + closed: "本 Diaspora pod 不开放注册。" + create: + success: "你已成功加入 Diaspora 了!" + edit: + cancel_my_account: "取消我的帐号" + edit: "编辑 %{name}" + leave_blank: "(不想变更时请留空)" + password_to_confirm: "(我们需要您现在的密码以确认您要变更)" + unhappy: "不满意?" + update: "更新" + new: + enter_email: "输入电子邮箱" + enter_password: "输入密码" + enter_password_again: "再输入一遍密码" + enter_username: "选个帐号称(名称只能包含字母,数字和下划线“_”)" + sign_up: "注册" + sign_up_for_diaspora: "注册使用 Diaspora" + requests: + create: + sending: "发送中" + sent: "您已经请求与 %{name} 分享。他们下次登入 Diaspora 时就会看见您的请求。" + destroy: + error: "请选择一个情景!" + ignore: "忽略建立好友的请求。" + success: "你们现在互相分享了。" + helper: + new_requests: + few: "%{count}个新请求!" + many: "%{count}个新请求!" + one: "新的请求!" + other: "%{count}个新请求!" + zero: "没有新请求" + manage_aspect_contacts: + existing: "好友编辑" + manage_within: "管理好友:" + new_request_to_person: + sent: "发送成功!" + search: "搜索" + services: + create: + success: "验证成功。" + destroy: + success: "验证删除成功。" + failure: + error: "与该服务连接时有错误" + finder: + friends: + few: "%{count}个朋友" + many: "%{count}个朋友" + one: "1个朋友" + other: "%{count}个朋友" + zero: "没有朋友" + invite_your_friends_from: "邀请您在 %{service} 的朋友" + not_connected: "未连接" + index: + connect_to_facebook: "与 facebook 连接" + connect_to_twitter: "与 twitter 连接" + disconnect: "断开连接" + edit_services: "编辑服务" + logged_in_as: "登录为" + really_disconnect: "切断与 %{service} 的连接?" + inviter: + click_link_to_accept_invitation: "点击这个链接以接受邀请" + join_me_on_diaspora: "跟我一起加入 DIASPORA*" + remote_friend: + invite: "邀请" + resend: "重新发送" + settings: "设置" + shared: + add_contact: + create_request: "用 Diaspora 帐号搜索" + diaspora_handle: "diaspora@handle.org" + enter_a_diaspora_username: "输入 Diaspora 帐号:" + know_email: "知道他们的电子信箱吗? 你可以邀请他们加入。" + your_diaspora_username_is: "您的 Diaspora 帐号是: %{diaspora_handle}" + contact_list: + all_contacts: "全部好友" + cannot_remove: "无法将好友从他所在的最后一个情景中移除。(如果你想与这个人断绝连结,你可以解除与他的好友关系。)" + footer: + logged_in_as: "已用 %{name} 登录" + your_aspects: "您的情景" + invitations: + by_email: "通过电子邮件" + dont_have_now: "目前你还不能邀请任何人,但很快就可以了!" + from_facebook: "从 Facebook" + invitations_left: "(剩余%{count}张)" + invite_someone: "邀请别人" + invite_your_friends: "邀请您的好友" + invites: "邀请" + invites_closed: "目前本 Diaspora pod 不开放邀请功能" + notification: + new: "%{from} 有新的 %{type}" + public_explain: + logged_in: "成功登录到 %{service}" + manage: "管理已连线的服务" + outside: "不使用 Diaspora 的人也能看到公开讯息。" + title: "设定连线服务" + publisher: + add_photos: "添加照片" + all: "全部" + all_contacts: "全部的好友" + click_to_share_with: "点击后就可以分享: " + make_public: "公开" + post_a_message_to: "在 %{aspect} 发布讯息" + posting: "发布中……" + public: "公开" + publishing_to: "发布至:" + share: "分享" + share_with: "与他分享:" + whats_on_your_mind: "你想到了什么?" + reshare: + reshare: "重新分享" + stream_element: + dislike: "不喜欢" + like: "喜欢" + status_messages: + create: + success: "成功推荐了: %{names}" + destroy: + failure: "删除内容失败" + helper: + no_message_to_display: "没有信息可显示。" + new: + mentioning: "提及发布中: %{person}" + show: + destroy: "删除" + not_found: "抱歉,找不到该内容。" + permalink: "静态连接" + stream_helper: + hide_comments: "隐藏评论" + show_comments: "显示所有评论" + tags: + show: + nobody_talking: "尚还没有人在讨论 %{tag}。" + people_tagged_with: "标记为 %{tag} 的人" + posts_tagged_with: "标记为 #%{tag} 的内容" + the_world: "全世界" + undo: "撤消?" + username: "帐号" + users: + destroy: "帐号关闭成功。" + edit: + also_commented: "……当有人也对您的好友的内容发表评论时?" + change: "更改" + change_language: "更改语言" + change_password: "更改密码" + close_account: "关闭帐号" + comment_on_post: "……当有人对您的内容发表评论时?" + current_password: "当前密码" + download_photos: "下载我的照片" + download_xml: "下载我的 xml" + edit_account: "编辑帐号" + export_data: "资料导出" + mentioned: "……当贴文中提到您时?" + new_password: "新密码" + private_message: "……当收到私人信息时?" + receive_email_notifications: "是否要在以下情况收到电子邮件通知……" + request_acceptence: "……当请求跟人分享被接受时?" + request_received: "……当收到有人想与您分享的新请求时?" + your_email: "您的电子邮箱" + your_handle: "您的 diaspora 帐号" + getting_started: + connect_on_diaspora: "连接 Diaspora" + connect_services: "连接至你使用的其他服务" + could_not_find_anyone: "在 Diaspora* 上找不到任何朋友?请使用朋友搜索器来邀请他们。" + edit_profile: "编辑个人档案" + finished: "完成!" + save_and_continue: "保存并继续" + signup_steps: "完全下面三个步骤以完成注册:" + skip: "跳过使用入门" + step_2: + find_your_friends_on_diaspora: "你想在 Diaspora 上联系 Facebook 上的朋友吗?" + skip: "跳过" + step_3: + finish: "完成" + people_already_on_diaspora: "已使用 Diaspora 的人" + welcome: "欢迎来到 Diaspora!" + public: + does_not_exist: "不存在 %{username} 这个用户!" + update: + email_notifications_changed: "邮件通知更改成功" + language_changed: "语言更改成功" + language_not_changed: "语言更改失败" + password_changed: "密码更改成功" + password_not_changed: "密码更改失败" + webfinger: + fetch_failed: "获取 %{profile_url} 的 webfinger 个人档案失败" + hcard_fetch_failed: "获取 %{account} 的 hcard 资料时发生错误" + no_person_constructed: "从这份 hcard 资料无法组建出联络人。" + not_enabled: "%{account} 的主机似乎没有启用 webfinger" + xrd_fetch_failed: "从 %{account} 这个帐号取得 xrd 时发生错误" diff --git a/config/locales/diaspora/zh-TW.yml b/config/locales/diaspora/zh-TW.yml index ca0c61f72..f04bb23ca 100644 --- a/config/locales/diaspora/zh-TW.yml +++ b/config/locales/diaspora/zh-TW.yml @@ -266,7 +266,7 @@ zh-TW: and_others: "和其他%{number}個人" mark_all_as_read: "全部標示為已讀" notifications: "消息" - mentioned: "提到了你, 在他們的" + mentioned: "在貼文中提到了你" new_request: "想要跟你分享." post: "貼文" private_message: "寫了一則訊息給你." @@ -354,7 +354,7 @@ zh-TW: recent_posts: "近來貼文" recent_public_posts: "近來公開貼文" return_to_aspects: "回你的面向主頁" - similar_contacts: "相似的聯繫" + see_all: "看全部" start_sharing: "開始分享" to_accept_or_ignore: "接受或不管它." you_have_no_tags: "你沒有標籤!" @@ -520,7 +520,7 @@ zh-TW: logged_in: "已登入至 %{service}" manage: "管理已連線的服務" outside: "不使用 Diaspora 的人也能看到公開訊息." - title: "你將要發表公開訊息!" + title: "設定連線服務" publisher: add_photos: "加入相片" all: "全部" diff --git a/config/locales/diaspora/zh.yml b/config/locales/diaspora/zh.yml deleted file mode 100644 index 94f617f5f..000000000 --- a/config/locales/diaspora/zh.yml +++ /dev/null @@ -1,617 +0,0 @@ -# Copyright (c) 2010, Diaspora Inc. This file is -# licensed under the Affero General Public License version 3 or later. See -# the COPYRIGHT file. - - -zh: - _comments: "评论" - _home: "首页" - _photos: "照片" - _services: "服务" - account: "帐户" - activerecord: - errors: - models: - contact: - attributes: - person_id: - taken: "must be unique among this user's contacts." - person: - attributes: - diaspora_handle: - taken: "is already taken." - request: - attributes: - from_id: - taken: "is a duplicate of a pre-existing request." - user: - attributes: - email: - taken: "is already taken." - person: - invalid: "is invalid." - username: - taken: "is already taken." - ago: "%{time}以前" - all_aspects: "All aspects" - application: - helper: - unknown_person: "陌生人" - video_title: - unknown: "未知的视频标题" - are_you_sure: "你确定吗?" - aspect_memberships: - destroy: - failure: "Failed to remove person from aspect" - no_membership: "Could not find the selected person in that aspect" - success: "Successfully removed person from aspect" - aspects: - add_to_aspect: - failure: "无法把联系人加入分组。" - success: "联系人已成功加入分组。" - aspect_contacts: - done_editing: "编辑完成" - aspect_stream: - activity: "activity" - post_time: "post time" - sort_by: "sort by:" - contacts_not_visible: "Contacts in this aspect will not be able to see each other." - contacts_visible: "Contacts in this aspect will be able to see each other." - create: - failure: "分组创建失败。" - success: "您的新分组%{name}已创建成功" - destroy: - failure: "%{name} is not empty and could not be removed." - success: "成功删除%{name}。" - edit: - add_existing: "增加一个现有联系人" - aspect_list_is_not_visible: "aspect list is hidden to others in aspect" - aspect_list_is_visible: "aspect list is visible to others in aspect" - confirm_remove_aspect: "你确定你要删除这个分组吗?" - done: "Done" - make_aspect_list_visible: "make aspect list visible?" - remove_aspect: "删除这个分组" - rename: "改名" - update: "update" - updating: "updating" - few: "%{count} aspects" - helper: - are_you_sure: "您确定要删除这个分组吗?" - aspect_not_empty: "此分组非空" - remove: "移除" - index: - handle_explanation: "这是你在Diaspora的地址,就像电子邮件地址一样,你可以把这个发送给人们以便他们找到你。" - no_contacts: "没有联系人" - post_a_message: "post a message >>" - manage: - add_a_new_aspect: "增加一个新的分组" - add_a_new_contact: "新增一个联系人" - drag_to_add: "Drag to add people" - manage_aspects: "管理分组" - no_requests: "没有新的邀请" - requests: "邀请" - many: "%{count} aspects" - move_contact: - error: "Error moving contact: %{inspect}" - failure: "didn't work %{inspect}" - success: "该用户已成功转移到新的分组" - new_aspect: - create: "创建" - name: "名称" - no_posts_message: - start_talking: "还没人冒泡,说点什么吧!" - one: "1 aspect" - other: "%{count} aspects" - seed: - family: "家庭" - work: "工作" - show: - edit_aspect: "编辑分组" - update: - failure: "您的分组%{name}因名字太长而无法保存。" - success: "您的%{name}分组编辑完成。" - zero: "no aspects" - back: "后退" - bookmarklet: - explanation: "%{link} from anywhere by bookmarking this link." - explanation_link_text: "Post to Diaspora" - post_something: "Post something to Diaspora" - post_success: "Posted! Closing!" - cancel: "取消" - comments: - few: "%{count} comments" - many: "%{count} comments" - new_comment: - comment: "评论" - commenting: "评论中" - one: "1 comment" - other: "%{count} comments" - zero: "no comments" - contacts: - create: - failure: "Failed to create contact" - destroy: - failure: "Failed to disconnect from %{name}" - success: "Successfully disconnected from %{name}" - few: "%{count}个联系人" - many: "%{count} contacts" - one: "1个联系人" - other: "%{count}个联系人" - share_with_pane: - accepts: "Once %{name} accepts, you'll start seeing each other's posts on Diaspora" - add_new_aspect: "add to new aspect" - share_with: "Start sharing with %{name}" - zero: "没有联系人" - conversations: - create: - sent: "Message sent" - destroy: - success: "Conversation successfully removed" - helper: - new_messages: - few: "%{count} new messages" - many: "%{count} new messages" - one: "1 new messages" - other: "%{count} new messages" - zero: "no new messages" - index: - create_a_new_message: "create a new message" - inbox: "Inbox" - message_inbox: "Message Inbox" - new_message: "New Message" - no_conversation_selected: "no conversation selected" - no_messages: "no messages" - new: - send: "Send" - subject: "subject" - to: "to" - show: - delete: "delete and block conversation" - reply: "reply" - date: - formats: - birthday: "%B %d" - birthday_with_year: "%B %d %Y" - fullmonth_day: "%B %d" - delete: "删除" - email: "电子邮件" - error_messages: - helper: - correct_the_following_errors_and_try_again: "请改正下面显示的错误并重试一遍。" - invalid_fields: "无效字段" - fill_me_out: "Fill me out" - hide: "Hide" - home: - show: - already_account: "您已经有一个账号了吗?" - choice: "选择" - choice_explanation: "Diaspora lets you sort your connections into groups called aspects. Unique to Diaspora, aspects ensure that your photos, stories and jokes are shared only with the people you intend." - learn_about_host: "学习如何建立自己的Diaspora服务。" - login_here: "从这里登陆" - ownership: "所属权" - ownership_explanation: "You own your pictures, and you shouldn’t have to give that up just to share them. You maintain ownership of everything you share on Diaspora, giving you full control over how it's distributed." - share_what_you_want: "共享什么、与谁共享,全由您定!" - simplicity: "简单" - simplicity_explanation: "Diaspora makes sharing clean and easy – and this goes for privacy too. Inherently private, Diaspora doesn’t make you wade through pages of settings and options just to keep your profile secure." - tagline_first_half: "分享您愿意分享的," - tagline_second_half: "和你想要的人。" - invitations: - check_token: - not_found: "Invitation token not found" - create: - already_contacts: "您和此人已关联上" - already_sent: "您已给这个人发送过邀请。" - no_more: "您没有其他的邀请了。" - rejected: "下列电子邮件地址有问题: " - sent: "邀请已被发送给:" - edit: - sign_up: "sign_up" - new: - already_invited: "已邀请过了" - aspect: "分组" - comma_seperated_plz: "You can enter multiple email addresses separated by commas." - if_they_accept_info: "一旦邀请被接受,他们就会被加入这个分组。" - invite_someone_to_join: "邀请些人加入Diaspora!" - personal_message: "个人消息" - resend: "Resend" - send_an_invitation: "发送一份邀请" - send_invitation: "发送邀请" - to: "给" - layouts: - application: - have_a_problem: "Have a problem? Find an answer here" - powered_by: "POWERED BY DIASPORA*" - public_feed: "Public Diaspora Feed for %{name}" - toggle: "toggle mobile site" - whats_new: "what's new?" - your_aspects: "your aspects" - header: - blog: "博客" - code: "代码" - login: "登录" - logout: "退出" - profile: "profile" - settings: "settings" - likes: - likes: - people_dislike_this: - few: "%{count} people disliked this" - many: "%{count} people disliked this" - one: "1 person disliked this" - other: "%{count} people disliked this" - zero: "no people disliked this" - people_like_this: - few: "%{count} people liked this" - many: "%{count} people liked this" - one: "1 person liked this" - other: "%{count} people liked this" - zero: "no people liked this" - more: "More" - next: "下一步" - no_results: "No Results Found" - notifications: - also_commented: "also commented on your contact's" - also_commented_deleted: "commented on a deleted post" - comment_on_post: "commented on your" - deleted: "deleted" - helper: - new_notifications: - few: "%{count} new notifications" - many: "%{count} new notifications" - one: "1 new notifications" - other: "%{count} new notifications" - zero: "no new notifications" - index: - and: "and" - and_others: "and %{number} others" - mark_all_as_read: "Mark All as Read" - notifications: "Notifications" - mentioned: "has mentioned you in their" - new_request: "offered to share with you." - post: "发布" - private_message: "sent you a message." - request_accepted: "accepted your share request." - notifier: - also_commented: - commented: "也在%{post_author}的帖子上发表了评论:" - sign_in: "请登录以便查看。" - subject: "%{name}也发表了评论。" - comment_on_post: - commented: "您的帖子有新的评论!" - sign_in: "请登陆以便查看。" - subject: "%{name}在你的帖子上发表了评论。" - diaspora: "diaspora email机器人" - hello: "你好%{name}!" - love: "爱," - manage_your_email_settings: "manage your email settings" - mentioned: - mentioned: "mentioned you in a post:" - sign_in: "Sign in to view it." - subject: "%{name} has mentioned you on Diaspora*" - new_request: - just_sent_you: "刚在Diaspora*上给您发送了一个联系人请求" - sign_in: "请于此登录" - subject: "有从%{from}发送过来的Diaspora*联系人请求" - try_it_out: "您最好认真的查看一下。" - private_message: - message_subject: "Subject: %{subject}" - private_message: "has sent you a private message:" - sign_in: "Sign in to view it." - subject: "%{name} has sent you a private message yon Diaspora*" - request_accepted: - accepted: "已接受您的联系人请求!" - sign_in: "Sign in here" - subject: "%{name}已接受您的好友请求" - single_admin: - admin: "您的Diaspora管理员" - subject: "有关于您的Diaspora帐户的消息:" - thanks: "谢谢。" - ok: "好" - or: "或者" - password: "密码" - password_confirmation: "密码确认" - people: - add_contact_small: - add_contact_from_tag: "add contact from tag" - aspect_list: - edit_membership: "edit aspect membership" - few: "%{count} people" - helper: - people_on_pod_are_aware_of: " people on pod are aware of" - results_for: " results for %{params}" - index: - couldnt_find_them_send_invite: "找不到他们吗?您可以给他们发个加入邀请!" - no_one_found: "...但是找不到任何人。" - no_results: "你好!你得用搜索功能去查找。" - results_for: "搜索结果" - many: "%{count} people" - one: "1 person" - other: "%{count} people" - person: - add_contact: "增加联系人" - already_connected: "已关联" - pending_request: "您的邀请正等待确认" - thats_you: "thats you!" - profile_sidebar: - bio: "自我简介" - born: "生日" - cannot_remove: "无法从分组中删除%{name}。(如果你要和这个人断开联系,你必须得删除这个联系人。)" - edit_my_profile: "编辑我的个人资料" - gender: "性别" - in_aspects: "在分组中" - location: "location" - remove_contact: "删除联系人" - remove_from: "真的要把%{name}从%{aspect}中删除吗?" - show: - add_some: "add some" - does_not_exist: "此人不存在!" - edit: "edit" - incoming_request: "您有一条这个人发的邀请。" - mention: "Mention" - message: "Message" - no_posts: "无贴见人!" - not_connected: "还还没有和%{name}共享" - recent_posts: "最近的帖子" - recent_public_posts: "重新发布一遍公开贴" - return_to_aspects: "返回分组页面" - similar_contacts: "相似联系人" - start_sharing: "start sharing" - to_accept_or_ignore: "接受或者忽略。" - you_have_no_tags: "you have no tags!" - webfinger: - fail: "Sorry, we couldn't find %{handle}." - zero: "no people" - photos: - create: - integrity_error: "图片上传失败,你肯定你上传的是图片吗?" - runtime_error: "Photo upload failed. Are you sure that your seatbelt is fastened?" - type_error: "图片上传失败,你确定你上传的是一张图片吗?" - destroy: - notice: "照片已被删除。" - edit: - editing: "正在编辑中" - new: - back_to_list: "返回列表" - new_photo: "新照片" - post_it: "提交!" - new_photo: - empty: "{file}是一个空文件,请重新选择您要上传的文件并确保之前的空文件不在其中。" - invalid_ext: "{file}包含非法后缀,只有{extensions}这些后缀名是被允许的。" - size_error: "{file}太大,最大值为{sizeLimit}。" - new_profile_photo: - or_select_one: "或者从你已有的相册中挑选一张" - upload: "上传一张新的个人资料头像!" - photo: - view_all: "查看%{name}的所有照片" - show: - collection_permalink: "collection permalink" - delete_photo: "删除照片" - edit: "编辑" - edit_delete_photo: "编辑照片说明 / 删除照片" - make_profile_photo: "make profile photo" - original_post: "Original Post" - permalink: "永久链接" - update_photo: "更新照片" - view: "查看" - update: - error: "照片编辑失败。" - notice: "头像更新成功。" - post_visibilites: - update: - post_hidden: "%{name}'s post has been hidden." - posts: - doesnt_exist: "that post does not exist!" - previous: "后退" - profile: "个人资料" - profiles: - edit: - allow_search: "Allow for people to search for you within Diaspora" - edit_profile: "Edit profile" - first_name: "First name" - last_name: "Last name" - update_profile: "Update Profile" - your_bio: "Your bio" - your_birthday: "Your birthday" - your_gender: "Your gender" - your_location: "Your location" - your_name: "Your name" - your_photo: "Your photo" - your_private_profile: "Your private profile" - your_public_profile: "Your public profile" - your_tags: "You: in 5 #tags" - your_tags_placeholder: "i.e. #diaspora #ironing #kittens #music" - update: - failed: "Failed to update profile" - updated: "Profile updated" - registrations: - closed: "这个Diaspora节点已关闭注册" - create: - success: "您已加入Diaspora!" - edit: - cancel_my_account: "删除我的帐户" - edit: "编辑%{name}" - leave_blank: "(如果您不像做任何更改请留空)" - password_to_confirm: "(我们需要您输入密码以确认您的更改)" - unhappy: "郁闷?" - update: "更新" - new: - enter_email: "输入电子邮箱" - enter_password: "请输入密码" - enter_password_again: "请再输入一遍密码" - enter_username: "请取个用户名(只能包含字母、数字和下划线)" - sign_up: "注册" - sign_up_for_diaspora: "注册一个Diaspora账号" - requests: - create: - sending: "发送中" - sent: "%{name}已请求和您共享信息,下次一登入进Diaspora他们应该就能看到。" - destroy: - error: "请选择一个分组!" - ignore: "忽略联系人邀请。" - success: "你们现在是朋友关系了。" - helper: - new_requests: - few: "%{count} new requests!" - many: "%{count} new requests!" - one: "new request!" - other: "%{count} new requests!" - zero: "no new requests" - manage_aspect_contacts: - existing: "已有联系人" - manage_within: "Manage contacts within" - new_request_to_person: - sent: "已发送!" - search: "搜索" - services: - create: - success: "授权成功。" - destroy: - success: "Successfully deleted authentication." - failure: - error: "请求服务时出现一个错误" - finder: - friends: - few: "%{count} friends" - many: "%{count} friends" - one: "1 friend" - other: "%{count} friends" - zero: "no friends" - invite_your_friends_from: "Invite your friends from %{service}" - not_connected: "not connected" - index: - connect_to_facebook: "关联到Facebook" - connect_to_twitter: "和twitter互通" - disconnect: "断开" - edit_services: "编辑服务" - logged_in_as: "登入为" - really_disconnect: "断开%{service}吗?" - inviter: - click_link_to_accept_invitation: "Click this link to accept your invitation" - join_me_on_diaspora: "Join me on DIASPORA*" - remote_friend: - invite: "invite" - resend: "resend" - settings: "设置" - shared: - add_contact: - create_request: "Find by Diaspora handle" - diaspora_handle: "diaspora@handle.org" - enter_a_diaspora_username: "请输入Diaspora用户名:" - know_email: "你知道他们的电邮地址吗?你可以邀请他们来加入" - your_diaspora_username_is: "你的用户名: %{diaspora_handle}" - contact_list: - all_contacts: "所有联系人" - cannot_remove: "无法把他从上一个分组中移除。(如果你要和这个人断开联系你就必须删除这个联系人。)" - footer: - logged_in_as: "logged in as %{name}" - your_aspects: "your aspects" - invitations: - by_email: "by Email" - dont_have_now: "您现在没有任何邀请,他们正在来的途中,请稍候!" - from_facebook: "From Facebook" - invitations_left: "(%{count} left)" - invite_someone: "邀请某人" - invite_your_friends: "Invite your friends" - invites: "邀请" - invites_closed: "这个Diaspora节点暂时关闭邀请功能" - notification: - new: "New %{type} from %{from}" - public_explain: - logged_in: "已登入%{service}" - manage: "管理相关的服务" - outside: "公开信息可以被Diaspora世界之外的人们看到。" - title: "你即将发布一条公开信息!" - publisher: - add_photos: "增加照片" - all: "所有" - all_contacts: "所有联系人" - click_to_share_with: "Click to share with: " - make_public: "改为公开" - post_a_message_to: "发送信息给%{aspect}这个分组的所有人" - posting: "发布中" - public: "Public" - publishing_to: "publishing to: " - share: "分享" - share_with: "和%{aspect}这个分组中的人分享" - whats_on_your_mind: "what's on your mind?" - reshare: - reshare: "再次分享" - stream_element: - dislike: "I dislike this" - like: "I like this" - status_messages: - create: - success: "Successfully mentioned: %{names}" - destroy: - failure: "Failed to delete post" - helper: - no_message_to_display: "没有消息。" - new: - mentioning: "Mentioning: %{person}" - show: - destroy: "删除" - not_found: "Sorry, we couldn't find that post." - permalink: "永久链接" - stream_helper: - hide_comments: "隐藏评论" - show_comments: "显示所有评论" - tags: - show: - nobody_talking: "Nobody is talking about %{tag} yet." - people_tagged_with: "People tagged with %{tag}" - posts_tagged_with: "Posts tagged with #%{tag}" - the_world: "世界" - undo: "Undo?" - username: "用户名" - users: - destroy: "帐户已成功关闭。" - edit: - also_commented: "...someone also comments on your contact's post?" - change: "修改" - change_language: "改变语言" - change_password: "修改密码" - close_account: "关闭帐户" - comment_on_post: "...someone comments on your post?" - current_password: "Current password" - download_photos: "下载我的照片" - download_xml: "下载我的xml文件" - edit_account: "编辑帐户" - export_data: "导出数据" - mentioned: "...you are mentioned in a post?" - new_password: "新密码" - private_message: "...you receive a private message?" - receive_email_notifications: "愿意接收电子邮件通知吗?" - request_acceptence: "...your share request is accepted?" - request_received: "...you receive a new share request?" - your_email: "您的电子邮件" - your_handle: "Your diaspora handle" - getting_started: - connect_on_diaspora: "Connect on Diaspora" - connect_services: "关联您的其他服务" - could_not_find_anyone: "Could not find any friends on Diaspora*. Use the friend finder to invite them." - edit_profile: "编辑您的个人资料" - finished: "结束!" - save_and_continue: "保存并继续" - signup_steps: "要结束注册流程,请完成下面三个步骤:" - skip: "skip getting started" - step_2: - find_your_friends_on_diaspora: "Would you like to find your Facebook friends on Diaspora?" - skip: "Skip" - step_3: - finish: "Finish" - people_already_on_diaspora: "People already on Diaspora" - welcome: "欢迎来到Diaspora!" - public: - does_not_exist: "%{username}这个用户不存在!" - update: - email_notifications_changed: "电子邮件通知方式已改变" - language_changed: "Language Changed" - language_not_changed: "修改语言设置失败" - password_changed: "Password Changed" - password_not_changed: "Password Change Failed" - webfinger: - fetch_failed: "failed to fetch webfinger profile for %{profile_url}" - hcard_fetch_failed: "there was a problem fetching the hcard for %{account}" - no_person_constructed: "No person could be constructed from this hcard." - not_enabled: "webfinger does not seem to be enabled for %{account}'s host" - xrd_fetch_failed: "there was an error getting the xrd from account %{account}" diff --git a/config/locales/inflections/README.md b/config/locales/inflections/README.md new file mode 100644 index 000000000..1760b806f --- /dev/null +++ b/config/locales/inflections/README.md @@ -0,0 +1,3 @@ +This directory contains the definitions for the [i18n-inflector gem](https://github.com/siefca/i18n-inflector). +Look at the documentation there and our [contributing translations](https://github.com/diaspora/diaspora/wiki/How-to-contribute-translations) wiki page for more informations +and how to contribute. diff --git a/config/locales/javascript/javascript.bg.yml b/config/locales/javascript/javascript.bg.yml new file mode 100644 index 000000000..ee7df8824 --- /dev/null +++ b/config/locales/javascript/javascript.bg.yml @@ -0,0 +1,37 @@ +# Copyright (c) 2010, Diaspora Inc. This file is +# licensed under the Affero General Public License version 3 or later. See +# the COPYRIGHT file. + + +bg: + javascripts: + confirm_dialog: "Сигурни ли сте?" + infinite_scroll: + no_more: "Няма повече публикации." + publisher: + at_least_one_aspect: "Трябва да публикувате в поне един аспект" + search_for: "Търсене за {{name}}" + shared: + contact_list: + cannot_remove: "Лицето не може да бъде премахнато от последния аспект. (Ако желаете да бъде прекратена връзката с лицето е необходимо да премахнете контакта.)" + timeago: + day: "ден" + days: "%d дни" + hour: "около час" + hours: "около %d часа" + minute: "около минута" + minutes: "%d минути" + month: "около месец" + months: "%d месеца" + prefixAgo: "преди" + prefixFromNow: "след" + seconds: "по-малко от минута" + suffixAgo: "" + suffixFromNow: "от сега" + year: "около година" + years: "%d години" + videos: + unknown: "Неизвестен вид видео" + watch: "Гледайте видеото в {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.br.yml b/config/locales/javascript/javascript.br.yml index 9933c9930..49b0e006a 100644 --- a/config/locales/javascript/javascript.br.yml +++ b/config/locales/javascript/javascript.br.yml @@ -6,6 +6,8 @@ br: javascripts: confirm_dialog: "Emaoc'h sur?" + infinite_scroll: + no_more: "No more posts." publisher: at_least_one_aspect: "Dav eo deoc'h embann un arvez da'n nebeutañ" search_for: "Klask war-lerc'h {{name}}" @@ -31,3 +33,5 @@ br: videos: unknown: "Stumm ar video dianav" watch: "Sellet ouzh ar video gant {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.cs.yml b/config/locales/javascript/javascript.cs.yml index c95d25810..0ae0f31b4 100644 --- a/config/locales/javascript/javascript.cs.yml +++ b/config/locales/javascript/javascript.cs.yml @@ -6,6 +6,8 @@ cs: javascripts: confirm_dialog: "Jste si jisti?" + infinite_scroll: + no_more: "Žádné další příspěvky." publisher: at_least_one_aspect: "Musíte publikovat alespoň do jednoho aspektu" search_for: "Hledat {{name}}" @@ -31,3 +33,5 @@ cs: videos: unknown: "Neznámý typ videa" watch: "Podívejte se na tohle video na {{provider}}" + web_sockets: + disconnected: "Websocket je uzavřen, příspěvky již nebude možno sledovat živě." diff --git a/config/locales/javascript/javascript.da.yml b/config/locales/javascript/javascript.da.yml index 1a3b49075..cfa4f0bc7 100644 --- a/config/locales/javascript/javascript.da.yml +++ b/config/locales/javascript/javascript.da.yml @@ -5,13 +5,15 @@ da: javascripts: - confirm_dialog: "Are you sure?" + confirm_dialog: "Er du sikker?" + infinite_scroll: + no_more: "No more posts." publisher: - at_least_one_aspect: "You must publish to at least one aspect" - search_for: "Search for {{name}}" + at_least_one_aspect: "Du skal dele med mindst et aspekt" + search_for: "Søg efter {{name}}" shared: contact_list: - cannot_remove: "Cannot remove person from last aspect. (If you want to disconnect from this person you must remove contact.)" + cannot_remove: "Kan ikke fjerne personen fra sidste aspekt. (Hvis du ikke ønsker at dele med denne person mere må du fjerne ham fra kontakter.)" timeago: day: "en dag" days: "%d dage" @@ -29,5 +31,7 @@ da: year: "ca. et år" years: "%d år" videos: - unknown: "Unknown video type" - watch: "Watch this video on {{provider}}" + unknown: "Ukendt video type" + watch: "Se denne video på {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.de.yml b/config/locales/javascript/javascript.de.yml index 99f245486..1ca5d0c93 100644 --- a/config/locales/javascript/javascript.de.yml +++ b/config/locales/javascript/javascript.de.yml @@ -6,6 +6,8 @@ de: javascripts: confirm_dialog: "Bist du dir sicher?" + infinite_scroll: + no_more: "No more posts." publisher: at_least_one_aspect: "Du musst zumindest zu einem Aspekt posten" search_for: "Nach {{name}} suchen" @@ -31,3 +33,5 @@ de: videos: unknown: "Unbekanntes Videoformat" watch: "Dieses Video auf {{provider}} ansehen" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.el.yml b/config/locales/javascript/javascript.el.yml index 605f401d7..f6e0d2f45 100644 --- a/config/locales/javascript/javascript.el.yml +++ b/config/locales/javascript/javascript.el.yml @@ -6,6 +6,8 @@ el: javascripts: confirm_dialog: "Είστε σίγουρος/η;" + infinite_scroll: + no_more: "No more posts." publisher: at_least_one_aspect: "πρέπει να κάνετε δημοσίευση σε τουλάχιστον μια πτυχή" search_for: "Αναζήτηση για {{name}}" @@ -31,3 +33,5 @@ el: videos: unknown: "Άγνωστος τύπος βίντεο" watch: "Δείτε το βίντεο στο {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.en.yml b/config/locales/javascript/javascript.en.yml index dc52cfc2b..97e3552f2 100644 --- a/config/locales/javascript/javascript.en.yml +++ b/config/locales/javascript/javascript.en.yml @@ -5,6 +5,7 @@ en: javascripts: + confirm_dialog: "Are you sure?" timeago: prefixAgo: "" @@ -31,4 +32,7 @@ en: cannot_remove: "Cannot remove person from last aspect. (If you want to disconnect from this person you must remove contact.)" publisher: at_least_one_aspect: "You must publish to at least one aspect" - + infinite_scroll: + no_more: "No more posts." + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.en_shaw.yml b/config/locales/javascript/javascript.en_shaw.yml index 565cb8630..6ce50d51d 100644 --- a/config/locales/javascript/javascript.en_shaw.yml +++ b/config/locales/javascript/javascript.en_shaw.yml @@ -6,6 +6,8 @@ en_shaw: javascripts: confirm_dialog: "𐑸 𐑿 𐑖𐑻?" + infinite_scroll: + no_more: "𐑯𐑴 𐑥𐑹 𐑐𐑴𐑕𐑑𐑕." publisher: at_least_one_aspect: "𐑿 𐑥𐑳𐑕𐑑 𐑐𐑳𐑚𐑤𐑦𐑖 𐑑 𐑨𐑑 𐑤𐑰𐑕𐑑 𐑢𐑳𐑯 𐑨𐑕𐑐𐑧𐑒𐑑" search_for: "𐑕𐑻𐑗 𐑓𐑹 {{name}}" @@ -31,3 +33,5 @@ en_shaw: videos: unknown: "𐑩𐑯𐑯𐑴𐑯 𐑝𐑦𐑛𐑦𐑴 𐑑𐑲𐑐" watch: "𐑢𐑷𐑗 𐑞𐑦𐑕 𐑝𐑦𐑛𐑦𐑴 𐑪𐑯 {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.eo.yml b/config/locales/javascript/javascript.eo.yml index fddaf15b1..16faceb1c 100644 --- a/config/locales/javascript/javascript.eo.yml +++ b/config/locales/javascript/javascript.eo.yml @@ -6,6 +6,8 @@ eo: javascripts: confirm_dialog: "Are you sure?" + infinite_scroll: + no_more: "No more posts." publisher: at_least_one_aspect: "You must publish to at least one aspect" search_for: "Search for {{name}}" @@ -31,3 +33,5 @@ eo: videos: unknown: "nekonata tipo de videaĵo" watch: "Watch this video on {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.es.yml b/config/locales/javascript/javascript.es.yml index e668e9631..0d8f42b7f 100644 --- a/config/locales/javascript/javascript.es.yml +++ b/config/locales/javascript/javascript.es.yml @@ -6,6 +6,8 @@ es: javascripts: confirm_dialog: "¿Estás seguro?" + infinite_scroll: + no_more: "No hay más publicaciones." publisher: at_least_one_aspect: "Debes publicarlo en al menos un aspecto" search_for: "Buscar a {{name}}" @@ -31,3 +33,5 @@ es: videos: unknown: "Tipo de video desconocido" watch: "Ver este video con {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.eu.yml b/config/locales/javascript/javascript.eu.yml index 1532e2a6a..13782b039 100644 --- a/config/locales/javascript/javascript.eu.yml +++ b/config/locales/javascript/javascript.eu.yml @@ -6,6 +6,8 @@ eu: javascripts: confirm_dialog: "Ziur al zaude?" + infinite_scroll: + no_more: "Mezu gehiagorik ez dago." publisher: at_least_one_aspect: "Gutxienez alderdi batean partekatu behar duzu" search_for: "Bilatu {{name}}" @@ -31,3 +33,5 @@ eu: videos: unknown: "Bideo mota ezezaguna" watch: "Ikusi bideo hau {{provider}}(e)n" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.fi.yml b/config/locales/javascript/javascript.fi.yml index 9cb143768..9e2aaf553 100644 --- a/config/locales/javascript/javascript.fi.yml +++ b/config/locales/javascript/javascript.fi.yml @@ -6,6 +6,8 @@ fi: javascripts: confirm_dialog: "Oletko varma?" + infinite_scroll: + no_more: "No more posts." publisher: at_least_one_aspect: "You must publish to at least one aspect" search_for: "Etsi nimellä {{name}}" @@ -31,3 +33,5 @@ fi: videos: unknown: "Tuntematon videomuoto" watch: "Katso video {{provider}} :ssa" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.fr.yml b/config/locales/javascript/javascript.fr.yml index b8ddcfc2d..433532bb0 100644 --- a/config/locales/javascript/javascript.fr.yml +++ b/config/locales/javascript/javascript.fr.yml @@ -6,6 +6,8 @@ fr: javascripts: confirm_dialog: "Êtes-vous sûr ?" + infinite_scroll: + no_more: "Pas d'autre messages." publisher: at_least_one_aspect: "Vous devez créer au moins un aspect" search_for: "Chercher {{name}}" @@ -31,3 +33,5 @@ fr: videos: unknown: "Type de vidéo inconnu" watch: "Voir cette vidéo sur {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.gl.yml b/config/locales/javascript/javascript.gl.yml index 259b1718e..a43b0dbed 100644 --- a/config/locales/javascript/javascript.gl.yml +++ b/config/locales/javascript/javascript.gl.yml @@ -5,21 +5,21 @@ gl: javascripts: - confirm_dialog: "Seguro?" + confirm_dialog: "Está seguro?" publisher: - at_least_one_aspect: "Tes que publicalo polo menos nun aspecto" + at_least_one_aspect: "Ten que publicalo polo menos nun aspecto." search_for: "Buscar a {{name}}" shared: contact_list: - cannot_remove: "Non podes quitar esta persoa do aspecto. Se te queres desconectar dela tes que borrar o contacto." + cannot_remove: "Non pode quitar esta persoa do aspecto. Se non quere seguir compartindo con ela, elimínea como contacto." timeago: day: "un día" days: "%d días" - hour: "sobre unha hora" - hours: "sobre %d horas" - minute: "sobre un minuto" + hour: "arredor dunha hora" + hours: "arredor de %d horas" + minute: "arredor dun minuto" minutes: "%d minutos" - month: "sobre un mes" + month: "arredor dun mes" months: "%d meses" prefixAgo: "Hai" prefixFromNow: "" @@ -29,5 +29,5 @@ gl: year: "sobre un ano" years: "%d anos" videos: - unknown: "Tipo de video descoñecido" - watch: "Ver video en {{provider}}" + unknown: "Tipo de vídeo descoñecido" + watch: "Ver o vídeo en {{provider}}" diff --git a/config/locales/javascript/javascript.he.yml b/config/locales/javascript/javascript.he.yml index 5ddbb542e..b6c8cb35a 100644 --- a/config/locales/javascript/javascript.he.yml +++ b/config/locales/javascript/javascript.he.yml @@ -6,6 +6,8 @@ he: javascripts: confirm_dialog: "בבטחה?" + infinite_scroll: + no_more: "אין רשומות נוספות." publisher: at_least_one_aspect: "עליך לפרסם היבט אחד לפחות" search_for: "חיפוש אחר {{name}}" @@ -31,3 +33,5 @@ he: videos: unknown: "סוג הווידאו אינו ידוע" watch: "צפייה בסרטון וידאו זה באתר {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.hu.yml b/config/locales/javascript/javascript.hu.yml index 160cdde51..a2753e7be 100644 --- a/config/locales/javascript/javascript.hu.yml +++ b/config/locales/javascript/javascript.hu.yml @@ -6,6 +6,8 @@ hu: javascripts: confirm_dialog: "Biztos vagy benne?" + infinite_scroll: + no_more: "Nincs több bejegyzés." publisher: at_least_one_aspect: "Minimum 1 csoportnak meg kell osztanod!" search_for: "{{name}} keresése." @@ -31,3 +33,5 @@ hu: videos: unknown: "Ismeretlen videó tipus" watch: "Videó megtekintése itt: {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.id.yml b/config/locales/javascript/javascript.id.yml index a85a3befa..74a1b23b1 100644 --- a/config/locales/javascript/javascript.id.yml +++ b/config/locales/javascript/javascript.id.yml @@ -6,6 +6,8 @@ id: javascripts: confirm_dialog: "Are you sure?" + infinite_scroll: + no_more: "No more posts." publisher: at_least_one_aspect: "You must publish to at least one aspect" search_for: "Search for {{name}}" @@ -31,3 +33,5 @@ id: videos: unknown: "Unknown video type" watch: "Watch this video on {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.is.yml b/config/locales/javascript/javascript.is.yml index 78044ee7c..1fbb83ba0 100644 --- a/config/locales/javascript/javascript.is.yml +++ b/config/locales/javascript/javascript.is.yml @@ -6,6 +6,8 @@ is: javascripts: confirm_dialog: "Ertu viss?" + infinite_scroll: + no_more: "No more posts." publisher: at_least_one_aspect: "You must publish to at least one aspect" search_for: "Search for {{name}}" @@ -31,3 +33,5 @@ is: videos: unknown: "Óþekkt vídeó tegund" watch: "Horfa á þetta vídeó á {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.it.yml b/config/locales/javascript/javascript.it.yml index 2ce16a564..b538f9c61 100644 --- a/config/locales/javascript/javascript.it.yml +++ b/config/locales/javascript/javascript.it.yml @@ -6,8 +6,10 @@ it: javascripts: confirm_dialog: "Sei sicuro?" + infinite_scroll: + no_more: "Non ci sono altri post." publisher: - at_least_one_aspect: "You must publish to at least one aspect" + at_least_one_aspect: "Devi condividere almeno con un aspetto" search_for: "Ricerca per {{name}}" shared: contact_list: @@ -31,3 +33,5 @@ it: videos: unknown: "Tipo di video sconosciuto" watch: "Guarda questo video su {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.ja.yml b/config/locales/javascript/javascript.ja.yml index 274f87fe5..8cc5332b8 100644 --- a/config/locales/javascript/javascript.ja.yml +++ b/config/locales/javascript/javascript.ja.yml @@ -1,18 +1,37 @@ -ja: - javascripts: - timeago: +# Copyright (c) 2010, Diaspora Inc. This file is +# licensed under the Affero General Public License version 3 or later. See +# the COPYRIGHT file. + + +ja: + javascripts: + confirm_dialog: "本当にいいですか。" + infinite_scroll: + no_more: "投稿は以上です。" + publisher: + at_least_one_aspect: "少なくても一つのアスペクトへ投稿しなければなりません" + search_for: "{{name}}を検索する" + shared: + contact_list: + cannot_remove: "残り最後のアスペクトから人を除外することができません。(人とのつながりを解除したい場合は連絡先を削除してください。)" + timeago: + day: "1日" + days: "%d日" + hour: "大体1時間" + hours: "大体%d時間" + minute: "約1分" + minutes: "%d分" + month: "大体1ヶ月" + months: "%dヶ月" prefixAgo: "" prefixFromNow: "今から" + seconds: "1分未満" suffixAgo: "前" suffixFromNow: "後" - seconds: "ほんの数秒" - minute: "約一分" - minutes: "%d 分" - hour: "大体一時間" - hours: "大体 %d 時間位" - day: "一日" - days: "%d 日ほど" - month: "大体一ヶ月" - months: "%d ヶ月ほど" - year: "丁度一年(虎舞流w)" - years: "%d 年" + year: "大体1年" + years: "%d年" + videos: + unknown: "動画の種類が不明です" + watch: "{{provider}}で動画を視聴する" + web_sockets: + disconnected: "接続が解除されました。投稿のリアルタイム更新を中断します。" diff --git a/config/locales/javascript/javascript.ko.yml b/config/locales/javascript/javascript.ko.yml index dfffeda5a..26b2c809a 100644 --- a/config/locales/javascript/javascript.ko.yml +++ b/config/locales/javascript/javascript.ko.yml @@ -1,16 +1,37 @@ -ko: - javascripts: - timeago: - suffixAgo: "전" - suffixFromNow: "후" - seconds: "1분 이내" - minute: "1분" - minutes: "%d분" - hour: "1시간" - hours: "%d시간" +# Copyright (c) 2010, Diaspora Inc. This file is +# licensed under the Affero General Public License version 3 or later. See +# the COPYRIGHT file. + + +ko: + javascripts: + confirm_dialog: "확실합니까?" + infinite_scroll: + no_more: "메시지가 더 없습디다." + publisher: + at_least_one_aspect: "공유하려면 적어도 한 애스펙을 골라야 합니다." + search_for: "{{name}} 검색" + shared: + contact_list: + cannot_remove: "모든 컨택은 적어도 한 애스펙에 속해야 합니다. 공유를 끊고 싶다면 컨택을 지워야 합니다." + timeago: day: "하루" days: "%d일" - month: "한달" - months: "%d달" - year: "1년" + hour: "약 한 시간" + hours: "약 %d시간" + minute: "몇 분" + minutes: "%d분" + month: "약 한 달" + months: "%d개월" + prefixAgo: "" + prefixFromNow: "지금부터" + seconds: "방금" + suffixAgo: "전" + suffixFromNow: "" + year: "한 해" years: "%d년" + videos: + unknown: "알 수 없는 동영상 형식" + watch: "동영상을 {{provider}}에서 보기" + web_sockets: + disconnected: "웹소켓이 닫혔습니다. 앞으로는 공유물이 실시간으로 제공되지 않습니다." diff --git a/config/locales/javascript/javascript.ml.yml b/config/locales/javascript/javascript.ml.yml index daa3d10ee..645cb8cf7 100644 --- a/config/locales/javascript/javascript.ml.yml +++ b/config/locales/javascript/javascript.ml.yml @@ -6,6 +6,8 @@ ml: javascripts: confirm_dialog: "Are you sure?" + infinite_scroll: + no_more: "No more posts." publisher: at_least_one_aspect: "You must publish to at least one aspect" search_for: "Search for {{name}}" @@ -31,3 +33,5 @@ ml: videos: unknown: "Unknown video type" watch: "Watch this video on {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.nb.yml b/config/locales/javascript/javascript.nb.yml index 0f0cb5ac2..3e1962e14 100644 --- a/config/locales/javascript/javascript.nb.yml +++ b/config/locales/javascript/javascript.nb.yml @@ -6,6 +6,8 @@ nb: javascripts: confirm_dialog: "Er du sikker?" + infinite_scroll: + no_more: "No more posts." publisher: at_least_one_aspect: "Du må poste til minst ett aspekt" search_for: "Søk etter {{name}}" @@ -31,3 +33,5 @@ nb: videos: unknown: "Ukjent videotype" watch: "Se denne videoen på {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.nl.yml b/config/locales/javascript/javascript.nl.yml index c47466fe2..f8a4f01dc 100644 --- a/config/locales/javascript/javascript.nl.yml +++ b/config/locales/javascript/javascript.nl.yml @@ -6,6 +6,8 @@ nl: javascripts: confirm_dialog: "Weet je het zeker?" + infinite_scroll: + no_more: "No more posts." publisher: at_least_one_aspect: "Je moet op zijn minst één aspect publiceren" search_for: "Zoek naar {{name}}" @@ -31,3 +33,5 @@ nl: videos: unknown: "Onbekend video type" watch: "Bekijk deze video op {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.pl.yml b/config/locales/javascript/javascript.pl.yml index 3707e31a0..f0628ffe6 100644 --- a/config/locales/javascript/javascript.pl.yml +++ b/config/locales/javascript/javascript.pl.yml @@ -6,8 +6,10 @@ pl: javascripts: confirm_dialog: "Czy @{m,f:jesteś|n:na}{ pew}{m:ien|f:na|n:no}?" + infinite_scroll: + no_more: "No more posts." publisher: - at_least_one_aspect: "You must publish to at least one aspect" + at_least_one_aspect: "Musisz udostępnić dla co najmniej jednego aspektu" search_for: "Szukaj: {{name}}" shared: contact_list: @@ -31,3 +33,5 @@ pl: videos: unknown: "Nieznany typ wideo" watch: "Oglądaj to wideo na {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.pt-BR.yml b/config/locales/javascript/javascript.pt-BR.yml index b0286c822..a91ccdf6c 100644 --- a/config/locales/javascript/javascript.pt-BR.yml +++ b/config/locales/javascript/javascript.pt-BR.yml @@ -6,6 +6,8 @@ pt-BR: javascripts: confirm_dialog: "Tem certeza?" + infinite_scroll: + no_more: "No more posts." publisher: at_least_one_aspect: "You must publish to at least one aspect" search_for: "Search for {{name}}" @@ -31,3 +33,5 @@ pt-BR: videos: unknown: "Tipo de vídeo desconhecido" watch: "Assista este vídeo no {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.pt-PT.yml b/config/locales/javascript/javascript.pt-PT.yml index 53fc7d064..5b7ccc7da 100644 --- a/config/locales/javascript/javascript.pt-PT.yml +++ b/config/locales/javascript/javascript.pt-PT.yml @@ -6,6 +6,8 @@ pt-PT: javascripts: confirm_dialog: "Are you sure?" + infinite_scroll: + no_more: "No more posts." publisher: at_least_one_aspect: "You must publish to at least one aspect" search_for: "Search for {{name}}" @@ -31,3 +33,5 @@ pt-PT: videos: unknown: "Unknown video type" watch: "Watch this video on {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.ro.yml b/config/locales/javascript/javascript.ro.yml index 71507a52a..7dd18f508 100644 --- a/config/locales/javascript/javascript.ro.yml +++ b/config/locales/javascript/javascript.ro.yml @@ -6,6 +6,8 @@ ro: javascripts: confirm_dialog: "Eşti sigur?" + infinite_scroll: + no_more: "No more posts." publisher: at_least_one_aspect: "You must publish to at least one aspect" search_for: "Search for {{name}}" @@ -31,3 +33,5 @@ ro: videos: unknown: "Format de video necunoscut" watch: "Vizualizează acest video pe {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.ru.yml b/config/locales/javascript/javascript.ru.yml index ae0c1d1af..1f9e99644 100644 --- a/config/locales/javascript/javascript.ru.yml +++ b/config/locales/javascript/javascript.ru.yml @@ -6,6 +6,8 @@ ru: javascripts: confirm_dialog: "Вы уверенны? " + infinite_scroll: + no_more: "Сообщений больше нет." publisher: at_least_one_aspect: "Вам надо минимум один аспект создать" search_for: "Искать {{name}}" @@ -31,3 +33,5 @@ ru: videos: unknown: "Неизвестный видеоформат" watch: "Смотреть это видео на {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.sk.yml b/config/locales/javascript/javascript.sk.yml index a55234d63..afcdc24c2 100644 --- a/config/locales/javascript/javascript.sk.yml +++ b/config/locales/javascript/javascript.sk.yml @@ -6,6 +6,8 @@ sk: javascripts: confirm_dialog: "Ste si istý?" + infinite_scroll: + no_more: "No more posts." publisher: at_least_one_aspect: "You must publish to at least one aspect" search_for: "Hľadať {{name}}" @@ -31,3 +33,5 @@ sk: videos: unknown: "Neznámy typ videa" watch: "Pozrite sa na toto video na {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.sl.yml b/config/locales/javascript/javascript.sl.yml index 345bdfada..bb3d86b80 100644 --- a/config/locales/javascript/javascript.sl.yml +++ b/config/locales/javascript/javascript.sl.yml @@ -6,6 +6,8 @@ sl: javascripts: confirm_dialog: "Are you sure?" + infinite_scroll: + no_more: "No more posts." publisher: at_least_one_aspect: "You must publish to at least one aspect" search_for: "Search for {{name}}" @@ -31,3 +33,5 @@ sl: videos: unknown: "Unknown video type" watch: "Watch this video on {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.sv.yml b/config/locales/javascript/javascript.sv.yml index 51ec24e68..48002e2b7 100644 --- a/config/locales/javascript/javascript.sv.yml +++ b/config/locales/javascript/javascript.sv.yml @@ -6,6 +6,8 @@ sv: javascripts: confirm_dialog: "Är du säker?" + infinite_scroll: + no_more: "No more posts." publisher: at_least_one_aspect: "Du måste publicera till minst en aspekt." search_for: "Sök efter {{name}}" @@ -31,3 +33,5 @@ sv: videos: unknown: "Okänd videotyp" watch: "Se denhär videon på {{provider}}" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.tr.yml b/config/locales/javascript/javascript.tr.yml index cfbaffbc1..64a32f6cc 100644 --- a/config/locales/javascript/javascript.tr.yml +++ b/config/locales/javascript/javascript.tr.yml @@ -6,6 +6,8 @@ tr: javascripts: confirm_dialog: "Emin misiniz?" + infinite_scroll: + no_more: "No more posts." publisher: at_least_one_aspect: "You must publish to at least one aspect" search_for: "{{name}}'i ara" @@ -31,3 +33,5 @@ tr: videos: unknown: "Bilinmeyen video tipi" watch: "Bu videoyu {{provider}}'da izle" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.zh-CN.yml b/config/locales/javascript/javascript.zh-CN.yml new file mode 100644 index 000000000..5601ec70a --- /dev/null +++ b/config/locales/javascript/javascript.zh-CN.yml @@ -0,0 +1,37 @@ +# Copyright (c) 2010, Diaspora Inc. This file is +# licensed under the Affero General Public License version 3 or later. See +# the COPYRIGHT file. + + +zh-CN: + javascripts: + confirm_dialog: "你确定吗?" + infinite_scroll: + no_more: "No more posts." + publisher: + at_least_one_aspect: "发布时请选择至少一个情景" + search_for: "搜索 {{name}}" + shared: + contact_list: + cannot_remove: "无法将好友从他所在的最后一个情景中移除。(如果你想与这个人断绝连结,你可以解除与他的好友关系。)" + timeago: + day: "1天" + days: "%d天" + hour: "约1小时" + hours: "约%d小时" + minute: "约1分钟" + minutes: "%d分钟" + month: "约1个月" + months: "%d个月" + prefixAgo: "" + prefixFromNow: "" + seconds: "少于1分钟" + suffixAgo: "前" + suffixFromNow: "后" + year: "约1年" + years: "%d年" + videos: + unknown: "未知视频格式" + watch: "在 {{provider}} 上看观看视频" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.zh-TW.yml b/config/locales/javascript/javascript.zh-TW.yml index 8c887dd79..01c27fd3f 100644 --- a/config/locales/javascript/javascript.zh-TW.yml +++ b/config/locales/javascript/javascript.zh-TW.yml @@ -6,6 +6,8 @@ zh-TW: javascripts: confirm_dialog: "你確定嗎?" + infinite_scroll: + no_more: "沒有貼文了." publisher: at_least_one_aspect: "發表時請至少選擇一個面向" search_for: "搜尋 {{name}}" @@ -31,3 +33,5 @@ zh-TW: videos: unknown: "不明的影片類別" watch: "從 {{provider}} 看這部影片" + web_sockets: + disconnected: "The websocket is closed; posts will no longer be streamed live." diff --git a/config/locales/javascript/javascript.zh.yml b/config/locales/javascript/javascript.zh.yml deleted file mode 100644 index 7c75b4a05..000000000 --- a/config/locales/javascript/javascript.zh.yml +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright (c) 2010, Diaspora Inc. This file is -# licensed under the Affero General Public License version 3 or later. See -# the COPYRIGHT file. - - -zh: - javascripts: - confirm_dialog: "Are you sure?" - publisher: - at_least_one_aspect: "You must publish to at least one aspect" - search_for: "Search for {{name}}" - shared: - contact_list: - cannot_remove: "Cannot remove person from last aspect. (If you want to disconnect from this person you must remove contact.)" - timeago: - day: "1 天" - days: "%d 天" - hour: "大约 1 小时" - hours: "大约 %d 小时" - minute: "大约 1 分钟" - minutes: "%d 分钟" - month: "大约 1 个月" - months: "%d 月" - prefixAgo: "" - prefixFromNow: "从现在开始" - seconds: "不到 1 分钟" - suffixAgo: "之前" - suffixFromNow: "" - year: "大约 1 年" - years: "%d 年" - videos: - unknown: "Unknown video type" - watch: "Watch this video on {{provider}}" diff --git a/config/locales/rails-i18n/README b/config/locales/rails-i18n/README.md similarity index 100% rename from config/locales/rails-i18n/README rename to config/locales/rails-i18n/README.md diff --git a/config/locales/rails-i18n/ar.yml b/config/locales/rails-i18n/ar.yml index 4488c5cfa..2fdd02662 100644 --- a/config/locales/rails-i18n/ar.yml +++ b/config/locales/rails-i18n/ar.yml @@ -1,4 +1,4 @@ -# Arabic translations for Ruby on Rails +# Arabic translations for Ruby on Rails # by Rida Al Barazi (me@rida.me) # updated by Ahmed Hazem (nardgo@gmail.com) # Rails 3 edit by rbjarnason @@ -86,10 +86,10 @@ format: "%n %u" units: unit: "" - thousand: "ألف" - million: "مليون" - billion: "مليار" - trillion: "تريليون" + thousand: ألف + million: مليون + billion: مليار + trillion: تريليون quadrillion: الكدريليون رقم datetime: @@ -183,4 +183,4 @@ <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/bg.yml b/config/locales/rails-i18n/bg.yml index d2e674a72..1c13a21c8 100644 --- a/config/locales/rails-i18n/bg.yml +++ b/config/locales/rails-i18n/bg.yml @@ -6,21 +6,21 @@ # See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. bg: - + # ===== Rails Specific =========================================================================== - + date: formats: default: "%d.%m.%Y" short: "%d %b" long: "%d %B %Y" - + day_names: [неделя, понеделник, вторник, сряда, четвъртък, петък, събота] - standalone_day_names: [Неделя, Понеделник, Вторник, Сряда, Четвъртък, Петък, Събота] - abbr_day_names: [Нед, Пон, Вт, Ср, Чет, Пет, Съб] - + standalone_day_names: [неделя, понеделник, вторник, сряда, четвъртък, петък, събота] + abbr_day_names: [нед, пон, вт, ср, чет, пет, съб] + # should start with nil cause there is no 0-th month - month_names: [~, Януари, Февруари, Март, Април, Май, Юни, Юли, Август, Септември, Октомври, Ноември, Декември] + month_names: [~, януари, февруари, март, април, май, юни, юли, август, септември, октомври, ноември, декември] abbr_month_names: [~, яну., фев., март, апр., май, юни, юли, авг., сеп., окт., ноем., дек.] order: @@ -33,16 +33,16 @@ bg: default: "%a, %d %b %Y, %H:%M:%S %z" short: "%d %b, %H:%M" long: "%d %B %Y, %H:%M" - + am: "преди обяд" pm: "следобед" - + number: format: separator: "." delimiter: "" precision: 3 - + currency: format: format: "%n %u" @@ -50,15 +50,15 @@ bg: separator: "." delimiter: "" precision: 2 - + percentage: format: delimiter: "" - + precision: format: delimiter: "" - + human: format: delimiter: "" @@ -75,7 +75,7 @@ bg: mb: "МБ" gb: "ГБ" tb: "ТБ" - + datetime: distance_in_words: half_a_minute: "половин минута" @@ -141,7 +141,7 @@ bg: hour: "Час" minute: "Минута" second: "Секунда" - + activemodel: errors: template: @@ -150,12 +150,12 @@ bg: other: "%{count} грешки спряха %{model} да бъде запазен" # The variable :count is also available body: "Имаше проблем с следните полета:" - + support: select: # default value for :prompt => true in FormOptionsHelper prompt: "Моля отбележете" - + activerecord: errors: template: @@ -165,7 +165,7 @@ bg: many: "%{model}: записа е неуспешен заради %{count} грешки" other: "%{model}: записа е неуспешен заради %{count} грешки" body: "Възникнаха проблеми при следните полета:" - + messages: inclusion: "съдържа непредвидена стойност" exclusion: "съдържа предварително зададена стойност" @@ -199,9 +199,9 @@ bg: odd: "може да е единствено четно" even: "може да е единствено нечетно" record_invalid: "имаше грешки: %{errors}" - + # ===== I18n Specific ============================================================================ - + i18n: transliterate: rule: @@ -265,11 +265,11 @@ bg: Ю: "Yu" я: "ya" Я: "Ya" - + # ===== Paginate Specific ======================================================================== - + pagination: previous: "« предишна" next: "следваща »" - + # ===== Application Specific ===================================================================== diff --git a/config/locales/rails-i18n/bn-IN.yml b/config/locales/rails-i18n/bn-IN.yml index 0c4230f32..78f215df4 100644 --- a/config/locales/rails-i18n/bn-IN.yml +++ b/config/locales/rails-i18n/bn-IN.yml @@ -7,9 +7,9 @@ bn-IN: # These are also the defaults for 'currency', 'percentage', 'precision', and 'human' format: # Sets the separator between the units, for more precision (e.g. 1.0 / 2.0 == 0.5) - separator: "." + separator: "." # Delimets thousands (e.g. 1,000,000 is a million) (always in groups of three) - delimiter: "," + delimiter: "," # Number of decimals, behind the separator (1 with a precision of 2 gives: 1.00) precision: 2 @@ -17,35 +17,35 @@ bn-IN: currency: format: # Where is the currency sign? %u is the currency unit, %n the number (default: $5.00) - format: "%u %n" - unit: "Rs." + format: "%u %n" + unit: "Rs." # These three are to override number.format and are optional - separator: "." - delimiter: "," + separator: "." + delimiter: "," precision: 2 # Used in number_to_percentage() percentage: format: # These three are to override number.format and are optional - # separator: - delimiter: "" - # precision: + # separator: + delimiter: "" + # precision: # Used in number_to_precision() precision: format: # These three are to override number.format and are optional # separator: - delimiter: "" + delimiter: "" # precision: # Used in number_to_human_size() human: format: # These three are to override number.format and are optional - # separator: - delimiter: "" + # separator: + delimiter: "" precision: 1 # Rails <= v2.2.2 # storage_units: [Bytes, KB, MB, GB, TB] @@ -64,36 +64,36 @@ bn-IN: # Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words() datetime: distance_in_words: - half_a_minute: "অার্ধেক মিনিট" + half_a_minute: "অার্ধেক মিনিট" less_than_x_seconds: - one: "১ সেকেন্ডর কম " + one: "১ সেকেন্ডর কম " other: "%{count} সেকেন্ডের কম" x_seconds: - one: "১ সেকেন্ড" - other: "%{count} সেকেন্ড" + one: "১ সেকেন্ড" + other: "%{count} সেকেন্ড" less_than_x_minutes: - one: "১ মিনিটের কম" - other: "%{count} মিনিটের কম" + one: "১ মিনিটের কম" + other: "%{count} মিনিটের কম" x_minutes: - one: "১ মিনিট" - other: "%{count} মিনিট" + one: "১ মিনিট" + other: "%{count} মিনিট" about_x_hours: - one: "প্রায় ১ ঘন্টা" - other: "প্রায় %{count} ঘন্টা" + one: "প্রায় ১ ঘন্টা" + other: "প্রায় %{count} ঘন্টা" x_days: - one: "১ দিন" - other: "%{count} দিন" + one: "১ দিন" + other: "%{count} দিন" about_x_months: - one: "প্রায় ১ মাস" - other: "প্রায় %{count} মাস" + one: "প্রায় ১ মাস" + other: "প্রায় %{count} মাস" x_months: - one: "১ মাস" - other: "%{count} মাস" + one: "১ মাস" + other: "%{count} মাস" about_x_years: - one: "প্রায় ১ বছর" - other: "প্রায় %{count} বছর" + one: "প্রায় ১ বছর" + other: "প্রায় %{count} বছর" over_x_years: - one: "১ বছরের বেশি" + one: "১ বছরের বেশি" other: "%{count} বছরের বেশি" prompts: year: "বছর" @@ -101,23 +101,23 @@ bn-IN: day: "দিন" hour: "ঘন্টা" minute: "মিনিট" - second: "সেকেন্ড" + second: "সেকেন্ড" activerecord: errors: template: header: - one: "১ টি ত্রুটির কারনে %{model} সংরক্ষন করা সম্ভব হয়নি" - other: "%{count} টি ত্রুটির কারনে %{model} সংরক্ষন করা সম্ভব হয়নি" + one: "১ টি ত্রুটির কারনে %{model} সংরক্ষন করা সম্ভব হয়নি" + other: "%{count} টি ত্রুটির কারনে %{model} সংরক্ষন করা সম্ভব হয়নি" # The variable :count is also available - body: "এই ফিল্ডগুলোতে কিছু সমস্যা দেখা দিয়েছে:" + body: "এই ফিল্ডগুলোতে কিছু সমস্যা দেখা দিয়েছে:" # The values :model, :attribute and :value are always available for interpolation # The value :count is available when applicable. Can be used for pluralization. messages: - inclusion: "লিস্টে অন্তর্ভুক্ত নয়" - exclusion: "রিসার্ভ করা অাছে" - invalid: "সঠিক নয়" + inclusion: "লিস্টে অন্তর্ভুক্ত নয়" + exclusion: "রিসার্ভ করা অাছে" + invalid: "সঠিক নয়" confirmation: "অনুমোদনের সঙ্গে মিলছে না" accepted: "গ্রাহ্য করতে হবে" empty: "খালি রাখা যাবে না" @@ -149,8 +149,8 @@ bn-IN: # When no format has been given, it uses default. # You can provide other formats here if you like! default: "%e/%m/%Y" - short: "%e de %b" - long: "%e de %B de %Y" + short: "%e de %b" + long: "%e de %B de %Y" day_names: [রবিবার, সোমবার, মঙ্গলবার, বুধবার, বৃহস্পতিবার, শুক্রবার, শনিবার] abbr_day_names: [রবিবার, সোমবার, মঙ্গলবার, বুধবার, বৃহস্পতিবার, শুক্রবার, শনিবার] @@ -167,10 +167,10 @@ bn-IN: time: formats: default: "%A, %e de %B de %Y %H:%M:%S %z" - short: "%e de %b %H:%M" - long: "%e de %B de %Y %H:%M" - am: "am" - pm: "pm" + short: "%e de %b %H:%M" + long: "%e de %B de %Y %H:%M" + am: "am" + pm: "pm" # Used in array.to_sentence. support: diff --git a/config/locales/rails-i18n/ca.yml b/config/locales/rails-i18n/ca.yml index dc5d23630..6c1b3950e 100644 --- a/config/locales/rails-i18n/ca.yml +++ b/config/locales/rails-i18n/ca.yml @@ -1,51 +1,51 @@ # Catalan translations for Rails # by Emili Parreño (emili@eparreno.com - www.eparreno.com) - + ca: number: # Used in number_with_delimiter() # These are also the defaults for 'currency', 'percentage', 'precision', and 'human' format: # Sets the separator between the units, for more precision (e.g. 1.0 / 2.0 == 0.5) - separator: "," + separator: "," # Delimets thousands (e.g. 1,000,000 is a million) (always in groups of three) - delimiter: "." + delimiter: "." # Number of decimals, behind the separator (1 with a precision of 2 gives: 1.00) precision: 3 - + # Used in number_to_currency() currency: format: # Where is the currency sign? %u is the currency unit, %n the number (default: $5.00) - format: "%n %u" - unit: "€" + format: "%n %u" + unit: "€" # These three are to override number.format and are optional - separator: "," - delimiter: "." + separator: "," + delimiter: "." precision: 2 - + # Used in number_to_percentage() percentage: format: # These three are to override number.format and are optional - # separator: - delimiter: "" - # precision: - + # separator: + delimiter: "" + # precision: + # Used in number_to_precision() precision: format: # These three are to override number.format and are optional # separator: - delimiter: "" + delimiter: "" # precision: - + # Used in number_to_human_size() human: format: # These three are to override number.format and are optional - # separator: - delimiter: "" + # separator: + delimiter: "" precision: 1 storage_units: # Storage units output formatting. @@ -59,57 +59,57 @@ ca: mb: "MB" gb: "GB" tb: "TB" - + # Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words() datetime: distance_in_words: - half_a_minute: "mig minut" + half_a_minute: "mig minut" less_than_x_seconds: - one: "menys d'1 segon" + one: "menys d'1 segon" other: "menys de %{count} segons" x_seconds: - one: "1 segon" - other: "%{count} segons" + one: "1 segon" + other: "%{count} segons" less_than_x_minutes: - one: "menys d'1 minut" - other: "menys de %{count} minuts" + one: "menys d'1 minut" + other: "menys de %{count} minuts" x_minutes: - one: "1 minut" - other: "%{count} minuts" + one: "1 minut" + other: "%{count} minuts" about_x_hours: - one: "aproximadament 1 hora" - other: "aproximadament %{count} hores" + one: "aproximadament 1 hora" + other: "aproximadament %{count} hores" x_days: - one: "1 dia" - other: "%{count} dies" + one: "1 dia" + other: "%{count} dies" about_x_months: - one: "aproximadament 1 mes" - other: "aproximadament %{count} mesos" + one: "aproximadament 1 mes" + other: "aproximadament %{count} mesos" x_months: - one: "1 mes" - other: "%{count} mesos" + one: "1 mes" + other: "%{count} mesos" about_x_years: - one: "aproximadament 1 any" - other: "aproximadament %{count} anys" + one: "aproximadament 1 any" + other: "aproximadament %{count} anys" over_x_years: - one: "més d'1 any" - other: "més de %{count} anys" - + one: "més d'1 any" + other: "més de %{count} anys" + activerecord: errors: template: header: - one: "No s'ha pogut desar aquest/a %{model} perquè hi ha 1 error" - other: "No s'ha pogut desar aquest/a %{model} perquè hi ha hagut %{count} errors" + one: "No s'ha pogut desar aquest/a %{model} perquè hi ha 1 error" + other: "No s'ha pogut desar aquest/a %{model} perquè hi ha hagut %{count} errors" # The variable :count is also available - body: "Hi ha hagut problemes amb els següents camps:" - + body: "Hi ha hagut problemes amb els següents camps:" + # The values :model, :attribute and :value are always available for interpolation # The value :count is available when applicable. Can be used for pluralization. messages: - inclusion: "no està incluós a la llista" - exclusion: "està reservat" - invalid: "no és vàlid" + inclusion: "no està incluós a la llista" + exclusion: "està reservat" + invalid: "no és vàlid" confirmation: "no coincideix" accepted: "ha de ser acceptat" empty: "no pot estar buit" @@ -126,27 +126,27 @@ ca: less_than_or_equal_to: "ha de ser menor o igual a %{count}" odd: "ha de ser imparell" even: "ha de ser parell" - + # Append your own errors here or at the model/attributes scope. - + models: # Overrides default messages - + attributes: # Overrides model and default messages. - + date: formats: # Use the strftime parameters for formats. # When no format has been given, it uses default. # You can provide other formats here if you like! - default: "%Y-%m-%d" - short: "%d de %b" - long: "%d de %B de %Y" - + default: "%Y-%m-%d" + short: "%d de %b" + long: "%d de %B de %Y" + day_names: [diumenge, dilluns, dimarts, dimecres, dijous, divendres, dissabte] abbr_day_names: [dg, dl, dm, dc, dj, dv, ds] - + # Don't forget the nil at the beginning; there's no such thing as a 0th month month_names: [~, gener, febrer, març, abril, maig, juny, juliol, agost, setembre, octubre, novembre, desembre] abbr_month_names: [~, Gen, Feb, Mar, Abr, Mai, Jun, Jul, Ago, Set, Oct, Nov, Des] @@ -155,16 +155,16 @@ ca: - :day - :month - :year - + time: formats: default: "%A, %d de %B de %Y %H:%M:%S %z" - short: "%d de %b %H:%M" - long: "%d de %B de %Y %H:%M" - am: "am" - pm: "pm" - + short: "%d de %b %H:%M" + long: "%d de %B de %Y %H:%M" + am: "am" + pm: "pm" + # Used in array.to_sentence. support: array: - sentence_connector: "i" \ No newline at end of file + sentence_connector: "i" diff --git a/config/locales/rails-i18n/cs.rb b/config/locales/rails-i18n/cs.rb index 55988ec78..8218b34a2 100644 --- a/config/locales/rails-i18n/cs.rb +++ b/config/locales/rails-i18n/cs.rb @@ -1,5 +1,33 @@ -# Czech translations for Ruby on Rails +# Czech translations for Ruby on Rails # by Karel Minařík (karmi@karmi.cz) +# contributors: +# - Vít Krchov - http://github.com/vita - Rails 3 update + +unless defined?(CzechLocaleI18n::ERROR_MESSAGES) + module CzechLocaleI18n + ERROR_MESSAGES = { + :inclusion => "není v seznamu povolených hodnot", + :exclusion => "je vyhrazeno pro jiný účel", + :invalid => "není platná hodnota", + :confirmation => "nebylo potvrzeno", + :accepted => "musí být potvrzeno", + :empty => "nesmí být prázdný/é", + :blank => "je povinná položka", # alternate formulation: "is required" + :too_long => "je příliš dlouhá/ý (max. %{count} znaků)", + :too_short => "je příliš krátký/á (min. %{count} znaků)", + :wrong_length => "nemá správnou délku (očekáváno %{count} znaků)", + :not_a_number => "není číslo", + :greater_than => "musí být větší než %{count}", + :greater_than_or_equal_to => "musí být větší nebo rovno %{count}", + :equal_to => "musí být rovno %{count}", + :less_than => "musí být méně než %{count}", + :less_than_or_equal_to => "musí být méně nebo rovno %{count}", + :odd => "musí být liché číslo", + :even => "musí být sudé číslo", + :not_an_integer => "musí být celé číslo" + } + end +end { :'cs' => { @@ -7,8 +35,11 @@ :support => { :array => { :two_words_connector => ' a ', - :sentence_connector => 'a', - :skip_last_comma => true + :last_word_connector => ' a ', + :words_connector => ', ' + }, + :select => { + :prompt => 'Prosím vyberte si', } }, @@ -42,7 +73,9 @@ :format => { :precision => 3, :separator => '.', - :delimiter => ',' + :delimiter => ',', + :significant => false, + :strip_insignificant_zeros => false }, :currency => { :format => { @@ -51,12 +84,16 @@ :format => '%n %u', :separator => ",", :delimiter => " ", + :significant => false, + :strip_insignificant_zeros => false } }, :human => { :format => { :precision => 1, - :delimiter => '' + :delimiter => '', + :significant => false, + :strip_insignificant_zeros => false }, :storage_units => { :format => "%n %u", @@ -67,6 +104,17 @@ :gb => "GB", :tb => "TB", } + }, + :decimal_units => { + :format => "%n %u", + :units => { + :unit => "", + :thousand => "Tisíc", + :million => "Milion", + :billion => "Miliarda", + :trillion => "Bilion", + :quadrillion => "Kvadrilion" + } } }, :percentage => { @@ -84,6 +132,14 @@ # Distance of time ... helper # NOTE: In Czech language, these values are different for the past and for the future. Preference has been given to past here. :datetime => { + :prompts => { + :second => "Sekunda", + :minute => "Minuta", + :hour => "Hodina", + :day => "Den", + :month => "Měsíc", + :year => "Rok" + }, :distance_in_words => { :half_a_minute => 'půl minutou', :less_than_x_seconds => { @@ -125,42 +181,49 @@ :over_x_years => { :one => 'více než před rokem', :other => 'více než %{count} roky' + }, + :almost_x_years => { + :one => 'téměř před rokem', + :other => 'téměř před %{count} roky' } } }, + :helpers => { + :select => { + :prompt => "Prosím vyberte si" + }, + + :submit => { + :create => "Vytvořit %{model}", + :update => "Aktualizovat %{model}", + :submit => "Uložit %{model}" + } + }, + + :errors => { + :format => "%{attribute} %{message}", + :messages => CzechLocaleI18n::ERROR_MESSAGES + }, + # ActiveRecord validation messages :activerecord => { :errors => { :messages => { - :inclusion => "není v seznamu povolených hodnot", - :exclusion => "je vyhrazeno pro jiný účel", - :invalid => "není platná hodnota", - :confirmation => "nebylo potvrzeno", - :accepted => "musí být potvrzeno", - :empty => "nesmí být prázdný/é", - :blank => "je povinná položka", # alternate formulation: "is required" - :too_long => "je příliš dlouhá/ý (max. %{count} znaků)", - :too_short => "je příliš krátký/á (min. %{count} znaků)", - :wrong_length => "nemá správnou délku (očekáváno %{count} znaků)", :taken => "již databáze obsahuje", - :not_a_number => "není číslo", - :greater_than => "musí být větší než %{count}", - :greater_than_or_equal_to => "musí být větší nebo rovno %{count}", - :equal_to => "musí být rovno %{count}", - :less_than => "musí být méně než %{count}", - :less_than_or_equal_to => "musí být méně nebo rovno %{count}", - :odd => "musí být liché číslo", - :even => "musí být sudé číslo" - }, + :record_invalid => "Validace je neúspešná: %{errors}" + }.merge(CzechLocaleI18n::ERROR_MESSAGES), :template => { :header => { :one => "Při ukládání objektu %{model} došlo k chybám a nebylo jej možné uložit", :other => "Při ukládání objektu %{model} došlo ke %{count} chybám a nebylo možné jej uložit" }, :body => "Následující pole obsahují chybně vyplněné údaje:" + }, + :full_messages => { + :format => "%{attribute} %{message}" } } } } -} \ No newline at end of file +} diff --git a/config/locales/rails-i18n/cy.yml b/config/locales/rails-i18n/cy.yml index 5ad9ac234..320c55f8e 100644 --- a/config/locales/rails-i18n/cy.yml +++ b/config/locales/rails-i18n/cy.yml @@ -81,11 +81,11 @@ cy: format: "%n %u" units: unit: "" - thousand: "Mil" - million: "Miliwn" - billion: "Biliwn" - trillion: "Triliwn" - quadrillion: "Cwadriliwn" + thousand: Mil + million: Miliwn + billion: Biliwn + trillion: Triliwn + quadrillion: Cwadriliwn datetime: distance_in_words: @@ -178,4 +178,4 @@ cy: <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/da.yml b/config/locales/rails-i18n/da.yml index 070a69078..b0a306aed 100644 --- a/config/locales/rails-i18n/da.yml +++ b/config/locales/rails-i18n/da.yml @@ -95,11 +95,11 @@ da: format: "%n %u" units: unit: "" - thousand: "Tusind" - million: "Million" - billion: "Milliard" - trillion: "Billion" - quadrillion: "Billiard" + thousand: Tusind + million: Million + billion: Milliard + trillion: Billion + quadrillion: Billiard datetime: distance_in_words: @@ -192,4 +192,4 @@ da: <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/de-AT.yml b/config/locales/rails-i18n/de-AT.yml index b9a0369d0..ec1f88411 100644 --- a/config/locales/rails-i18n/de-AT.yml +++ b/config/locales/rails-i18n/de-AT.yml @@ -1,4 +1,4 @@ -# German translations for Ruby on Rails +# German translations for Ruby on Rails # by Clemens Kofler (clemens@railway.at) de-AT: @@ -17,7 +17,7 @@ de-AT: - :day - :month - :year - + time: formats: default: "%A, %d. %B %Y, %H:%M Uhr" @@ -27,7 +27,7 @@ de-AT: am: "vormittags" pm: "nachmittags" - + datetime: distance_in_words: half_a_minute: 'eine halbe Minute' @@ -81,9 +81,9 @@ de-AT: format: unit: '€' format: '%n%u' - separator: - delimiter: - precision: + separator: + delimiter: + precision: percentage: format: delimiter: "" diff --git a/config/locales/rails-i18n/de-CH.yml b/config/locales/rails-i18n/de-CH.yml index fcc856061..84c367707 100644 --- a/config/locales/rails-i18n/de-CH.yml +++ b/config/locales/rails-i18n/de-CH.yml @@ -1,4 +1,4 @@ -# German (Switzerland) translations for Ruby on Rails +# German (Switzerland) translations for Ruby on Rails # by Clemens Kofler (clemens@railway.at) de-CH: @@ -17,7 +17,7 @@ de-CH: - :day - :month - :year - + time: formats: default: "%A, %d. %B %Y, %H:%M Uhr" @@ -27,7 +27,7 @@ de-CH: am: "vormittags" pm: "nachmittags" - + datetime: distance_in_words: half_a_minute: 'eine halbe Minute' @@ -81,9 +81,9 @@ de-CH: format: unit: 'CHF' format: '%u %n' - separator: - delimiter: - precision: + separator: + delimiter: + precision: percentage: format: delimiter: "" diff --git a/config/locales/rails-i18n/de.yml b/config/locales/rails-i18n/de.yml index a0b62bd8e..ecafaee22 100644 --- a/config/locales/rails-i18n/de.yml +++ b/config/locales/rails-i18n/de.yml @@ -1,4 +1,4 @@ -# German translations for Ruby on Rails +# German translations for Ruby on Rails # by Clemens Kofler (clemens@railway.at) # contributors: # - Alexander Dreher - http://github.com/alexdreher - Rails 3 update @@ -19,7 +19,7 @@ de: - :day - :month - :year - + time: formats: default: "%A, %d. %B %Y, %H:%M Uhr" @@ -29,7 +29,7 @@ de: am: "vormittags" pm: "nachmittags" - + datetime: distance_in_words: half_a_minute: 'eine halbe Minute' @@ -118,15 +118,15 @@ de: format: "%n %u" units: unit: "" - thousand: "Tausend" - million: "Millionen" - billion: - one: "Milliarde" - others: "Milliarden" - trillion: "Billionen" - quadrillion: - one: "Billiarde" - others: "Billiarden" + thousand: Tausend + million: Millionen + billion: + one: Milliarde + others: Milliarden + trillion: Billionen + quadrillion: + one: Billiarde + others: Billiarden support: array: @@ -175,7 +175,7 @@ de: odd: "muss ungerade sein" even: "muss gerade sein" not_an_integer: "muss ganzzahlig sein" - + activerecord: errors: template: @@ -184,10 +184,10 @@ de: other: "Konnte %{model} nicht speichern: %{count} Fehler." body: "Bitte überprüfen Sie die folgenden Felder:" - messages: + messages: taken: "ist bereits vergeben" record_invalid: "Gültigkeitsprüfung ist fehlgeschlagen: %{errors}" <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/en-AU.yml b/config/locales/rails-i18n/en-AU.yml index a98aac1de..2eb397bf6 100644 --- a/config/locales/rails-i18n/en-AU.yml +++ b/config/locales/rails-i18n/en-AU.yml @@ -80,11 +80,11 @@ format: "%n %u" units: unit: "" - thousand: "Thousand" - million: "Million" - billion: "Billion" - trillion: "Trillion" - quadrillion: "Quadrillion" + thousand: Thousand + million: Million + billion: Billion + trillion: Trillion + quadrillion: Quadrillion datetime: distance_in_words: @@ -177,4 +177,4 @@ <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/en-GB.yml b/config/locales/rails-i18n/en-GB.yml index 7ef25ee93..5bf1212c9 100644 --- a/config/locales/rails-i18n/en-GB.yml +++ b/config/locales/rails-i18n/en-GB.yml @@ -80,11 +80,11 @@ format: "%n %u" units: unit: "" - thousand: "Thousand" - million: "Million" - billion: "Billion" - trillion: "Trillion" - quadrillion: "Quadrillion" + thousand: Thousand + million: Million + billion: Billion + trillion: Trillion + quadrillion: Quadrillion datetime: distance_in_words: @@ -177,4 +177,4 @@ <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/en-US.yml b/config/locales/rails-i18n/en-US.yml index 66a72b43f..645aefdc3 100644 --- a/config/locales/rails-i18n/en-US.yml +++ b/config/locales/rails-i18n/en-US.yml @@ -82,11 +82,11 @@ format: "%n %u" units: unit: "" - thousand: "Thousand" - million: "Million" - billion: "Billion" - trillion: "Trillion" - quadrillion: "Quadrillion" + thousand: Thousand + million: Million + billion: Billion + trillion: Trillion + quadrillion: Quadrillion datetime: distance_in_words: @@ -179,4 +179,4 @@ <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/eo.yml b/config/locales/rails-i18n/eo.yml index 178d4ae78..bdaf8a170 100644 --- a/config/locales/rails-i18n/eo.yml +++ b/config/locales/rails-i18n/eo.yml @@ -8,7 +8,7 @@ eo: default: "%Y/%m/%d" short: "%e %b" long: "%e %B %Y" - + day_names: [dimanĉo, lundo, mardo, merkredo, ĵaŭdo, vendredo, sabato] abbr_day_names: [dim, lun, mar, mer, ĵaŭ, ven, sam] month_names: [~, januaro, februaro, marto, aprilo, majo, junio, julio, aŭgusto, septembro, oktobro, novembro, decembro] @@ -17,7 +17,7 @@ eo: - :day - :month - :year - + time: formats: default: "%d %B %Y %H:%M:%S" @@ -25,7 +25,7 @@ eo: long: "%A %d %B %Y %H:%M" am: 'am' pm: 'pm' - + datetime: distance_in_words: half_a_minute: "duona minuto" @@ -71,7 +71,7 @@ eo: hour: "Horo" minute: "Minuto" second: "Sekundo" - + number: format: separator: "," diff --git a/config/locales/rails-i18n/es-AR.yml b/config/locales/rails-i18n/es-AR.yml index b1180e118..2fe807c10 100644 --- a/config/locales/rails-i18n/es-AR.yml +++ b/config/locales/rails-i18n/es-AR.yml @@ -174,4 +174,4 @@ es-AR: <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/es-CL.yml b/config/locales/rails-i18n/es-CL.yml index 13bb259eb..1cfc207bc 100644 --- a/config/locales/rails-i18n/es-CL.yml +++ b/config/locales/rails-i18n/es-CL.yml @@ -137,7 +137,7 @@ es-CL: prompt: "Por favor seleccione" submit: - create: 'Guardar %{model}' + create: 'Crear %{model}' update: 'Actualizar %{model}' submit: 'Guardar %{model}' @@ -180,4 +180,4 @@ es-CL: <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/es-CO.yml b/config/locales/rails-i18n/es-CO.yml index 4eaa7522d..950a12b29 100644 --- a/config/locales/rails-i18n/es-CO.yml +++ b/config/locales/rails-i18n/es-CO.yml @@ -176,4 +176,4 @@ es-CO: <<: *errors_messages full_messages: - format: "%{attribute}%{message}" \ No newline at end of file + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/es-MX.yml b/config/locales/rails-i18n/es-MX.yml index 2b1f4f3b9..3f6d35de6 100644 --- a/config/locales/rails-i18n/es-MX.yml +++ b/config/locales/rails-i18n/es-MX.yml @@ -183,4 +183,4 @@ es-MX: <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/es-PE.yml b/config/locales/rails-i18n/es-PE.yml index 356546ab7..64ca7466d 100644 --- a/config/locales/rails-i18n/es-PE.yml +++ b/config/locales/rails-i18n/es-PE.yml @@ -83,7 +83,7 @@ es-PE: prompts: hour: 'Hora' minute: 'Minuto' - second: 'Segundo' + second: 'Segundo' # Active Record @@ -121,4 +121,4 @@ es-PE: one: "longitud errónea (debe ser de 1 caracter)" other: "longitud errónea (debe ser de {{count}} caracteres)" even: "debe ser un número par" - odd: "debe ser un número non" \ No newline at end of file + odd: "debe ser un número non" diff --git a/config/locales/rails-i18n/es.yml b/config/locales/rails-i18n/es.yml index f632fe636..970975d90 100644 --- a/config/locales/rails-i18n/es.yml +++ b/config/locales/rails-i18n/es.yml @@ -138,7 +138,7 @@ prompt: "Por favor seleccione" submit: - create: 'Guardar %{model}' + create: 'Crear %{model}' update: 'Actualizar %{model}' submit: 'Guardar %{model}' @@ -181,4 +181,4 @@ <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/et.yml b/config/locales/rails-i18n/et.yml index 5323b9f34..e698626b8 100644 --- a/config/locales/rails-i18n/et.yml +++ b/config/locales/rails-i18n/et.yml @@ -59,15 +59,15 @@ et: precision: 2 significant: false strip_insignificant_zeros: false - + percentage: format: delimiter: "" - + precision: format: delimiter: "" - + human: format: delimiter: "" @@ -88,11 +88,11 @@ et: format: "%n %u" units: unit: "" - thousand: "tuhat" - million: "miljon" - billion: "miljard" - trillion: "triljon" - quadrillion: "kvadriljon" + thousand: tuhat + million: miljon + billion: miljard + trillion: triljon + quadrillion: kvadriljon datetime: distance_in_words: diff --git a/config/locales/rails-i18n/eu.yml b/config/locales/rails-i18n/eu.yml index 94a278959..e48249976 100644 --- a/config/locales/rails-i18n/eu.yml +++ b/config/locales/rails-i18n/eu.yml @@ -180,5 +180,5 @@ <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/fa.yml b/config/locales/rails-i18n/fa.yml index 79927d2bf..f0a75bca8 100644 --- a/config/locales/rails-i18n/fa.yml +++ b/config/locales/rails-i18n/fa.yml @@ -1,4 +1,4 @@ -# Persian translations for Ruby on Rails +# Persian translations for Ruby on Rails # by Reza (reza@balatarin.com) # Rails 3 update by rbjarnason @@ -82,11 +82,11 @@ format: "%n %u" units: unit: "" - thousand: "هزار" - million: "میلیون" - billion: "بیلیون" - trillion: "تریلیون" - quadrillion: "کادریلیون" + thousand: هزار + million: میلیون + billion: بیلیون + trillion: تریلیون + quadrillion: کادریلیون datetime: distance_in_words: @@ -145,11 +145,11 @@ format: "%{attribute} %{message}" messages: &errors_messages - inclusion: "در لیست موجود نیست" - exclusion: "رزرو است" - invalid: "نامعتبر است" + inclusion: "در لیست موجود نیست" + exclusion: "رزرو است" + invalid: "نامعتبر است" confirmation: "با تایید نمی‌خواند" - accepted: "باید پذیرفته شود" + accepted: "باید پذیرفته شود" empty: "نمی‌تواند خالی باشد" blank: "نباید خالی باشد" too_long: "بلند است (حداکثر %{count} کاراکتر)" @@ -179,4 +179,4 @@ <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/fi.yml b/config/locales/rails-i18n/fi.yml index 401a31d9a..71d3f9c67 100644 --- a/config/locales/rails-i18n/fi.yml +++ b/config/locales/rails-i18n/fi.yml @@ -85,11 +85,11 @@ fi: format: "%n %u" units: unit: "" - thousand: "Tuhatta" - million: "Euroa" - billion: "Miljardia" - trillion: "Biljoona" - quadrillion: "Kvadriljoona" + thousand: Tuhatta + million: Euroa + billion: Miljardia + trillion: Biljoona + quadrillion: Kvadriljoona datetime: distance_in_words: @@ -182,4 +182,4 @@ fi: <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/fur.yml b/config/locales/rails-i18n/fur.yml index 3d05a22df..de949f73c 100644 --- a/config/locales/rails-i18n/fur.yml +++ b/config/locales/rails-i18n/fur.yml @@ -1,4 +1,4 @@ -# Friulian translations for Ruby on Rails +# Friulian translations for Ruby on Rails # by Andrea Decorte (adecorte@gmail.com) fur: @@ -7,7 +7,7 @@ fur: separator: "," delimiter: "." precision: 3 - + currency: format: format: "%n %u" @@ -15,21 +15,21 @@ fur: separator: "." delimiter: "," precision: 2 - + percentage: format: delimiter: "" - # precision: - + # precision: + precision: format: # separator: delimiter: "" # precision: - + human: format: - # separator: + # separator: delimiter: "" precision: 1 storage_units: @@ -58,16 +58,16 @@ fur: - :day - :month - :year - + time: formats: default: "%a %d di %b dal %Y, %H:%M:%S %z" short: "%d di %b %H:%M" long: "%d di %B %Y %H:%M" - + am: 'am' pm: 'pm' - + datetime: distance_in_words: half_a_minute: "mieç minût" @@ -114,11 +114,11 @@ fur: words_connector: ", " two_words_connector: " e " last_word_connector: ", e " - + activerecord: errors: template: - header: + header: one: "No si pues salvâ chest %{model}: 1 erôr" other: "No si pues salvâ chest %{model}: %{count} erôrs." body: "Torne par plasê a controlâ i cjamps ca sot:" @@ -141,4 +141,4 @@ fur: less_than: "al à di jessi mancul di %{count}" less_than_or_equal_to: "al à di jessi mancul o compagn di %{count}" odd: "al à di jessi dispar" - even: "al à di jessi pâr" \ No newline at end of file + even: "al à di jessi pâr" diff --git a/config/locales/rails-i18n/gl-ES.yml b/config/locales/rails-i18n/gl-ES.yml index 53e6603bc..4b43491b5 100644 --- a/config/locales/rails-i18n/gl-ES.yml +++ b/config/locales/rails-i18n/gl-ES.yml @@ -6,40 +6,40 @@ gl-ES: number: # Usado en number_with_delimiter() format: - separator: "," - delimiter: "." + separator: "," + delimiter: "." precision: 2 - + # Usado en number_to_currency() currency: format: # %u é a unidade monetaria, %n o número # 1 euro sería 1.00 € - format: "%n %u" - unit: "€" - separator: "," - delimiter: "." + format: "%n %u" + unit: "€" + separator: "," + delimiter: "." precision: 2 - + # Usado en number_to_percentage() percentage: format: - # separator: - delimiter: "" - # precision: - + # separator: + delimiter: "" + # precision: + # Usado en number_to_precision() precision: format: # separator: - delimiter: "" + delimiter: "" # precision: - + # Usado en number_to_human_size() human: format: - # separator: - delimiter: "" + # separator: + delimiter: "" precision: 1 # Se estás a usar Rails <= 2.2.2 # storage_units: [Bytes, KB, MB, GB, TB] @@ -57,7 +57,7 @@ gl-ES: mb: "MB" gb: "GB" tb: "TB" - + # active_support date: formats: @@ -83,7 +83,7 @@ gl-ES: # Podes engadir máis formatos nesta lista ou cambiar os aquí definidos am: '' pm: '' - + # Usados en distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words() datetime: distance_in_words: @@ -128,7 +128,7 @@ gl-ES: today: 'hoxe' tomorrow: 'mañá' in: 'dentro de' - + support: array: # Se estás a usar Rails <= 2.2.2 @@ -154,7 +154,7 @@ gl-ES: # user: # login: "Aceso" # traducirá o atribute login do modelo User como "Aceso" - + errors: template: header: @@ -183,7 +183,7 @@ gl-ES: odd: "debe ser par" even: "debe ser impar" # Engade aquí os teus propios mensaxes de erro ou no ámbito modelo/atributo - + # Podes definir os teus propios erros para modelos ou para os atributos dun modelo # Os valores :model, :attribute e :value están sempre dispoñibles para a interpolación # diff --git a/config/locales/rails-i18n/gsw-CH.yml b/config/locales/rails-i18n/gsw-CH.yml index 5e26ccba4..ef01de3c6 100644 --- a/config/locales/rails-i18n/gsw-CH.yml +++ b/config/locales/rails-i18n/gsw-CH.yml @@ -1,4 +1,4 @@ -# Swiss German (Switzerland) translations for Ruby on Rails +# Swiss German (Switzerland) translations for Ruby on Rails # by Florian Hanke (florian.hanke@gmail.com). # # Adapted from de-CH by Clemens Kofler (clemens@railway.at). @@ -19,7 +19,7 @@ gsw-CH: - :day - :month - :year - + time: formats: default: "%A, %d. %B %Y, %H:%M" @@ -29,7 +29,7 @@ gsw-CH: am: "am Vormittaag" pm: "am Namitaag" - + datetime: distance_in_words: half_a_minute: 'ä halbi Minuutä' @@ -118,11 +118,11 @@ gsw-CH: format: "%n %u" units: unit: "" - thousand: "Tuusig" - million: "Milioon" - billion: "Bilioon" - trillion: "Trilioon" - quadrillion: "Quadrilioon" + thousand: Tuusig + million: Milioon + billion: Bilioon + trillion: Trilioon + quadrillion: Quadrilioon support: array: @@ -131,19 +131,19 @@ gsw-CH: last_word_connector: " und " select: prompt: "Bitte wääle:" - + helpers: select: prompt: "Bitte wääle" - + submit: create: '%{model} erschtele' update: '%{model} ändere' submit: '%{model} schpeichere' - + errors: format: "%{attribute} %{message}" - + messages: &errors_messages inclusion: "isch kän gültige Wert" exclusion: "isch nöd ume" @@ -164,7 +164,7 @@ gsw-CH: less_than_or_equal_to: "mues chliiner oder gliich %{count} sii" odd: "mues ungraad sii" even: "mues graad sii" - + activerecord: errors: template: @@ -172,11 +172,11 @@ gsw-CH: one: "Han's %{model} nöd schpeichere chönne: än Fehler." other: "Han's %{model} näd schpeichere chönne: %{count} Fehler." body: "Bitte überprüefed Si die Felder:" - + messages: taken: "isch bereits vergää" record_invalid: "Gültigkeitsprüefig hät fehlgschlage: %{errors}" <<: *errors_messages - + full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/he.yml b/config/locales/rails-i18n/he.yml index 4c025a8ff..7e74d90d1 100644 --- a/config/locales/rails-i18n/he.yml +++ b/config/locales/rails-i18n/he.yml @@ -1,4 +1,4 @@ -# Hebrew translations for Ruby on Rails +# Hebrew translations for Ruby on Rails # by Dotan Nahum (dipidi@gmail.com) # Rails 3 update by rbjarnason @@ -85,11 +85,11 @@ format: "%n %u" units: unit: "" - thousand: "אלף" - million: "מיליון" - billion: "מיליארד" - trillion: "טריליון" - quadrillion: "קודריליון" + thousand: אלף + million: מיליון + billion: מיליארד + trillion: טריליון + quadrillion: קודריליון datetime: distance_in_words: @@ -169,7 +169,7 @@ less_than_or_equal_to: "חייב להיות קטן או שווה ל- %{count}" odd: "חייב להיות אי זוגי" even: "חייב להיות זוגי" - + activerecord: errors: template: @@ -184,4 +184,4 @@ <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/hi-IN.yml b/config/locales/rails-i18n/hi-IN.yml index d0d24ad7d..42d0ec59a 100644 --- a/config/locales/rails-i18n/hi-IN.yml +++ b/config/locales/rails-i18n/hi-IN.yml @@ -178,4 +178,4 @@ hi-IN: <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/hi.yml b/config/locales/rails-i18n/hi.yml index 5ca29700d..2d11aec36 100644 --- a/config/locales/rails-i18n/hi.yml +++ b/config/locales/rails-i18n/hi.yml @@ -178,4 +178,4 @@ hi: <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/hsb.yml b/config/locales/rails-i18n/hsb.yml index c5e4219df..7206303a5 100644 --- a/config/locales/rails-i18n/hsb.yml +++ b/config/locales/rails-i18n/hsb.yml @@ -157,12 +157,12 @@ hsb: accepted: "dyrbi so wobkrućić" empty: "njesmě prózdny być" blank: "je trěbny" - too_long: + too_long: one: "je předołhi (maks. 1 znamješko)" two: "je předołhi (maks. %{count} znamješce)" few: "je předołhi (maks. %{count} znamješka)" other: "je předołhi (maks. %{count} znamješkow)" - too_short: + too_short: one: "je překrótki (min. 1 znamješko)" two: "je překrótki (min. %{count} znamješće)" few: "je překrótki (min. %{count} znamješka)" diff --git a/config/locales/rails-i18n/hu.yml b/config/locales/rails-i18n/hu.yml index d15676f94..d4c3f73ed 100644 --- a/config/locales/rails-i18n/hu.yml +++ b/config/locales/rails-i18n/hu.yml @@ -1,4 +1,4 @@ -# Hungarian translations for Ruby on Rails +# Hungarian translations for Ruby on Rails # by Richard Abonyi (richard.abonyi@gmail.com) # thanks to KKata, replaced and #hup.hu # Cleaned up by László Bácsi (http://lackac.hu) @@ -144,4 +144,4 @@ last_word_connector: " és " select: # default value for :prompt => true in FormOptionsHelper - prompt: "Válasszon" \ No newline at end of file + prompt: "Válasszon" diff --git a/config/locales/rails-i18n/id.yml b/config/locales/rails-i18n/id.yml index a126bdff7..4173b2c3e 100644 --- a/config/locales/rails-i18n/id.yml +++ b/config/locales/rails-i18n/id.yml @@ -1,4 +1,4 @@ -# Indonesian translations for Ruby on Rails +# Indonesian translations for Ruby on Rails # by wynst (wynst.uei@gmail.com) id: @@ -10,7 +10,7 @@ id: default: "%d %B %Y" long: "%A, %d %B %Y" short: "%d.%m.%Y" - + day_names: [Minggu, Senin, Selasa, Rabu, Kamis, Jum'at, Sabtu] abbr_day_names: [Min, Sen, Sel, Rab, Kam, Jum, Sab] month_names: [~, Januari, Februari, Maret, April, Mei, Juni, Juli, Agustus, September, Oktober, November, Desember] @@ -27,7 +27,7 @@ id: short: "%d %b %H.%M" long: "%d %B %Y %H.%M" time: "%H:%M" - + am: "am" pm: "pm" @@ -46,7 +46,7 @@ id: delimiter: "." separator: "," precision: 2 - + currency: format: format: "%n. %u" @@ -54,7 +54,7 @@ id: separator: "," delimiter: "." precision: 2 - + percentage: format: delimiter: "." @@ -65,14 +65,14 @@ id: format: delimiter: "." separator: "," - + human: format: delimiter: "." separator: "," precision: 1 storage_units: [Byte, KB, MB, GB, TB] - + datetime: distance_in_words: half_a_minute: "setengah menit" @@ -111,7 +111,7 @@ id: almost_x_years: one: "hampir setahun" other: "hampir %{count} tahun" - + activerecord: errors: template: diff --git a/config/locales/rails-i18n/is.yml b/config/locales/rails-i18n/is.yml index b8d7f7745..c49b4a10b 100644 --- a/config/locales/rails-i18n/is.yml +++ b/config/locales/rails-i18n/is.yml @@ -81,11 +81,11 @@ format: "%n %u" units: unit: "" - thousand: "þúsund" - million: "milljón" - billion: "billjón" - trillion: "trilljón" - quadrillion: "grasilljón" + thousand: þúsund + million: milljón + billion: billjón + trillion: trilljón + quadrillion: grasilljón datetime: distance_in_words: @@ -178,4 +178,4 @@ <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/it.yml b/config/locales/rails-i18n/it.yml index 4f7655bc3..8b0ddc2ac 100644 --- a/config/locales/rails-i18n/it.yml +++ b/config/locales/rails-i18n/it.yml @@ -27,7 +27,7 @@ it: percentage: format: delimiter: "" - # precision: + # precision: precision: format: @@ -37,7 +37,7 @@ it: human: format: - # separator: + # separator: delimiter: "" precision: 1 significant: true @@ -159,13 +159,13 @@ it: accepted: "deve essere accettata" empty: "non può essere vuoto" blank: "non può essere lasciato in bianco" - too_long: + too_long: one: "è troppo lungo (il massimo è 1 carattere)" other: "è troppo lungo (il massimo è %{count} caratteri)" - too_short: + too_short: one: "è troppo corto (il minimo è 1 carattere)" other: "è troppo corto (il minimo è %{count} caratteri)" - wrong_length: + wrong_length: one: "è della lunghezza sbagliata (deve essere di 1 carattere)" other: "è della lunghezza sbagliata (deve essere di %{count} caratteri)" not_a_number: "non è un numero" @@ -181,7 +181,7 @@ it: activerecord: errors: template: - header: + header: one: "Non posso salvare questo %{model}: 1 errore" other: "Non posso salvare questo %{model}: %{count} errori." body: "Per favore ricontrolla i seguenti campi:" @@ -192,4 +192,4 @@ it: <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/ja.yml b/config/locales/rails-i18n/ja.yml index f0b626e66..d0057511b 100644 --- a/config/locales/rails-i18n/ja.yml +++ b/config/locales/rails-i18n/ja.yml @@ -148,7 +148,7 @@ ja: submit: "保存する" errors: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" messages: &errors_messages inclusion: "は一覧にありません。" diff --git a/config/locales/rails-i18n/ko.yml b/config/locales/rails-i18n/ko.yml index 929b22c7b..882ff2207 100644 --- a/config/locales/rails-i18n/ko.yml +++ b/config/locales/rails-i18n/ko.yml @@ -16,6 +16,7 @@ ko: month_names: [~, 1월, 2월, 3월, 4월, 5월, 6월, 7월, 8월, 9월, 10월, 11월, 12월] abbr_month_names: [~, 1월, 2월, 3월, 4월, 5월, 6월, 7월, 8월, 9월, 10월, 11월, 12월] + order: - :year - :month @@ -32,6 +33,7 @@ ko: support: array: sentence_connector: ", " + skip_last_comma: true words_connector: ", " two_words_connector: "와(과) " last_word_connector: ", " @@ -146,28 +148,28 @@ ko: submit: "제출" errors: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" messages: &errors_messages - inclusion: "은(는) 목록에 포함되어 있습니다" - exclusion: "은(는) 목록에 포함되어 있습니다" - invalid: "은(는) 무효입니다" - confirmation: "은(는) 확인되었습니다" - accepted: "은(는) 확인되었습니다" - empty: "은(는) 비어두면 안 됩니다" - blank: "은(는) 비어두면 안 됩니다" - too_long: "은(는) 너무 깁니다 (최대 %{count}자 까지)" - too_short: "은(는) 너무 짧습니다 (최소 %{count}자 까지)" - wrong_length: "은(는) 길이가 틀렸습니다 (%{count}자를 필요합니다)" - not_a_number: "은(는) 숫자가 아닙니다" - not_an_integer: "은(는) 정수가 아닙니다" - greater_than: "은(는) %{count}이상을 요구합니다" - greater_than_or_equal_to: "은(는) %{count}과 같거나 이상을 요구합니다" + inclusion: "은(는) 목록에 포함되어 있는 값이 아닙니다" + exclusion: "은(는) 이미 예약되어 있는 값입니다" + invalid: "은(는) 올바르지 않은 값입니다" + confirmation: "은(는) 서로 일치해야 합니다" + accepted: "을(를) 반드시 확인해야 합니다" + empty: "에 내용을 입력해 주세요" + blank: "에 내용을 입력해 주세요" + too_long: "은(는) %{count}자를 넘을 수 없습니다" + too_short: "은(는) 적어도 %{count}자를 넘어야 합니다" + wrong_length: "은(는) %{count}자여야 합니다" + not_a_number: "에 숫자를 입력해 주세요" + not_an_integer: "에 정수를 입력해 주세요" + greater_than: "은(는) %{count}보다 커야 합니다" + greater_than_or_equal_to: "은(는) %{count}보다 크거야 같아야 합니다" equal_to: "은(는) %{count}과 같아야 합니다" - less_than: "은(는) %{count}이하를 요구합니다" - less_than_or_equal_to: "은(는) %{count}과 같거나 이하을 요구합니다" - odd: "은(는) 홀수를 요구합니다" - even: "은(는) 짝수를 요구합니다" + less_than: "은(는) %{count}보다 작아야 합니다" + less_than_or_equal_to: "은(는) %{count}과 작거나 같아야 합니다" + odd: "에 홀수를 입력해 주세요" + even: "에 짝수를 입력해 주세요" activerecord: errors: @@ -183,4 +185,4 @@ ko: <<: *errors_messages full_messages: - format: "%{attribute}%{message}" \ No newline at end of file + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/lo.yml b/config/locales/rails-i18n/lo.yml index 32a63207b..d5c4cb00b 100644 --- a/config/locales/rails-i18n/lo.yml +++ b/config/locales/rails-i18n/lo.yml @@ -1,6 +1,6 @@ # Lao translation for Ruby on Rails # By justin maccarthy justin.maccarthy@gmail.com with help from Lao language experts... -# +# lo: number: @@ -13,7 +13,7 @@ lo: delimiter: "," # Number of decimals, behind the separator (the number 1 with a precision of 2 gives: 1.00) precision: 3 - + # Used in number_to_currency() currency: format: @@ -24,15 +24,15 @@ lo: separator: "." delimiter: "," precision: 2 - + # Used in number_to_percentage() percentage: format: # These three are to override number.format and are optional - # separator: + # separator: delimiter: "" - # precision: - + # precision: + # Used in number_to_precision() precision: format: @@ -40,12 +40,12 @@ lo: # separator: delimiter: "" # precision: - + # Used in number_to_human_size() human: format: # These three are to override number.format and are optional - # separator: + # separator: delimiter: "" precision: 1 storage_units: @@ -111,7 +111,7 @@ lo: other: "ບໍ່ສາມາດບັນທຶກ %{model} ໄດ້ເນື່ອງຈາກ ເກີດ %{count} ຂໍ້ຜິດພາດ" # The variable :count is also available body: "ກະລຸນາກວດສອບຂໍ້ມູນໃນຫ້ອງຕໍ່ໄປນີ້ :" - + # The values :model, :attribute and :value are always available for interpolation # The value :count is available when applicable. Can be used for pluralization. messages: @@ -147,16 +147,16 @@ lo: # attributes: # login: # blank: "This is a custom blank message for User login" - # Will define custom blank validation message for User model and + # Will define custom blank validation message for User model and # custom blank validation message for login attribute of User model. #models: - + # Translate model names. Used in Model.human_name(). #models: # For example, # user: "Dude" # will translate User model name to "Dude" - + # Translate model attribute names. Used in Model.human_attribute_name(attribute). #attributes: # For example, @@ -172,10 +172,10 @@ lo: default: "%d-%m-%Y" short: "%e %b" long: "%e %B %Y" - + day_names: ["ອາທິດ", "ຈັນ", "ອັງຄານ", "ພຸດ", "ພະຫັດ", "ສຸກ", "ເສົາ"] abbr_day_names: ["", "", "", "", "", "", ""] - + # Don't forget the nil at the beginning; there's no such thing as a 0th month month_names: [~, "ມັງກອນ", "ກຸມພາ", "ມີນາ", "ເມສາ", "ພຶດສະພາ", "ມິຖຸນາ", "ກໍລະກົດ", "ສິງຫາ", "ກັນຍາ", "ຕຸລາ", "ພະຈິກ", "ທັນວາ"] abbr_month_names: [~,"", "", "", "", "", "", "", "", "", "", "", ""] @@ -192,7 +192,7 @@ lo: long: "%d %B %Y %H:%M น." am: "" pm: "" - + # Used in array.to_sentence. support: array: diff --git a/config/locales/rails-i18n/lt.yml b/config/locales/rails-i18n/lt.yml index 3df8df7f9..eb4bcc7c6 100644 --- a/config/locales/rails-i18n/lt.yml +++ b/config/locales/rails-i18n/lt.yml @@ -7,7 +7,7 @@ lt: separator: "," delimiter: " " precision: 3 - + currency: format: format: "%n %u" @@ -15,15 +15,15 @@ lt: separator: "," delimiter: " " precision: 2 - + percentage: format: delimiter: "" - + precision: format: delimiter: "" - + human: format: delimiter: "" @@ -110,7 +110,7 @@ lt: less_than_or_equal_to: "turi būti mažesnis arba lygus %{count}" odd: "turi būti nelyginis" even: "turi būti lyginis" - + models: date: @@ -118,10 +118,10 @@ lt: default: "%Y-%m-%d" short: "%b %d" long: "%B %d, %Y" - + day_names: [sekmadienis, pirmadienis, antradienis, trečiadienis, ketvirtadienis, penktadienis, šeštadienis] abbr_day_names: [Sek, Pir, Ant, Tre, Ket, Pen, Šeš] - + month_names: [~, sausio, vasario, kovo, balandžio, gegužės, birželio, liepos, rugpjūčio, rugsėjo, spalio, lapkričio, gruodžio] abbr_month_names: [~, Sau, Vas, Kov, Bal, Geg, Bir, Lie, Rgp, Rgs, Spa, Lap, Grd] order: @@ -136,7 +136,7 @@ lt: long: "%B %d, %Y %H:%M" am: "am" pm: "pm" - + support: array: words_connector: ", " diff --git a/config/locales/rails-i18n/lv.yml b/config/locales/rails-i18n/lv.yml index 3976a9d2f..7b456e030 100644 --- a/config/locales/rails-i18n/lv.yml +++ b/config/locales/rails-i18n/lv.yml @@ -116,11 +116,11 @@ lv: format: "%n %u" units: unit: "" - thousand: "Tūkstotis" - million: "Miljons" - billion: "Biljons" - trillion: "Triljons" - quadrillion: "Kvadriljons" + thousand: Tūkstotis + million: Miljons + billion: Biljons + trillion: Triljons + quadrillion: Kvadriljons support: array: @@ -178,4 +178,4 @@ lv: <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/mn.yml b/config/locales/rails-i18n/mn.yml index ea50672ff..734374e56 100644 --- a/config/locales/rails-i18n/mn.yml +++ b/config/locales/rails-i18n/mn.yml @@ -1,25 +1,25 @@ # Mongolian localization for Ruby on Rails 2.2+ # by Ochirkhuyag.L # - + mn: date: formats: default: "%Y-%m-%d" short: "%y-%m-%d" long: "%Y %B %d" - + day_names: [Ням, Даваа, Мягмар, Лхагва, Пүрэв, Баасан, Бямба] abbr_day_names: [Ня, Да, Мя, Лх, Пү, Ба, Бя] - + month_names: [~, 1 сар, 2 сар, 3 сар, 4 сар, 5 сар, 6 сар, 7 сар, 8 сар, 9 сар, 10 сар, 11 сар, 12 сар] abbr_month_names: [~, 1 сар, 2 сар, 3 сар, 4 сар, 5 сар, 6 сар, 7 сар, 8 сар, 9 сар, 10 сар, 11 сар, 12 сар] - + order: - :year - :month - :day - + time: formats: default: "%Y-%m-%d %H:%M" @@ -27,13 +27,13 @@ mn: long: "%Y %B %d, %H:%M:%S" am: "өглөө" pm: "орой" - + number: format: separator: "." delimiter: " " precision: 3 - + currency: format: format: "%n %u" @@ -41,22 +41,22 @@ mn: separator: "." delimiter: " " precision: 2 - + percentage: format: delimiter: "" - + precision: format: delimiter: "" - + human: format: delimiter: "" precision: 1 # Rails 2.2 # storage_units: [байт, КБ, МБ, ГБ, ТБ] - + # Rails 2.3 storage_units: # Storage units output formatting. @@ -70,7 +70,7 @@ mn: mb: "МБ" gb: "ГБ" tb: "ТБ" - + datetime: distance_in_words: half_a_minute: "хагас минут" diff --git a/config/locales/rails-i18n/nb.yml b/config/locales/rails-i18n/nb.yml index 395361aec..023abef4c 100644 --- a/config/locales/rails-i18n/nb.yml +++ b/config/locales/rails-i18n/nb.yml @@ -177,4 +177,4 @@ nb: <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/nl.yml b/config/locales/rails-i18n/nl.yml index 307f1653f..e5354df89 100644 --- a/config/locales/rails-i18n/nl.yml +++ b/config/locales/rails-i18n/nl.yml @@ -21,18 +21,18 @@ nl: - :month - :year - time: - formats: + time: + formats: default: "%a %d %b %Y %H:%M:%S %Z" short: "%d %b %H:%M" - long: "%d %B %Y %H:%M" + long: "%d %B %Y %H:%M" time: "%H:%M" only_second: "%S" am: "'s ochtends" pm: "'s middags" - support: - array: + support: + array: words_connector: ", " two_words_connector: " en " last_word_connector: " en " @@ -113,16 +113,16 @@ nl: x_days: one: "1 dag" other: "%{count} dagen" - about_x_months: + about_x_months: one: "ongeveer \xC3\xA9\xC3\xA9n maand" other: "ongeveer %{count} maanden" x_months: one: "1 maand" other: "%{count} maanden" - about_x_years: + about_x_years: one: "ongeveer \xC3\xA9\xC3\xA9n jaar" other: "ongeveer %{count} jaar" - over_x_years: + over_x_years: one: "meer dan \xC3\xA9\xC3\xA9n jaar" other: "meer dan %{count} jaar" almost_x_years: @@ -183,4 +183,4 @@ nl: <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/pl.yml b/config/locales/rails-i18n/pl.yml index 863e03592..55eceb57b 100644 --- a/config/locales/rails-i18n/pl.yml +++ b/config/locales/rails-i18n/pl.yml @@ -1,6 +1,7 @@ # Polish translations for Ruby on Rails # by Jacek Becela (jacek.becela@gmail.com, http://github.com/ncr) # Minor changes and adjustments for Rails 3 by Piotrek Okoński (http://github.com/pokonski) +# Minor changes and adjustments by Paweł Chojnacki (https://github.com/chojnacki) pl: date: @@ -82,11 +83,11 @@ pl: format: "%n %u" units: unit: "" - thousand: "Tysiąc" - million: "Milion" - billion: "Miliard" - trillion: "Trylion" - quadrillion: "Kwadrylion" + thousand: Tysiąc + million: Milion + billion: Miliard + trillion: Bilion + quadrillion: Biliard datetime: distance_in_words: @@ -190,4 +191,4 @@ pl: <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/pt-BR.yml b/config/locales/rails-i18n/pt-BR.yml index 74fa57aba..69355e5ce 100644 --- a/config/locales/rails-i18n/pt-BR.yml +++ b/config/locales/rails-i18n/pt-BR.yml @@ -17,7 +17,7 @@ - :day - :month - :year - + time: formats: default: "%A, %d de %B de %Y, %H:%M h" @@ -83,20 +83,20 @@ decimal_units: format: "%n %u" units: - unit: "" + unit: "" thousand: "mil" million: - one: "milhão" - other: "milhões" + one: milhão + other: milhões billion: - one: "bilhão" - other: "bilhões" + one: bilhão + other: bilhões trillion: - one: "trilhão" - other: "trilhões" + one: trilhão + other: trilhões quadrillion: - one: "quatrilhão" - other: "quatrilhões" + one: quatrilhão + other: quatrilhões # distancia do tempo em palavras datetime: @@ -196,4 +196,4 @@ <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/pt-PT.yml b/config/locales/rails-i18n/pt-PT.yml index e8721418b..c5c51b69a 100644 --- a/config/locales/rails-i18n/pt-PT.yml +++ b/config/locales/rails-i18n/pt-PT.yml @@ -4,14 +4,14 @@ "pt-PT": date: - formats: + formats: default: "%d/%m/%Y" short: "%d de %B" long: "%d de %B de %Y" day_names: [Domingo, Segunda, Terça, Quarta, Quinta, Sexta, Sábado] abbr_day_names: [Dom, Seg, Ter, Qua, Qui, Sex, Sáb] - + month_names: [~, Janeiro, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro] abbr_month_names: [~, Jan, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez] order: @@ -31,11 +31,11 @@ array: words_connector: ", " two_words_connector: " e " - last_word_connector: ", e" - - select: + last_word_connector: ", e" + + select: prompt: "Por favor seleccione" - + number: format: separator: "," @@ -77,25 +77,25 @@ kb: "KB" mb: "MB" gb: "GB" - tb: "TB" + tb: "TB" decimal_units: format: "%n %u" units: unit: "" - thousand: "mil" + thousand: mil million: - one: "milhão" - other: "milhões" + one: milhão + other: milhões billion: one: mil milhões other: mil milhões trillion: - one: "bilião" - other: "biliões" + one: bilião + other: biliões quadrillion: one: mil biliões other: mil biliões - + datetime: distance_in_words: half_a_minute: "meio minuto" @@ -187,4 +187,4 @@ <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" diff --git a/config/locales/rails-i18n/rm.yml b/config/locales/rails-i18n/rm.yml index 7b81ecf92..1d2568574 100644 --- a/config/locales/rails-i18n/rm.yml +++ b/config/locales/rails-i18n/rm.yml @@ -1,4 +1,4 @@ -# Romansh translations for Ruby on Rails +# Romansh translations for Ruby on Rails # by Flurina Andriuet and Sebastian de Castelberg (rails-i18n@kpricorn.org) rm: @@ -16,7 +16,7 @@ rm: - :day - :month - :year - + time: formats: default: "%A, %d. %B %Y, %H:%M Uhr" @@ -24,7 +24,7 @@ rm: long: "%A, %d. %B %Y, %H:%M Uhr" am: "avantmezdi" pm: "suentermezdi" - + datetime: distance_in_words: half_a_minute: "ina mesa minuta" diff --git a/config/locales/rails-i18n/ro.yml b/config/locales/rails-i18n/ro.yml index ce9e3349b..e979c5539 100644 --- a/config/locales/rails-i18n/ro.yml +++ b/config/locales/rails-i18n/ro.yml @@ -1,4 +1,4 @@ -# Romanian translations for Ruby on Rails +# Romanian translations for Ruby on Rails # by Catalin Ilinca (me@talin.ro) # updated by kfl62 (bogus keys are now commented) @@ -18,7 +18,7 @@ ro: - :day - :month - :year - + time: formats: default: "%a %d %b %Y, %H:%M:%S %z" @@ -26,14 +26,14 @@ ro: short: "%d %b %H:%M" long: "%d %B %Y %H:%M" # only_second: "%S" - + # datetime: # formats: # default: "%d-%m-%YT%H:%M:%S%Z" - + am: '' pm: '' - + datetime: distance_in_words: half_a_minute: "jumătate de minut" @@ -77,7 +77,7 @@ ro: hour: "Ora" minute: "Minutul" second: "Secunda" - + number: format: precision: 3 @@ -115,11 +115,11 @@ ro: mb: "MB" gb: "GB" tb: "TB" - + activerecord: errors: template: - header: + header: one: "Nu am putut salva acest %{model}: o eroare" other: "Nu am putut salva acest %{model}: %{count} erori." body: "Încearcă să corectezi urmatoarele câmpuri:" diff --git a/config/locales/rails-i18n/ru.yml b/config/locales/rails-i18n/ru.yml index b4311d9a3..5f52626ae 100644 --- a/config/locales/rails-i18n/ru.yml +++ b/config/locales/rails-i18n/ru.yml @@ -2,11 +2,11 @@ # by Yaroslav Markin # # Be sure to check out "russian" gem (http://github.com/yaroslav/russian) for -# full Russian language support in Rails (month names, pluralization, etc). +# full Russian language support in Rails (month names, pluralization, etc). # The following is an excerpt from that gem. # -# Для полноценной поддержки русского языка (варианты названий месяцев, -# плюрализация и так далее) в Rails 2.2 нужно использовать gem "russian" +# Для полноценной поддержки русского языка (варианты названий месяцев, +# плюрализация и так далее) в Rails 2.2 нужно использовать gem "russian" # (http://github.com/yaroslav/russian). Следующие данные -- выдержка их него, чтобы # была возможность минимальной локализации приложения на русский язык. @@ -48,7 +48,7 @@ ru: precision: 3 significant: false strip_insignificant_zeros: false - + currency: format: format: "%n %u" @@ -58,22 +58,22 @@ ru: precision: 2 significant: false strip_insignificant_zeros: false - + percentage: format: delimiter: "" - + precision: format: delimiter: "" - + human: format: delimiter: "" precision: 1 significant: false strip_insignificant_zeros: false - + # Rails 2.2 # storage_units: [байт, КБ, МБ, ГБ, ТБ] @@ -92,7 +92,7 @@ ru: mb: "МБ" gb: "ГБ" tb: "ТБ" - + # Rails 3 decimal_units: format: "%n %u" @@ -102,8 +102,8 @@ ru: one: "Тысяча" few: "Тысяч" many: "Тысяч" - other: "Тысяч" - million: + other: "Тысяч" + million: one: "Миллион" few: "Миллионов" many: "Миллионов" @@ -283,10 +283,10 @@ ru: odd: "может иметь лишь четное значение" even: "может иметь лишь нечетное значение" record_invalid: "Возникли ошибки: %{errors}" - + full_messages: format: "%{attribute} %{message}" - + support: select: @@ -296,7 +296,7 @@ ru: # Rails 2.2 sentence_connector: "и" skip_last_comma: true - + # Rails 2.3 words_connector: ", " two_words_connector: " и " diff --git a/config/locales/rails-i18n/sk.yml b/config/locales/rails-i18n/sk.yml index 4ca808346..00148b6f3 100644 --- a/config/locales/rails-i18n/sk.yml +++ b/config/locales/rails-i18n/sk.yml @@ -1,5 +1,6 @@ # Slovak translations for Ruby on Rails (inspired by the Czech localization - thanx to Karel Minařík) # by Jozef Fulop (jofi-rails@silake.com) +# edit by Ivan Stana (stiipa@centrum.sk) "sk": # Date @@ -35,14 +36,14 @@ two_words_connector: " a " last_word_connector: " a " select: - prompt: "Prosím vyberte si." + prompt: "Prosím vyberte si" # Numbers number: format: precision: 3 - separator: "." - delimiter: "," + separator: "," + delimiter: " " significant: false strip_insignificant_zeros: false @@ -58,7 +59,7 @@ percentage: format: - delimiter: "" + delimiter: " " precision: format: @@ -85,11 +86,11 @@ format: "%n %u" units: unit: "" - thousand: "Tisíc" - million: "Milión" - billion: "Miliarda" - trillion: "Trilión" - quadrillion: "Quadrilión" + thousand: Tisíc + million: Milión + billion: Miliarda + trillion: Bilión + quadrillion: Biliarda # Distance of time ... helper datetime: @@ -101,7 +102,7 @@ month: "Mesiac" year: "Rok" distance_in_words: - half_a_minute: 'pol minutou' + half_a_minute: 'pol minútou' less_than_x_seconds: one: 'asi pred sekundou' other: 'asi pred %{count} sekundami' @@ -133,8 +134,8 @@ one: 'pred viac ako rokom' other: 'viac ako %{count} rokmi' almost_x_years: - one: "takmer rokom" - other: "takmer %{count} rokmi" + one: "takmer pred rokom" + other: "takmer pred %{count} rokmi" helpers: select: @@ -153,43 +154,43 @@ invalid: "nie je platná hodnota" confirmation: "nebolo potvrdené" accepted: "musí byť potvrdené" - empty: "nesmie byť prázdný/é" + empty: "nesmie byť prázdny/e" blank: "je povinná položka" too_long: "je príliš dlhá/ý (max. %{count} znakov)" - too_short: "je príliš krátký/á (min. %{count} znakov)" + too_short: "je príliš krátky/a (min. %{count} znakov)" wrong_length: "nemá správnu dĺžku (očakáva sa %{count} znakov)" taken: "sa už nachádza v databáze" not_a_number: "nie je číslo" - not_an_integer: "nie je celé číslo" - greater_than: "musí byť väčšíe ako %{count}" - greater_than_or_equal_to: "musí byť väčšie alebo rovnaké ako %{count}" + not_an_integer: "musí byť celé číslo" + greater_than: "musí byť väčšie ako %{count}" + greater_than_or_equal_to: "musí byť väčšie alebo rovné %{count}" equal_to: "sa musí rovnať %{count}" less_than: "musí byť menšie ako %{count}" - less_than_or_equal_to: "musí byť menšie ako %{count}" + less_than_or_equal_to: "musí byť menšie alebo rovné %{count}" odd: "musí byť nepárne číslo" even: "musí byť párne číslo" # ActiveRecord validation messages - activerecord: + activerecord: errors: template: header: - one: "Zmeny na %{model} neboli uložené. Vyskytla sa 1 chyba" - other: "Zmeny na %{model} neboli uložené. Vyskytlo sa %{count} chýb" - body: "There were problems with the following fields:" + one: "Objekt %{model} nebol uložený. Vyskytla sa 1 chyba" + other: "Objekt %{model} nebol uložený. Vyskytlo sa %{count} chýb" + body: "Nasledujúce polia obsahujú chybne vyplnené údaje:" messages: taken: "ste už použili" - record_invalid: "Validácia neuspešná: %{errors}" + record_invalid: "Validácia neúspešná: %{errors}" <<: *errors_messages full_messages: - format: "%{attribute}%{message}" + format: "%{attribute} %{message}" activemodel: errors: template: header: - one: "Pri ukladaní objektu %{model} došlo k chybám a nebolo možné objekt uložiť" - other: "Pri ukladaní objektu %{model} došlo ku %{count} chybe/ám a nebolo možné objekt uložiť" + one: "Pri ukladaní objektu %{model} došlo k chybám a nebolo ho možné uložiť" + other: "Pri ukladaní objektu %{model} došlo k %{count} chybám a nebolo ho možné uložiť" body: "Nasledujúce polia obsahujú chybne vyplnené údaje:" diff --git a/config/locales/rails-i18n/sl.yml b/config/locales/rails-i18n/sl.yml index d1bdb285b..468e4399b 100644 --- a/config/locales/rails-i18n/sl.yml +++ b/config/locales/rails-i18n/sl.yml @@ -1,6 +1,6 @@ # Slovenian language localization (sl-sl) # by Miha Rebernik -sl: +sl: date: formats: default: "%d.%m.%Y" @@ -24,7 +24,7 @@ sl: short: "%d. %b ob %H:%M" long: "%d. %B, %Y ob %H:%M" simple: "%d. %B %Y ob %H:%M" - + am: "dopoldan" pm: "popoldan" @@ -77,7 +77,7 @@ sl: delimiter: "." # Number of decimals, behind the separator (the number 1 with a precision of 2 gives: 1.00) precision: 2 - + # Used in number_to_currency() currency: format: @@ -88,15 +88,15 @@ sl: separator: "," delimiter: "." precision: 2 - + # Used in number_to_percentage() percentage: format: # These three are to override number.format and are optional - # separator: + # separator: delimiter: "" - # precision: - + # precision: + # Used in number_to_precision() precision: format: @@ -104,12 +104,12 @@ sl: # separator: delimiter: "" # precision: - + # Used in number_to_human_size() human: format: # These three are to override number.format and are optional - # separator: + # separator: delimiter: "" precision: 1 storage_units: @@ -169,7 +169,7 @@ sl: two: "2 meseca" few: "%{count} mesece" other: "%{count} mesecev" - almost_x_years: + almost_x_years: one: "skoraj 1 leto" two: "skoraj 2 leti" few: "skoraj %{count} leta" @@ -190,4 +190,4 @@ sl: day: "Dan" hour: "Ura" minute: "Minute" - second: "Sekunde" \ No newline at end of file + second: "Sekunde" diff --git a/config/locales/rails-i18n/sv-SE.yml b/config/locales/rails-i18n/sv-SE.yml index ddc835fa3..044aa98ee 100644 --- a/config/locales/rails-i18n/sv-SE.yml +++ b/config/locales/rails-i18n/sv-SE.yml @@ -143,6 +143,7 @@ odd: "måste vara udda" even: "måste vara jämnt" record_invalid: "Ett fel uppstod: %{errors}" + not_saved: "Kunde inte sparas" activerecord: errors: diff --git a/config/locales/rails-i18n/sw.yml b/config/locales/rails-i18n/sw.yml index b8875a437..e9b33413f 100644 --- a/config/locales/rails-i18n/sw.yml +++ b/config/locales/rails-i18n/sw.yml @@ -82,11 +82,11 @@ sw: format: '%n %u' units: unit: '' - thousand: "Elfu" - million: "Milioni" - billion: "Bilioni" - trillion: "Trilioni" - quadrillion: "Quadrillion" + thousand: Elfu + million: Milioni + billion: Bilioni + trillion: Trilioni + quadrillion: Quadrillion datetime: distance_in_words: diff --git a/config/locales/rails-i18n/th.rb b/config/locales/rails-i18n/th.rb index 5e82451e5..b07f54807 100644 --- a/config/locales/rails-i18n/th.rb +++ b/config/locales/rails-i18n/th.rb @@ -174,7 +174,7 @@ end }, :errors => { - :format => "%{attribute}%{message}", + :format => "%{attribute} %{message}", :messages => ThaiLocaleI18n::ERROR_MESSAGES }, @@ -191,7 +191,7 @@ end }.merge(ThaiLocaleI18n::ERROR_MESSAGES), :full_messages => { - :format => "%{attribute}%{message}" + :format => "%{attribute} %{message}" }, } } diff --git a/config/locales/rails-i18n/tr.yml b/config/locales/rails-i18n/tr.yml index 058ba12f0..23af454d6 100644 --- a/config/locales/rails-i18n/tr.yml +++ b/config/locales/rails-i18n/tr.yml @@ -1,9 +1,9 @@ -# Turkish translations for Ruby on Rails +# Turkish translations for Ruby on Rails # by Ozgun Ataman (ozataman@gmail.com) tr: locale: - native_name: "Türkçe" + native_name: Türkçe address_separator: " " date: formats: @@ -21,7 +21,7 @@ tr: - :day - :month - :year - + time: formats: default: "%a %d.%b.%y %H:%M" @@ -32,7 +32,7 @@ tr: am: "öğleden önce" pm: "öğleden sonra" - + datetime: distance_in_words: half_a_minute: 'yarım dakika' @@ -71,7 +71,7 @@ tr: almost_x_years: one: "neredeyse 1 yıl" other: "neredeyse %{count} yıl" - + number: format: precision: 2 @@ -109,7 +109,7 @@ tr: words_connector: ", " two_words_connector: " ve " last_word_connector: " ve " - + activerecord: errors: template: diff --git a/config/locales/rails-i18n/uk.yml b/config/locales/rails-i18n/uk.yml index c16e7c9f0..1630fd6f1 100644 --- a/config/locales/rails-i18n/uk.yml +++ b/config/locales/rails-i18n/uk.yml @@ -16,7 +16,7 @@ uk: precision: 3 significant: false strip_insignificant_zeros: false - + # Used in number_to_currency() currency: format: @@ -29,15 +29,15 @@ uk: precision: 2 significant: false strip_insignificant_zeros: false - + # Used in number_to_percentage() percentage: format: # These three are to override number.format and are optional - # separator: + # separator: delimiter: "" - # precision: - + # precision: + # Used in number_to_precision() precision: format: @@ -45,17 +45,17 @@ uk: # separator: delimiter: "" # precision: - + # Used in number_to_human_size() human: format: # These three are to override number.format and are optional - # separator: + # separator: delimiter: "" precision: 1 significant: false strip_insignificant_zeros: false - + storage_units: # Storage units output formatting. # %u is the storage unit, %n is the number (default: 2 MB) @@ -79,8 +79,8 @@ uk: one: "Тисяча" few: "Тисяч" many: "Тисяч" - other: "Тисяч" - million: + other: "Тисяч" + million: one: "Мільйон" few: "Мільйонів" many: "Мільйонів" @@ -112,7 +112,7 @@ uk: other: "менше %{count} секунди" x_seconds: one: "%{count} секунда" - few: "%{count} секунди" + few: "%{count} секунди" many: "%{count} секунд" other: "%{count} секунди" less_than_x_minutes: @@ -160,7 +160,7 @@ uk: few: "майже %{count} років" many: "майже %{count} років" other: "майже %{count} років" - + prompts: year: "Рік" month: "Місяць" @@ -168,7 +168,7 @@ uk: hour: "Година" minute: "Хвилина" second: "Секунда" - + helpers: select: # Default value for :prompt => true in FormOptionsHelper @@ -180,7 +180,7 @@ uk: update: 'Зберегти %{model}' submit: 'Зберегти %{model}' - + errors: format: "%{attribute} %{message}" # The values :model, :attribute and :value are always available for interpolation @@ -193,7 +193,7 @@ uk: accepted: "має бути прийнятий" empty: "не може бути порожнім" blank: "не може бути пустим" - too_long: + too_long: one: "занадто довгий (максимум %{count} знак)" few: "занадто довгий (максимум %{count} знаки)" many: "занадто довгий (максимум %{count} знаків)" @@ -243,7 +243,7 @@ uk: accepted: "має бути прийнятий" empty: "не може бути порожнім" blank: "не може бути пустим" - too_long: + too_long: one: "занадто довгий (максимум %{count} знак)" few: "занадто довгий (максимум %{count} знаки)" many: "занадто довгий (максимум %{count} знаків)" @@ -268,7 +268,7 @@ uk: odd: "має бути непарним" even: "має бути парним" record_invalid: "Виникли помилки: %{errors}" - + date: formats: # Use the strftime parameters for formats. @@ -277,10 +277,10 @@ uk: default: "%d.%m.%Y" short: "%d %b" long: "%d %B %Y" - + day_names: [неділя, понеділок, вівторок, середа, четвер, "п'ятниця", субота] abbr_day_names: [нд., пн., вт., ср., чт., пт., сб.] - + # Don't forget the nil at the beginning; there's no such thing as a 0th month month_names: [~, Січень, Лютий, Березень, Квітень, Травень, Червень, Липень, Серпень, Вересень, Жовтень, Листопад, Грудень] abbr_month_names: [~, січ., лют., бер., квіт., трав., черв., лип., серп., вер., жовт., лист., груд.] @@ -297,7 +297,7 @@ uk: long: "%d %B %Y, %H:%M" am: "до полудня" pm: "по полудні" - + # Used in array.to_sentence. support: select: @@ -308,4 +308,4 @@ uk: words_connector: ", " two_words_connector: " і " last_word_connector: " та " - + diff --git a/config/locales/rails-i18n/vi.yml b/config/locales/rails-i18n/vi.yml index aea7e3e54..0006c7a0c 100644 --- a/config/locales/rails-i18n/vi.yml +++ b/config/locales/rails-i18n/vi.yml @@ -147,16 +147,16 @@ vi: # attributes: # login: # blank: "This is a custom blank message for User login" - # Will define custom blank validation message for User model and + # Will define custom blank validation message for User model and # custom blank validation message for login attribute of User model. # models: - + # Translate model names. Used in Model.human_name(). #models: # For example, # user: "Dude" # will translate User model name to "Dude" - + # Translate model attribute names. Used in Model.human_attribute_name(attribute). #attributes: # For example, diff --git a/config/routes.rb b/config/routes.rb index 096d6e8ce..3160ab45a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -12,18 +12,16 @@ Diaspora::Application.routes.draw do end resources :status_messages, :only => [:new, :create, :destroy, :show] - get 'p/:id' => 'posts#show', :as => 'post' + get 'bookmarklet' => 'status_messages#bookmarklet' + get 'p/:id' => 'posts#show', :as => 'post' resources :photos, :except => [:index] do put 'make_profile_photo' => :make_profile_photo end resources :comments, :only => [:create, :destroy] + resource :like, :only => [:create] - get 'tags/:name' => 'tags#show', :as => 'tag' - resources :tags, :only => [:index] - - resource :like, :only => [:create] resources :conversations do resources :messages, :only => [:create, :show] @@ -34,6 +32,8 @@ Diaspora::Application.routes.draw do get 'read_all' => :read_all, :on => :collection end + resources :tags, :only => [:index] + get 'tags/:name' => 'tags#show', :as => 'tag' # Users and people @@ -42,6 +42,7 @@ Diaspora::Application.routes.draw do get :export_photos end + controller :users do get 'public/:username' => :public, :as => 'users_public' match 'getting_started' => :getting_started, :as => 'getting_started' @@ -61,21 +62,21 @@ Diaspora::Application.routes.draw do get 'login' => redirect('/users/sign_in') scope 'admins', :controller => :admins do - match 'user_search' => :user_search - get 'admin_inviter' => :admin_inviter - get 'add_invites' => :add_invites, :as => 'add_invites' + match 'user_search' => :user_search + get 'admin_inviter' => :admin_inviter + get 'add_invites' => :add_invites, :as => 'add_invites' end - get 'bookmarklet' => 'status_messages#bookmarklet' resource :profile - resources :contacts, :except => [:index, :update, :create] - resources :aspect_memberships, :only => [:destroy, :create, :update] - resources :post_visibilities, :only => [:update] + resources :contacts, :except => [:index, :update, :create] + resources :aspect_memberships, :only => [:destroy, :create, :update] + resources :post_visibilities, :only => [:update] resources :people, :except => [:edit, :update] do resources :status_messages resources :photos + get :contacts post 'by_handle' => :retrieve_remote, :on => :collection, :as => 'person_by_handle' end diff --git a/db/migrate/20110421120744_downcase_usernames.rb b/db/migrate/20110421120744_downcase_usernames.rb new file mode 100644 index 000000000..a4d24d1ab --- /dev/null +++ b/db/migrate/20110421120744_downcase_usernames.rb @@ -0,0 +1,13 @@ +class DowncaseUsernames < ActiveRecord::Migration + def self.up + execute < 20110406203720) do +ActiveRecord::Schema.define(:version => 20110421120744) do create_table "aspect_memberships", :force => true do |t| t.integer "aspect_id", :null => false diff --git a/db/seeds.rb b/db/seeds.rb index ef0d81083..7d8dd676c 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -34,8 +34,8 @@ time_interval = 1000 (1..25).each do |n| [alice, bob, eve].each do |u| post = u.post :status_message, :text => "#{u.username} - #{n} - #seeded", :to => u.aspects.first.id - post.created_at = post.created_at + time_interval - post.updated_at = post.updated_at + time_interval + post.created_at = post.created_at - time_interval + post.updated_at = post.updated_at - time_interval post.save time_interval += 1000 end diff --git a/features/change_password.feature b/features/change_password.feature index 0ee3bc433..d93f2c725 100644 --- a/features/change_password.feature +++ b/features/change_password.feature @@ -11,8 +11,7 @@ Feature: Change password And I fill in "user_password_confirmation" with "newsecret" And I press "Change Password" Then I should see "Password Changed" - And I click on my name in the header - And I follow "logout" + When I sign out Then I should be on the home page And I sign in with password "newsecret" Then I should be on the aspects page diff --git a/features/comments.feature b/features/comments.feature index ac88ce360..55e2ccf9f 100644 --- a/features/comments.feature +++ b/features/comments.feature @@ -61,3 +61,17 @@ Feature: commenting And I click to delete the first comment And I wait for the ajax to finish Then I should not see "is that a poodle?" + + Scenario: expand the comment form + When I sign in as "bob@bob.bob" + Then I should see "Look at this dog" + Then the first comment field should be closed + When I focus the comment field + Then the first comment field should be open + + When I follow "Besties" + And I wait for the ajax to finish + Then I should see "Look at this dog" + Then the first comment field should be closed + When I focus the comment field + Then the first comment field should be open diff --git a/features/embedder.feature b/features/embedder.feature new file mode 100644 index 000000000..a2134415c --- /dev/null +++ b/features/embedder.feature @@ -0,0 +1,25 @@ +# @javascript +# Feature: embedding +# Get sure that embedding stuff actually works +# +# Background: +# Given a user with username "bob" +# When I sign in as "bob@bob.bob" +# And I have no open aspects saved +# And I am on the home page +# +# Scenario: Youtube is fully embedded +# Given I expand the publisher +# When I fill in "status_message_fake_text" with "Look at this awesome video: https://www.youtube.com/watch?v=53tq9g35kwk" +# And I press "Share" +# And I follow "All Aspects" +# Then I should see "Look at this awesome video: Youtube: Leekspin" within ".stream_element" +# When I follow "Youtube: Leekspin" +# And I wait for the ajax to finish +# Then I should see "Watch this video on YouTube" within ".video-container" +# +# #After ajax aspect switch +# When I follow "Besties" +# And I wait for the ajax to finish +# And I follow "Youtube: Leekspin" +# Then I should see "Watch this video on YouTube" within ".video-container" diff --git a/features/infinite_scroll.feature b/features/infinite_scroll.feature new file mode 100644 index 000000000..98181bff1 --- /dev/null +++ b/features/infinite_scroll.feature @@ -0,0 +1,72 @@ +@javascript +Feature: infinite scroll + In order to browse without disruption + As medium-sized internet grazing animal + I want the stream to infinite scroll + + Background: + Given many posts from alice for bob + When I sign in as "bob@bob.bob" + + Scenario: on the main stream + Then I should see 15 posts + And I should see "alice - 15 - #seeded" + + When I scroll down + Then I should see 30 posts + And I should see "alice - 30 - #seeded" + + When I scroll down + Then I should see 40 posts + And I should see "alice - 40 - #seeded" + + When I scroll down + Then I should see "No more" + + When I follow "generic" + And I wait for the ajax to finish + Then I should see 15 posts + And I should see "alice - 15 - #seeded" + + When I scroll down + Then I should see 30 posts + And I should see "alice - 30 - #seeded" + + When I scroll down + Then I should see 40 posts + And I should see "alice - 40 - #seeded" + + When I scroll down + Then I should see "No more" + + Scenario: On a tag page + And I am on the tag page for "seeded" + Then I should see 15 posts + And I should see "alice - 15 - #seeded" + + When I scroll down + Then I should see 30 posts + And I should see "alice - 30 - #seeded" + + When I scroll down + Then I should see 40 posts + And I should see "alice - 40 - #seeded" + + When I scroll down + Then I should see "No more" + + Scenario: On a profile page + And I am on "alice@alice.alice"'s page + Then I should see 15 posts + And I should see "alice - 15 - #seeded" + + When I scroll down + Then I should see 30 posts + And I should see "alice - 30 - #seeded" + + When I scroll down + Then I should see 40 posts + And I should see "alice - 40 - #seeded" + + When I scroll down + Then I should see "No more" diff --git a/features/logs_in_and_out.feature b/features/logs_in_and_out.feature index 9d86be644..b39b3e682 100644 --- a/features/logs_in_and_out.feature +++ b/features/logs_in_and_out.feature @@ -12,5 +12,5 @@ Feature: user authentication Scenario: user logs out Given I am signed in And I click on my name in the header - And I follow "logout" + And I follow "log out" Then I should be on the home page diff --git a/features/step_definitions/comment_steps.rb b/features/step_definitions/comment_steps.rb index 05727152a..e1be708be 100644 --- a/features/step_definitions/comment_steps.rb +++ b/features/step_definitions/comment_steps.rb @@ -1,3 +1,13 @@ When /^I focus the comment field$/ do find("a.focus_comment_textarea").click end + +Then /^the first comment field should be open/ do + css_query = "$('#main_stream .stream_element:first .submit_button .comment_submit.button:visible')" + page.evaluate_script("#{css_query}.length").should == 1 +end + +Then /^the first comment field should be closed$/ do + css_query = "$('#main_stream .stream_element:first .submit_button .comment_submit.button:hidden')" + page.evaluate_script("#{css_query}.length").should == 1 +end diff --git a/features/step_definitions/custom_web_steps.rb b/features/step_definitions/custom_web_steps.rb index fa3d1f146..7a8377a34 100644 --- a/features/step_definitions/custom_web_steps.rb +++ b/features/step_definitions/custom_web_steps.rb @@ -188,3 +188,13 @@ Then /^the "([^"]*)" field(?: within "([^"]*)")? should be filled with "([^"]*)" end end end + +Then /^I should see (\d+) posts$/ do |n_posts| + evaluate_script("$('#main_stream .stream_element').length").should == n_posts.to_i +end + +And /^I scroll down$/ do + evaluate_script("window.scrollBy(0,3000000)") + sleep 1 + wait_until(10) { evaluate_script('$("#infscr-loading:visible").length') == 0 } +end diff --git a/features/step_definitions/session_steps.rb b/features/step_definitions/session_steps.rb index d81fc321a..79ebb7eba 100644 --- a/features/step_definitions/session_steps.rb +++ b/features/step_definitions/session_steps.rb @@ -39,5 +39,5 @@ end When /^I (?:log|sign) out$/ do When 'I click on my name in the header' - And 'I follow "logout"' + And 'I follow "log out"' end diff --git a/features/step_definitions/user_steps.rb b/features/step_definitions/user_steps.rb index af0465bf6..181be70a8 100644 --- a/features/step_definitions/user_steps.rb +++ b/features/step_definitions/user_steps.rb @@ -139,3 +139,17 @@ Given /^there is a user "([^\"]*)" who's tagged "([^\"]*)"$/ do |full_name, tag| user.profile.build_tags user.profile.save! end + +Given /^many posts from alice for bob$/ do + alice = Factory(:user_with_aspect, :username => 'alice', :email => 'alice@alice.alice', :password => 'password', :getting_started => false) + bob = Factory(:user_with_aspect, :username => 'bob', :email => 'bob@bob.bob', :password => 'password', :getting_started => false) + connect_users_with_aspects(alice, bob) + time_interval = 1000 + (1..40).each do |n| + post = alice.post :status_message, :text => "#{alice.username} - #{n} - #seeded", :to => alice.aspects.first.id + post.created_at = post.created_at - time_interval + post.updated_at = post.updated_at - time_interval + post.save + time_interval += 1000 + end +end diff --git a/features/support/env.rb b/features/support/env.rb index 1257f607d..09827a3f5 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -43,6 +43,7 @@ require File.join(File.dirname(__FILE__), "database_cleaner_patches") require File.join(File.dirname(__FILE__), "..", "..", "spec", "support", "fake_redis") require File.join(File.dirname(__FILE__), "..", "..", "spec", "helper_methods") +require File.join(File.dirname(__FILE__), "..", "..", "spec", "support","user_methods") include HelperMethods Before do @@ -52,6 +53,8 @@ end silence_warnings do SERVICES['facebook'] = {'app_id' => :fake} end + +require File.join(File.dirname(__FILE__), "..", "..", "spec", "support", "fake_resque") module Resque def enqueue(klass, *args) klass.send(:perform, *args) diff --git a/lib/collect_user_photos.rb b/lib/collect_user_photos.rb index 358ce4e0c..f91875a0b 100644 --- a/lib/collect_user_photos.rb +++ b/lib/collect_user_photos.rb @@ -5,7 +5,7 @@ module PhotoMover FileUtils::mkdir_p temp_dir Dir.chdir 'tmp/exports' - photos = user.raw_visible_posts.where(:author_id => user.person.id, :type => 'Photo') + photos = user.visible_posts.where(:author_id => user.person.id, :type => 'Photo') photos_dir = "#{user.id}/photos" FileUtils::mkdir_p photos_dir diff --git a/lib/diaspora/exporter.rb b/lib/diaspora/exporter.rb index adb33d26d..36e71444b 100644 --- a/lib/diaspora/exporter.rb +++ b/lib/diaspora/exporter.rb @@ -64,7 +64,7 @@ module Diaspora } xml.posts { - user.raw_visible_posts.find_all_by_author_id(user_person_id).each do |post| + user.visible_posts.find_all_by_author_id(user_person_id).each do |post| #post.comments.each do |comment| # post_doc << comment.to_xml #end diff --git a/lib/diaspora/ostatus_builder.rb b/lib/diaspora/ostatus_builder.rb index bd5b81931..e5fd0e855 100644 --- a/lib/diaspora/ostatus_builder.rb +++ b/lib/diaspora/ostatus_builder.rb @@ -44,8 +44,8 @@ module Diaspora http://activitystrea.ms/schema/1.0/person #{x(@user.name)} - "#{AppConfig[:pod_url]}/people/#{@user.person.id}" - + #{AppConfig[:pod_url]}people/#{@user.person.id} + #{x(@user.username)} #{x(@user.person.name)} diff --git a/lib/diaspora/taggable.rb b/lib/diaspora/taggable.rb index 74b4377ff..2eff35442 100644 --- a/lib/diaspora/taggable.rb +++ b/lib/diaspora/taggable.rb @@ -4,7 +4,7 @@ module Diaspora module Taggable - VALID_TAG_BODY = /[^_,\s#*\[\]()\:\@\/"'\.%]+/ + VALID_TAG_BODY = /[^_,\s#*\[\]()\@\/"'\.%]+\b/ def self.included(model) model.class_eval do diff --git a/lib/diaspora/user/querying.rb b/lib/diaspora/user/querying.rb index df19e394e..9eaa425a7 100644 --- a/lib/diaspora/user/querying.rb +++ b/lib/diaspora/user/querying.rb @@ -12,14 +12,16 @@ module Diaspora post ||= Post.where(:id => id, :public => true).where(opts).first end - def raw_visible_posts(opts = {}) + def visible_posts(opts = {}) opts = opts.dup opts[:type] ||= ['StatusMessage', 'Photo'] opts[:limit] ||= 15 opts[:order] ||= 'updated_at DESC' + order_field = opts[:order].split.first.to_sym opts[:hidden] ||= false order_with_table = 'posts.' + opts[:order] - opts[:offset] = opts[:page].nil? || opts[:page] == 1 ? 0 : opts[:limit] * (opts[:page] - 1) + opts[:max_time] = Time.at(opts[:max_time]) if opts[:max_time].is_a?(Integer) + opts[:max_time] ||= Time.now + 1 select_clause ='DISTINCT posts.id, posts.updated_at AS updated_at, posts.created_at AS created_at' posts_from_others = Post.joins(:contacts).where( :post_visibilities => {:hidden => opts[:hidden]}, :contacts => {:user_id => self.id}) @@ -31,8 +33,8 @@ module Diaspora posts_from_self = posts_from_self.joins(:aspect_visibilities).where(:aspect_visibilities => {:aspect_id => opts[:by_members_of]}) end - posts_from_others = posts_from_others.select(select_clause).limit(opts[:limit]).offset(opts[:offset]).order(order_with_table) - posts_from_self = posts_from_self.select(select_clause).limit(opts[:limit]).offset(opts[:offset]).order(order_with_table) + posts_from_others = posts_from_others.select(select_clause).limit(opts[:limit]).order(order_with_table).where(Post.arel_table[order_field].lt(opts[:max_time])) + posts_from_self = posts_from_self.select(select_clause).limit(opts[:limit]).order(order_with_table).where(Post.arel_table[order_field].lt(opts[:max_time])) all_posts = "(#{posts_from_others.to_sql}) UNION ALL (#{posts_from_self.to_sql}) ORDER BY #{opts[:order]} LIMIT #{opts[:limit]}" post_ids = Post.connection.execute(all_posts).map{|r| r.first} @@ -40,8 +42,8 @@ module Diaspora Post.where(:id => post_ids, :pending => false, :type => opts[:type]).select('DISTINCT posts.*').limit(opts[:limit]).order(order_with_table) end - def visible_photos - raw_visible_posts(:type => 'Photo') + def visible_photos(opts = {}) + visible_posts(opts.merge(:type => 'Photo')) end def contact_for(person) diff --git a/lib/fake.rb b/lib/fake.rb index 77050ff10..2a1c86d27 100644 --- a/lib/fake.rb +++ b/lib/fake.rb @@ -1,6 +1,6 @@ class PostsFake attr_reader :people_hash, :post_fakes - delegate :length, :each, :to_ary, :to => :post_fakes + delegate :length, :each, :to_ary, :last, :to => :post_fakes def initialize(posts) author_ids = [] diff --git a/lib/splunk_logging.rb b/lib/splunk_logging.rb index 39f58763f..53a79ecea 100644 --- a/lib/splunk_logging.rb +++ b/lib/splunk_logging.rb @@ -5,7 +5,9 @@ module SplunkLogging end end def add_with_splunk(arg1, log_hash = nil, arg3 = nil, &block) - add_without_splunk(arg1, format_hash(log_hash), arg3, &block) + string = format_hash(log_hash).dup + string << "pid=#{Process.pid} " + add_without_splunk(arg1, string, arg3, &block) end def format_hash(hash) if hash.respond_to?(:keys) diff --git a/public/javascripts/apiconsole.js b/public/javascripts/apiconsole.js index e9a4c7a48..1a51d56a4 100644 --- a/public/javascripts/apiconsole.js +++ b/public/javascripts/apiconsole.js @@ -3,13 +3,13 @@ var ApiConsole = { prettyPrint: function(obj, indent) { var result = ""; - if (indent == null) indent = ""; + if (indent === null) { indent = ""; } for (var property in obj) { var value = obj[property]; if (typeof value == 'string') - value = "'" + value + "'"; + { value = "'" + value + "'"; } else if (typeof value == 'object') { if (value instanceof Array) @@ -46,7 +46,7 @@ var ApiConsole = { }); }); } -} +}; $(document).ready(function(){ diff --git a/public/javascripts/aspect-edit.js b/public/javascripts/aspect-edit.js index 5edfe368e..3cb4d2b3a 100644 --- a/public/javascripts/aspect-edit.js +++ b/public/javascripts/aspect-edit.js @@ -46,9 +46,9 @@ var AspectEdit = { var dropzone = $(this); var person = ui.draggable; - if (person.attr('data-aspect_id') != undefined && // a request doesn't have a data-aspect_id, but an existing contact does + if (person.attr('data-aspect_id') !== undefined && // a request doesn't have a data-aspect_id, but an existing contact does dropzone.attr('data-aspect_id') != person.attr('data-aspect_id')) { - var aspect_id = person.attr('data-aspect_id') + var aspect_id = person.attr('data-aspect_id'); $.ajax({ type: "PUT", url: "/aspect_memberships/garbage", diff --git a/public/javascripts/aspect-filters.js b/public/javascripts/aspect-filters.js index fd1e62d61..19557ca1c 100644 --- a/public/javascripts/aspect-filters.js +++ b/public/javascripts/aspect-filters.js @@ -3,98 +3,105 @@ * the COPYRIGHT file. */ -$(document).ready(function(){ - var selectedGUIDS = [], - requests = 0; +var AspectFilters = { + selectedGUIDS: [], + requests: 0, + initialize: function(){ + AspectFilters.initializeSelectedGUIDS(); + AspectFilters.interceptAspectLinks(); + AspectFilters.interceptAspectNavLinks(); - $("#aspect_nav li").each(function(){ - var button = $(this), - guid = button.attr('data-guid'); - - if(guid && location.href.search("a_ids..="+guid+"(&|$)") != -1){ - button.addClass('selected'); - selectedGUIDS.push(guid); + if($("a.home_selector").parent().hasClass("selected")){ + AspectFilters.performAspectUpdate(); } - }); + }, + initializeSelectedGUIDS: function(){ + $("#aspect_nav li").each(function(){ + var button = $(this), + guid = button.attr('data-guid'); - - $("a.hard_aspect_link").live("click", function(e){ + if(guid && location.href.search("a_ids..="+guid+"(&|$)") != -1){ + button.addClass('selected'); + AspectFilters.selectedGUIDS.push(guid); + } + }); + }, + interceptAspectLinks: function(){ + $("a.hard_aspect_link").live("click", AspectFilters.aspectLinkClicked); + }, + aspectLinkClicked: function(e){ var link = $(this); + e.preventDefault(); if( !link.hasClass('aspect_selector') ){ - e.preventDefault(); - requests++; - - var guid = $(this).attr('data-guid'); - - // select correct aspect in filter list & deselect others - $("#aspect_nav li").each(function(){ - var $this = $(this); - if( $this.attr('data-guid') == guid){ - $this.addClass('selected'); - } else { - $this.removeClass('selected'); - } - }); - - // loading animation - $("#aspect_stream_container").fadeTo(200, 0.4); - $("#aspect_contact_pictures").fadeTo(200, 0.4); - - performAjax( $(this).attr('href')); + AspectFilters.switchToAspect(link); } + // remove focus + this.blur(); + $('html, body').animate({scrollTop:0}, 'fast'); - }); + }, + switchToAspect: function(aspectLi){ + AspectFilters.requests++; - $("#aspect_nav a.aspect_selector").click(function(e){ - e.preventDefault(); + var guid = aspectLi.attr('data-guid'); - requests++; + // select correct aspect in filter list & deselect others + $("#aspect_nav li").removeClass('selected'); + aspectLi.addClass('selected'); - // loading animation - $("#aspect_stream_container").fadeTo(100, 0.4); - $("#aspect_contact_pictures").fadeTo(100, 0.4); + AspectFilters.fadeOut(); - // filtering ////////////////////// - var $this = $(this), - listElement = $this.parent(), - guid = listElement.attr('data-guid'), - homeListElement = $("#aspect_nav a.home_selector").parent(); + AspectFilters.performAjax( aspectLi.attr('href')); + }, + interceptAspectNavLinks: function(){ + $("#aspect_nav a.aspect_selector").click(function(e){ + e.preventDefault(); - if( listElement.hasClass('selected') ){ - // remove filter - var idx = selectedGUIDS.indexOf( guid ); - if( idx != -1 ){ - selectedGUIDS.splice(idx,1); - } - listElement.removeClass('selected'); + AspectFilters.requests++; - if(selectedGUIDS.length == 0){ - homeListElement.addClass('selected'); + // loading animation + AspectFilters.fadeOut(); + + // filtering ////////////////////// + var $this = $(this), + listElement = $this.parent(), + guid = listElement.attr('data-guid'), + homeListElement = $("#aspect_nav a.home_selector").parent(); + + if( listElement.hasClass('selected') ){ + // remove filter + var idx = AspectFilters.selectedGUIDS.indexOf( guid ); + if( idx != -1 ){ + AspectFilters.selectedGUIDS.splice(idx,1); + } + listElement.removeClass('selected'); + + if(AspectFilters.selectedGUIDS.length === 0){ + homeListElement.addClass('selected'); + } + + } else { + // append filter + if(AspectFilters.selectedGUIDS.indexOf( guid == 1)){ + AspectFilters.selectedGUIDS.push( guid ); + } + listElement.addClass('selected'); + + homeListElement.removeClass('selected'); } - } else { - // append filter - if(selectedGUIDS.indexOf( guid == 1)){ - selectedGUIDS.push( guid ); - } - listElement.addClass('selected'); - - homeListElement.removeClass('selected'); - } - - performAjax(generateURL()); - }); - - - function generateURL(){ + AspectFilters.performAjax(AspectFilters.generateURL()); + }); + }, + generateURL: function(){ var baseURL = location.href.split("?")[0]; // generate new url baseURL = baseURL.replace('#',''); baseURL += '?'; - for(i=0; i < selectedGUIDS.length; i++){ - baseURL += 'a_ids[]='+ selectedGUIDS[i] +'&'; + for(i=0; i < AspectFilters.selectedGUIDS.length; i++){ + baseURL += 'a_ids[]='+ AspectFilters.selectedGUIDS[i] +'&'; } if(!$("#publisher").hasClass("closed")) { @@ -105,46 +112,36 @@ $(document).ready(function(){ baseURL = baseURL.slice(0,baseURL.length-1); } return baseURL; - } - - function performAspectUpdate(){ - // update the open aspects in the user - updateURL = "/user"; - updateURL += '?'; - if(selectedGUIDS.length == 0){ - updateURL += 'user[a_ids][]=home'; - } else { - for(i=0; i < selectedGUIDS.length; i++){ - updateURL += 'user[a_ids][]='+ selectedGUIDS[i] +'&'; - } + }, + performAspectUpdate: function(){ + // update the open aspects in the user + updateURL = "/user"; + updateURL += '?'; + if(AspectFilters.selectedGUIDS.length === 0){ + updateURL += 'user[a_ids][]=home'; + } else { + for(i=0; i < AspectFilters.selectedGUIDS.length; i++){ + updateURL += 'user[a_ids][]='+ AspectFilters.selectedGUIDS[i] +'&'; } + } - $.ajax({ - url : updateURL, - type: "PUT", - }); - - } - - if($("a.home_selector").parent().hasClass("selected")){ - performAspectUpdate(); - } - - function performAjax(newURL) { + $.ajax({ + url : updateURL, + type: "PUT" + }); + }, + performAjax: function(newURL) { var post = $("#publisher textarea").val(), photos = {}; - //pass photos $('#photodropzone img').each(function(){ var img = $(this); - guid = img.attr('data-id'); - url = img.attr('src'); + var guid = img.attr('data-id'); + var url = img.attr('src'); photos[guid] = url; }); - - // set url // some browsers (Firefox for example) don't support pushState if (typeof(history.pushState) == 'function') { @@ -155,14 +152,14 @@ $(document).ready(function(){ url : newURL, dataType : 'script', success : function(data){ - requests--; + AspectFilters.requests--; // fill in publisher // (not cached because this element changes) var textarea = $("#publisher textarea"); - var photozone = $('#photodropzone') + var photozone = $('#photodropzone'); - if( post != "" ) { + if( post !== "" ) { textarea.val(post); textarea.focus(); } @@ -171,24 +168,29 @@ $(document).ready(function(){ for(var key in photos){ $("#publisher textarea").addClass("with_attachments"); photos_html = photos_html + "
  • " + ("") + "
  • "; - }; + } // reinit listeners on stream photozone.html(photos_html); - Stream.initialize(); - InfiniteScroll.initialize(); - - Publisher.initialize(); + Diaspora.widgets.publish("stream/reloaded"); // fade contents back in - if(requests == 0){ - $("#aspect_stream_container").fadeTo(100, 1); - $("#aspect_contact_pictures").fadeTo(100, 1); - performAspectUpdate(); + if(AspectFilters.requests === 0){ + AspectFilters.fadeIn(); + AspectFilters.performAspectUpdate(); } } }); - + }, + fadeIn: function(){ + $("#aspect_stream_container").fadeTo(100, 1); + $("#aspect_contact_pictures").fadeTo(100, 1); + }, + fadeOut: function(){ + $("#aspect_stream_container").fadeTo(100, 0.4); + $("#aspect_contact_pictures").fadeTo(100, 0.4); } - +} +$(document).ready(function(){ + AspectFilters.initialize(); }); diff --git a/public/javascripts/contact-list.js b/public/javascripts/contact-list.js index 3120626b5..439f1228b 100644 --- a/public/javascripts/contact-list.js +++ b/public/javascripts/contact-list.js @@ -47,7 +47,6 @@ $(document).ready(function() { $(this).fadeTo(200,0.4); }); - $('.added').live('ajax:failure', function(data, html, xhr) { if(confirm(Diaspora.widgets.i18n.t('shared.contact_list.cannot_remove'))){ var contact_id; @@ -64,7 +63,6 @@ $(document).ready(function() { $(this).fadeTo(200,1); }); - $('.added').live('mouseover', function() { $(this).addClass("remove"); $(this).children("img").attr("src","/images/icons/monotone_close_exit_delete.png"); diff --git a/public/javascripts/diaspora.js b/public/javascripts/diaspora.js index a896631cc..8b2e8c032 100644 --- a/public/javascripts/diaspora.js +++ b/public/javascripts/diaspora.js @@ -3,33 +3,53 @@ * the COPYRIGHT file. */ -var Diaspora = Diaspora || {}; +(function() { + if(typeof window.Diaspora !== "undefined") { + return; + } -Diaspora.widgetCollection = function() { - this.initialized = false; - this.collection = {}; -}; + var Diaspora = { }; -Diaspora.widgetCollection.prototype.add = function(widgetId, widget) { + Diaspora.WidgetCollection = function() { + this.initialized = false; + this.collection = { }; + this.eventsContainer = $({}); + }; + + Diaspora.WidgetCollection.prototype.add = function(widgetId, widget) { this[widgetId] = this.collection[widgetId] = new widget(); if(this.initialized) { this.collection[widgetId].start(); } }; -Diaspora.widgetCollection.prototype.remove = function(widgetId) { + Diaspora.WidgetCollection.prototype.remove = function(widgetId) { delete this.collection[widgetId]; -}; + }; -Diaspora.widgetCollection.prototype.init = function() { - this.initialized = true; - for(var widgetId in this.collection) { - this.collection[widgetId].start(); - } -} + Diaspora.WidgetCollection.prototype.init = function() { + this.initialized = true; -Diaspora.widgets = Diaspora.widgets || new Diaspora.widgetCollection(); + for(var widgetId in this.collection) { + if(typeof this.collection[widgetId].start !== "undefined") { + this.collection[widgetId].start(); + } + } + }; + + Diaspora.WidgetCollection.prototype.subscribe = function(id, callback, context) { + this.eventsContainer.bind(id, $.proxy(callback, context)); + }; + + Diaspora.WidgetCollection.prototype.publish = function(id) { + this.eventsContainer.trigger(id); + }; + + Diaspora.widgets = new Diaspora.WidgetCollection(); + + window.Diaspora = Diaspora; +})(); + + +$(document).ready(function() { Diaspora.widgets.init(); }); -$(document).ready(function() { - Diaspora.widgets.init(); -}); diff --git a/public/javascripts/fileuploader-custom.js b/public/javascripts/fileuploader-custom.js index 7b9b044d9..4fc1ad643 100644 --- a/public/javascripts/fileuploader-custom.js +++ b/public/javascripts/fileuploader-custom.js @@ -28,12 +28,12 @@ qq.extend = function(first, second){ * @param {Number} [from] The index at which to begin the search */ qq.indexOf = function(arr, elt, from){ - if (arr.indexOf) return arr.indexOf(elt, from); + if (arr.indexOf) { return arr.indexOf(elt, from); } from = from || 0; var len = arr.length; - if (from < 0) from += len; + if (from < 0) { from += len; } for (; from < len; from++){ if (from in arr && arr[from] === elt){ @@ -89,7 +89,7 @@ qq.remove = function(element){ qq.contains = function(parent, descendant){ // compareposition returns false in this case - if (parent == descendant) return true; + if (parent == descendant) { return true; } if (parent.contains){ return parent.contains(descendant); @@ -120,7 +120,7 @@ qq.toElement = (function(){ * Fixes opacity in IE6-8. */ qq.css = function(element, styles){ - if (styles.opacity != null){ + if (styles.opacity !== null){ if (typeof element.style.opacity != 'string' && typeof(element.filters) != 'undefined'){ styles.filter = 'alpha(opacity=' + Math.round(100 * styles.opacity) + ')'; } diff --git a/public/javascripts/inbox.js b/public/javascripts/inbox.js index 6320659a5..637b6480d 100644 --- a/public/javascripts/inbox.js +++ b/public/javascripts/inbox.js @@ -16,7 +16,7 @@ $(document).ready(function(){ if(conv.hasClass('unread') ){ conv.removeClass('unread'); } - if(cBadge.html() != null) { + if(cBadge.html() !== null) { cBadge.html().replace(/\d+/, function(num){ num = parseInt(num); cBadge.html(parseInt(num)-1); @@ -30,7 +30,7 @@ $(document).ready(function(){ }); $(window).bind("popstate", function(){ - if (location.href.match(/conversations\/\d+/) != null) { + if (location.href.match(/conversations\/\d+/) !== null) { $.getScript(location.href, function() { Diaspora.widgets.directionDetector.updateBinds(); }); @@ -72,7 +72,7 @@ $(document).ready(function(){ // remove the paginator when we're done. $(document).ajaxError(function(e,xhr,opt){ - if (xhr.status == 404) $('a.next_page').remove(); + if (xhr.status == 404) { $('a.next_page').remove(); } }); $('#reply_to_conversation').live('click', function(evt) { @@ -84,7 +84,7 @@ $(document).ready(function(){ }); var resize = function(){ - var inboxSidebar = $('#conversation_inbox'); + var inboxSidebar = $('#conversation_inbox'), inboxSidebarOffset = inboxSidebar.offset().top, windowHeight = $(window).height(); diff --git a/public/javascripts/infinite-scroll.js b/public/javascripts/infinite-scroll.js deleted file mode 100644 index 9ec191d41..000000000 --- a/public/javascripts/infinite-scroll.js +++ /dev/null @@ -1,36 +0,0 @@ -var InfiniteScroll = { - options: { - navSelector : "#pagination", - // selector for the paged navigation (it will be hidden) - nextSelector : ".paginate", - // selector for the NEXT link (to page 2) - itemSelector : ".stream_element", - // selector for all items you'll retrieve - pathParse : function( pathStr, nextPage ){ - var newPath = pathStr.replace("?", "?only_posts=true&"); - return newPath.replace( "page=2", "page=" + nextPage); - }, - bufferPx: 500, - debug: false, - donetext: "no more.", - loadingText: "", - loadingImg: '/images/ajax-loader.gif' - }, - postScrollCallback: function(){ - for (var callback in InfiniteScroll.postScrollCallbacks){ - InfiniteScroll.postScrollCallbacks[callback](); - } - }, - postScrollCallbacks: [], - initialize: function(){ - $('#main_stream').infinitescroll(InfiniteScroll.options, InfiniteScroll.postScrollCallback); - }, - postScroll: function( callback ){ - InfiniteScroll.postScrollCallbacks.push(callback); - } -} - -$(document).ready(function() { - InfiniteScroll.initialize(); -}); - diff --git a/public/javascripts/keycodes.js b/public/javascripts/keycodes.js index ca275d1ce..ae6c143db 100644 --- a/public/javascripts/keycodes.js +++ b/public/javascripts/keycodes.js @@ -112,5 +112,5 @@ isInsertion : function(keyCode){ }else { return true; } -}, } +}; diff --git a/public/javascripts/publisher.js b/public/javascripts/publisher.js index 89e215baa..621935201 100644 --- a/public/javascripts/publisher.js +++ b/public/javascripts/publisher.js @@ -28,13 +28,6 @@ var Publisher = { } return Publisher.cachedInput; }, - cachedSubmit : false, - submit: function(){ - if(!Publisher.cachedSubmit){ - Publisher.cachedSubmit = Publisher.form().find('#status_message_submit'); - } - return Publisher.cachedSubmit; - }, cachedHiddenInput : false, hiddenInput: function(){ @@ -107,7 +100,7 @@ var Publisher = { }, generateHiddenInput : function(visibleString){ var resultString = visibleString; - for(i in this.sortedMentions()){ + for(var i in this.sortedMentions()){ var mention = this.mentions[i]; var start = resultString.slice(0, mention.visibleStart); var insertion = mention.mentionString; @@ -165,14 +158,14 @@ var Publisher = { }, updateMentionLocations : function(effectiveCursorIndex, offset){ var changedMentions = this.mentionsAfter(effectiveCursorIndex); - for(i in changedMentions){ + for(var i in changedMentions){ var mention = changedMentions[i]; mention.visibleStart += offset; mention.visibleEnd += offset; } }, mentionAt : function(visibleCursorIndex){ - for(i in this.mentions){ + for(var i in this.mentions){ var mention = this.mentions[i]; if(visibleCursorIndex > mention.visibleStart && visibleCursorIndex < mention.visibleEnd){ return i; @@ -182,14 +175,14 @@ var Publisher = { }, mentionsAfter : function(visibleCursorIndex){ var resultMentions = []; - for(i in this.mentions){ + for(var i in this.mentions){ var mention = this.mentions[i]; if(visibleCursorIndex <= mention.visibleStart){ resultMentions.push(mention); } } return resultMentions; - }, + } }, repopulateHiddenInput: function(){ var newHiddenVal = Publisher.autocompletion.mentionList.generateHiddenInput(Publisher.input().val()); @@ -207,8 +200,8 @@ var Publisher = { var input = Publisher.input(); var selectionStart = input[0].selectionStart; var selectionEnd = input[0].selectionEnd; - var isDeletion = (event.keyCode == KEYCODES.DEL && selectionStart < input.val().length) || (event.keyCode == KEYCODES.BACKSPACE && (selectionStart > 0 || selectionStart != selectionEnd)) - var isInsertion = (KEYCODES.isInsertion(event.keyCode) && event.keyCode != KEYCODES.RETURN ) + var isDeletion = (event.keyCode == KEYCODES.DEL && selectionStart < input.val().length) || (event.keyCode == KEYCODES.BACKSPACE && (selectionStart > 0 || selectionStart != selectionEnd)); + var isInsertion = (KEYCODES.isInsertion(event.keyCode) && event.keyCode != KEYCODES.RETURN ); if(isDeletion){ Publisher.autocompletion.mentionList.deletionAt(selectionStart, selectionEnd, event.keyCode); @@ -226,15 +219,15 @@ var Publisher = { var stringEnd = inputContent.slice(stringLoc[1]); input.val(stringStart + formatted + stringEnd); - var offset = formatted.length - (stringLoc[1] - stringLoc[0]) + var offset = formatted.length - (stringLoc[1] - stringLoc[0]); Publisher.autocompletion.mentionList.updateMentionLocations(stringStart.length, offset); - return [stringStart.length, stringStart.length + formatted.length] + return [stringStart.length, stringStart.length + formatted.length]; }, findStringToReplace: function(value, cursorIndex){ var atLocation = value.lastIndexOf('@', cursorIndex); if(atLocation == -1){return [0,0];} - var nextAt = cursorIndex + var nextAt = cursorIndex; if(nextAt == -1){nextAt = value.length;} return [atLocation, nextAt]; @@ -247,7 +240,7 @@ var Publisher = { if(stringLoc[0] <= 2){ stringLoc[0] = 0; }else{ - stringLoc[0] -= 2 + stringLoc[0] -= 2; } var relevantString = value.slice(stringLoc[0], stringLoc[1]).replace(/\s+$/,""); @@ -270,9 +263,9 @@ var Publisher = { } }, determineSubmitAvailability: function(){ - var onlyWhitespaces = (Publisher.input().val().trim() == ''); + var onlyWhitespaces = (Publisher.input().val().trim() === ''); var isSubmitDisabled = Publisher.submit().attr('disabled'); - var isPhotoAttached = ($("#photodropzone").children().length > 0) + var isPhotoAttached = ($("#photodropzone").children().length > 0); if ((onlyWhitespaces && !isPhotoAttached) && !isSubmitDisabled) { Publisher.submit().attr('disabled', true); } else if ((!onlyWhitespaces || isPhotoAttached) && isSubmitDisabled) { @@ -295,40 +288,40 @@ var Publisher = { $(this).toggleClass("dim"); var public_field= $("#publisher #status_message_public"); - (public_field.val() == 'false')?(public_field.val('true')):(public_field.val('false')); + (public_field.val() == 'false') ? (public_field.val('true')) : (public_field.val('false')); }); }, toggleServiceField: function(service){ Publisher.createCounter(service); var provider = service.attr('id'); - var hidden_field = $('#publisher [name="services[]"][value="'+provider+'"]') + var hidden_field = $('#publisher [name="services[]"][value="'+provider+'"]'); if(hidden_field.length > 0){ hidden_field.remove(); } else { $("#publisher .content_creation form").append( ''); - }; + } }, toggleAspectIds: function(aspectId) { - var hidden_field = $('#publisher [name="aspect_ids[]"][value="'+aspectId+'"]') + var hidden_field = $('#publisher [name="aspect_ids[]"][value="'+aspectId+'"]'); if(hidden_field.length > 0){ hidden_field.remove(); } else { $("#publisher .content_creation form").append( ''); - }; + } }, createCounter: function(service){ var counter = $("#publisher .counter"); counter.remove(); - + var min = 40000; var a = $('.service_icon:not(.dim)'); if(a.length > 0){ $.each(a, function(index, value){ var num = parseInt($(value).attr('maxchar')); - if (min > num) { min = num} + if (min > num) { min = num; } }); $('#status_message_fake_text').charCount({allowed: min, warning: min/10 }); } @@ -338,26 +331,24 @@ var Publisher = { $('#publisher .aspect_badge').bind("click", function(){ var unremovedAspects = $(this).parent().children('.aspect_badge').length - $(this).parent().children(".aspect_badge.removed").length; if(!$(this).hasClass('removed') && ( unremovedAspects == 1 )){ - alert(Diaspora.widgets.i18n.t('publisher.at_least_one_aspect')) + alert(Diaspora.widgets.i18n.t('publisher.at_least_one_aspect')); }else{ Publisher.toggleAspectIds($(this).children('a').attr('data-guid')); $(this).toggleClass("removed"); - }; + } }); }, initialize: function() { - Publisher.cachedForm = false; - Publisher.cachedInput = false; - Publisher.cachedHiddenInput = false; - Publisher.cachedSubmit = false; + Publisher.cachedForm = Publisher.cachedSubmit = + Publisher.cachedInput = Publisher.cachedHiddenInput = false; Publisher.bindServiceIcons(); Publisher.bindPublicIcon(); Publisher.bindAspectToggles(); - if ($("#status_message_fake_text").val() == "") { + if ($("#status_message_fake_text").val() === "") { Publisher.close(); - }; + } Publisher.autocompletion.initialize(); Publisher.hiddenInput().val(Publisher.input().val()); @@ -371,4 +362,5 @@ var Publisher = { $(document).ready(function() { Publisher.initialize(); + Diaspora.widgets.subscribe("stream/reloaded", Publisher.initialize); }); diff --git a/public/javascripts/stream.js b/public/javascripts/stream.js index e5f3b5e37..646365a91 100644 --- a/public/javascripts/stream.js +++ b/public/javascripts/stream.js @@ -5,24 +5,27 @@ var Stream = { initialize: function() { - var $stream = $(".stream"); - var $publisher = $("#publisher"); + var stream_string = '#main_stream'; + var $stream = $(stream_string); $(".status_message_delete").tipsy({trigger: 'hover', gravity: 'n'}); + Diaspora.widgets.subscribe("stream/reloaded", Stream.initialized); Diaspora.widgets.timeago.updateTimeAgo(); Diaspora.widgets.directionDetector.updateBinds(); - $stream.not(".show").delegate("a.show_post_comments", "click", Stream.toggleComments); + + + $(stream_string + " a.show_post_comments:not(.show)").live("click", Stream.toggleComments); //audio linx Stream.setUpAudioLinks(); //Stream.setUpImageLinks(); // comment link form focus - $stream.delegate(".focus_comment_textarea", "click", function(e){ + $(stream_string + " .focus_comment_textarea").live("click", function(e){ Stream.focusNewComment($(this), e); }); - $stream.delegate("textarea.comment_box", "focus", function(evt) { + $(stream_string + " textarea.comment_box").live("focus", function(evt) { var commentBox = $(this); commentBox .attr('rows',2) @@ -30,7 +33,7 @@ var Stream = { .addClass('open'); }); - $stream.delegate("textarea.comment_box", "blur", function(evt) { + $(stream_string + " textarea.comment_box").live("blur", function(evt) { var commentBox = $(this); if (!commentBox.val()) { commentBox @@ -42,18 +45,18 @@ var Stream = { }); // like/dislike - $stream.delegate("a.expand_likes", "click", function(evt) { + $(stream_string + " a.expand_likes").live("click", function(evt) { evt.preventDefault(); $(this).siblings('.likes_list').fadeToggle('fast'); }); - $stream.delegate("a.expand_dislikes", "click", function(evt) { + $(stream_string + " a.expand_dislikes").live("click", function(evt) { evt.preventDefault(); $(this).siblings('.dislikes_list').fadeToggle('fast'); }); // reshare button action - $stream.delegate(".reshare_button", "click", function(evt) { + $(stream_string + ' .reshare_button').live("click", function(evt) { evt.preventDefault(); var button = $(this); var box = button.siblings(".reshare_box"); @@ -77,24 +80,24 @@ var Stream = { Stream.setUpAudioLinks(); }); - $(".new_status_message").bind('ajax:failure', function(data, html , xhr) { - json = $.parseJSON(html.response); - if(json.errors.length != 0){ + $(".new_status_message").live('ajax:failure', function(data, html , xhr) { + json = $.parseJSON(html.responseText); + if(json.errors.length !== 0){ Diaspora.widgets.alert.alert(json.errors); }else{ Diaspora.widgets.alert.alert('Failed to post message!'); } }); - $(".new_comment").live('ajax:success', function(data, json, xhr) { + $(stream_string + " .new_comment").live('ajax:success', function(data, json, xhr) { json = $.parseJSON(json); WebSocketReceiver.processComment(json.post_id, json.comment_id, json.html, false); }); - $(".new_comment").live('ajax:failure', function(data, html, xhr) { + $(stream_string + ".new_comment").live('ajax:failure', function(data, html, xhr) { Diaspora.widgets.alert.alert('Failed to post message!'); }); - $(".stream").find(".comment_delete", ".comment").live('ajax:success', function(data, html, xhr) { + $stream.find(".comment_delete", ".comment").live('ajax:success', function(data, html, xhr) { var element = $(this), target = element.parents(".comment"), post = element.closest('.stream_element'), @@ -183,7 +186,7 @@ var Stream = { commentBlock.removeClass('hidden'); commentBlock.find('textarea').focus(); } else { - if(!(commentBlock.children().length > 1)){ + if(commentBlock.children().length <= 1){ commentBlock.addClass('hidden'); } else { commentBlock.find('textarea').focus(); diff --git a/public/javascripts/vendor/jquery.infinitescroll.min.js b/public/javascripts/vendor/jquery.infinitescroll.min.js index c092afa69..5249dec6c 100644 --- a/public/javascripts/vendor/jquery.infinitescroll.min.js +++ b/public/javascripts/vendor/jquery.infinitescroll.min.js @@ -1,9 +1,8 @@ /*! // Infinite Scroll jQuery plugin // copyright Paul Irish, licensed GPL & MIT -// version 1.5.101207 +// version 2.0b1.110420 // home and docs: http://www.infinite-scroll.com */ -(function($){$.fn.infinitescroll=function(options,callback){function debug(){if(opts.debug){window.console&&console.log.call(console,arguments)}}function areSelectorsValid(opts){for(var key in opts){if(key.indexOf&&key.indexOf("Selector")>-1&&$(opts[key]).length===0){debug("Your "+key+" found no elements.");return false}return true}}function determinePath(path){if(path.match(/^(.*?)\b2\b(.*?$)/)){path=path.match(/^(.*?)\b2\b(.*?$)/).slice(1)}else{if(path.match(/^(.*?)2(.*?$)/)){if(path.match(/^(.*?page=)2(\/.*|$)/)){path=path.match(/^(.*?page=)2(\/.*|$)/).slice(1);return path}debug("Trying backup next selector parse technique. Treacherous waters here, matey.");path=path.match(/^(.*?)2(.*?$)/).slice(1)}else{if(path.match(/^(.*?page=)1(\/.*|$)/)){path=path.match(/^(.*?page=)1(\/.*|$)/).slice(1);return path}if($.isFunction(opts.pathParse)){return[path]}else{debug("Sorry, we couldn't parse your Next (Previous Posts) URL. Verify your the css selector points to the correct A tag. If you still get this error: yell, scream, and kindly ask for help at infinite-scroll.com.");props.isInvalidPage=true}}}return path}function filterNav(){opts.isFiltered=true;return $(window).trigger("error.infscr."+opts.infid,[302])}function isNearBottom(){var pixelsFromWindowBottomToBottom=0+$(document).height()-($(props.container).scrollTop()||$(props.container.ownerDocument.body).scrollTop())-$(window).height();debug("math:",pixelsFromWindowBottomToBottom,props.pixelsFromNavToBottom);return(pixelsFromWindowBottomToBottom-opts.bufferPx"):$("
    ");frag=document.createDocumentFragment();if($.isFunction(opts.pathParse)){desturl=opts.pathParse(path.join("2"),opts.currPage)}else{desturl=path.join(opts.currPage)}box.load(desturl+" "+opts.itemSelector,null,loadCallback)})}function loadCallback(){if(opts.isDone){showDoneMsg();return false}else{var children=box.children();if(children.length==0||children.hasClass("error404")){return $(window).trigger("error.infscr."+opts.infid,[404])}while(box[0].firstChild){frag.appendChild(box[0].firstChild)}$(opts.contentSelector)[0].appendChild(frag);props.loadingMsg.fadeOut("normal");if(opts.animate){var scrollTo=$(window).scrollTop()+$("#infscr-loading").height()+opts.extraScrollPx+"px";$("html,body").animate({scrollTop:scrollTo},800,function(){opts.isDuringAjax=false})}callback.call($(opts.contentSelector)[0],children.get());if(!opts.animate){opts.isDuringAjax=false}}}function initPause(pauseValue){if(pauseValue=="pause"){opts.isPaused=true}else{if(pauseValue=="resume"){opts.isPaused=false}else{opts.isPaused=!opts.isPaused}}debug("Paused: "+opts.isPaused);return false}function infscrError(xhr){if(!opts.isDone&&xhr==404){debug("Page not found. Self-destructing...");showDoneMsg();opts.isDone=true;opts.currPage=1;$(window).unbind("scroll.infscr."+opts.infid);$(document).unbind("retrieve.infscr."+opts.infid)}if(opts.isFiltered&&xhr==302){debug("Filtered. Going to next instance...");opts.isDone=true;opts.currPage=1;opts.isPaused=false;$(window).unbind("scroll.infscr."+opts.infid,infscrSetup).unbind("pause.infscr."+opts.infid).unbind("filter.infscr."+opts.infid).unbind("error.infscr."+opts.infid);$(document).unbind("retrieve.infscr."+opts.infid,kickOffAjax)}}$.browser.ie6=$.browser.msie&&$.browser.version<7;var opts=$.extend({},$.infinitescroll.defaults,options),props=$.infinitescroll,box,frag,desturl,thisPause,errorStatus;callback=callback||function(){};if(!areSelectorsValid(opts)){return false}props.container=document.documentElement;opts.contentSelector=opts.contentSelector||this;opts.loadMsgSelector=opts.loadMsgSelector||opts.contentSelector;var relurl=/(.*?\/\/).*?(\/.*)/,path=$(opts.nextSelector).attr("href");if(!path){debug("Navigation selector not found");return}path=determinePath(path);props.pixelsFromNavToBottom=$(document).height()+(props.container==document.documentElement?0:$(props.container).offset().top)-$(opts.navSelector).offset().top;props.loadingMsg=$('
    Loading...
    '+opts.loadingText+"
    ");(new Image()).src=opts.loadingImg;$(window).bind("scroll.infscr."+opts.infid,infscrSetup).bind("filter.infscr."+opts.infid,filterNav).bind("error.infscr."+opts.infid,function(event,errorStatus){infscrError(errorStatus)}).bind("pause.infscr."+opts.infid,function(event,thisPause){initPause(thisPause)}).trigger("scroll.infscr."+opts.infid);$(document).bind("retrieve.infscr."+opts.infid,kickOffAjax);return this};$.infinitescroll={defaults:{debug:false,preload:false,nextSelector:"div.navigation a:first",loadingImg:"http://www.infinite-scroll.com/loading.gif",loadingText:"Loading the next set of posts...",donetext:"Congratulations, you've reached the end of the internet.",navSelector:"div.navigation",contentSelector:null,loadMsgSelector:null,loadingMsgRevealSpeed:"fast",extraScrollPx:150,itemSelector:"div.post",animate:false,pathParse:undefined,bufferPx:40,errorCallback:function(){},infid:1,currPage:1,isDuringAjax:false,isInvalidPage:false,isFiltered:false,isDone:false,isPaused:false},loadingImg:undefined,loadingMsg:undefined,container:undefined,currDOMChunk:null}})(jQuery); - +(function($){$.fn.infinitescroll=function infscr(options,callback){function areSelectorsValid(opts){var debug=$.fn.infinitescroll._debug;for(var key in opts){if(key.indexOf&&key.indexOf("Selector")>-1&&$(opts[key]).length===0){debug("Your "+key+" found no elements.");return false}return true}}function determinePath(path){if($.isFunction(opts.pathParse)){debug("pathParse");return[path]}else{if(path.match(/^(.*?)\b2\b(.*?$)/)){path=path.match(/^(.*?)\b2\b(.*?$)/).slice(1)}else{if(path.match(/^(.*?)2(.*?$)/)){if(path.match(/^(.*?page=)2(\/.*|$)/)){path=path.match(/^(.*?page=)2(\/.*|$)/).slice(1);return path}path=path.match(/^(.*?)2(.*?$)/).slice(1)}else{if(path.match(/^(.*?page=)1(\/.*|$)/)){path=path.match(/^(.*?page=)1(\/.*|$)/).slice(1);return path}else{debug("Sorry, we couldn't parse your Next (Previous Posts) URL. Verify your the css selector points to the correct A tag. If you still get this error: yell, scream, and kindly ask for help at infinite-scroll.com.");props.isInvalidPage=true}}}}debug("determinePath",path);return path}function hiddenHeight(element){var height=0;$(element).children().each(function(){height=height+$(this).outerHeight(false)});return height}function generateInstanceID(element){var number=$(element).length+$(element).html().length+$(element).attr("class").length+$(element).attr("id").length;opts.infid=number}if(typeof options=="string"){var command=options,argument=callback,validCommand=(command=="pause"||command=="destroy"||command=="retrieve"||command=="binding"),debug=$.fn.infinitescroll._debug;argument=argument||null;command=(validCommand)?$.fn.infinitescroll[command](argument):debug("Invalid command");return false}var opts=$.infinitescroll.opts=$.extend({},$.infinitescroll.defaults,options),props=$.infinitescroll,innerContainerHeight,box,frag,desturl,pause,error,errorStatus,method,result;callback=$.fn.infinitescroll._callback=callback||function(){},debug=$.fn.infinitescroll._debug,error=$.fn.infinitescroll._error,pause=$.fn.infinitescroll.pause,destroy=$.fn.infinitescroll.destroy,binding=$.fn.infinitescroll.binding;if(!areSelectorsValid(opts)){return false}opts.container=opts.container||document.documentElement;opts.contentSelector=opts.contentSelector||this;opts.infid=(opts.infid==0)?generateInstanceID(opts.contentSelector):opts.infid;opts.loadMsgSelector=opts.loadMsgSelector||opts.contentSelector;var relurl=/(.*?\/\/).*?(\/.*)/,path=$(opts.nextSelector).attr("href");if(!path){debug("Navigation selector not found");return}opts.path=determinePath(path);props.loadingMsg=$('
    Loading...
    '+opts.loadingText+"
    ");(new Image()).src=opts.loadingImg;opts.binder=(opts.container.nodeName=="HTML")?$(window):$(opts.container);innerContainerHeight=(opts.container.nodeName=="HTML")?$(document).height():innerContainerHeight=hiddenHeight(opts.container);debug("Scrolling in: ",(opts.container.nodeName=="HTML")?"window":opts.container);opts.pixelsFromNavToBottom=innerContainerHeight+(opts.container==document.documentElement?0:$(opts.container).offset().top)-$(opts.navSelector).offset().top;binding("bind");opts.binder.trigger("smartscroll.infscr."+opts.infid);return this};$.infinitescroll={defaults:{debug:false,binder:$(window),preload:false,nextSelector:"div.navigation a:first",loadingImg:"http://www.infinite-scroll.com/loading.gif",loadingText:"Loading the next set of posts...",donetext:"Congratulations, you've reached the end of the internet.",navSelector:"div.navigation",contentSelector:null,loadMsgSelector:null,loadingMsgRevealSpeed:"fast",extraScrollPx:150,itemSelector:"div.post",animate:false,pathParse:undefined,dataType:"html",appendCallback:true,bufferPx:40,orientation:"height",errorCallback:function(){},currPage:1,infid:0,isDuringAjax:false,isInvalidPage:false,isDestroyed:false,isDone:false,isPaused:false,container:undefined,pixelsFromNavToBottom:undefined,path:undefined},loadingImg:undefined,loadingMsg:undefined,currDOMChunk:null};$.fn.infinitescroll._debug=function infscr_debug(){if($.infinitescroll.opts.debug){return window.console&&console.log.call(console,arguments)}};$.fn.infinitescroll._shorthand=function infscr_shorthand(){};$.fn.infinitescroll._nearbottom=function infscr_nearbottom(){var opts=$.infinitescroll.opts,debug=$.fn.infinitescroll._debug,hiddenHeight=$.fn.infinitescroll._hiddenheight;if(opts.container.nodeName=="HTML"){var pixelsFromWindowBottomToBottom=0+$(document).height()-($(opts.container).scrollTop()||$(opts.container.ownerDocument.body).scrollTop())-$(window).height()}else{var pixelsFromWindowBottomToBottom=0+hiddenHeight(opts.container)-$(opts.container).scrollTop()-$(opts.container).height()}debug("math:",pixelsFromWindowBottomToBottom,opts.pixelsFromNavToBottom);return(pixelsFromWindowBottomToBottom-opts.bufferPx"):$("
    ");desturl=($.isFunction(opts.pathParse))?opts.pathParse(path.join("2"),opts.currPage):desturl=path.join(opts.currPage);method=(opts.dataType=="html"||opts.dataType=="json")?opts.dataType:"html+callback";if(opts.appendCallback&&opts.dataType=="html"){method+="+callback"}switch(method){case"html+callback":debug("Using HTML via .load() method");box.load(desturl+" "+opts.itemSelector,null,function(jqXHR,textStatus){loadCallback(box,jqXHR.responseText)});break;case"html":case"json":debug("Using "+(method.toUpperCase())+" via $.ajax() method");$.ajax({url:desturl,dataType:opts.dataType,complete:function _infscrAjax(jqXHR,textStatus){condition=(typeof(jqXHR.isResolved)!=="undefined")?(jqXHR.isResolved()):(textStatus==="success"||textStatus==="notmodified");(condition)?loadCallback(box,jqXHR.responseText):error([404])}});break}})};$.fn.infinitescroll._loadcallback=function infscr_loadcallback(box,data){var props=$.infinitescroll,opts=$.infinitescroll.opts,error=$.fn.infinitescroll._error,showDoneMsg=$.fn.infinitescroll._donemsg,callback=$.fn.infinitescroll._callback,result,frag;result=(opts.isDone)?"done":(!opts.appendCallback)?"no-append":"append";switch(result){case"done":showDoneMsg();return false;break;case"no-append":if(opts.dataType=="html"){data="
    "+data+"
    ";data=$(data).find(opts.itemSelector)}break;case"append":var children=box.children();if(children.length==0||children.hasClass("error404")){return error([404])}frag=document.createDocumentFragment();while(box[0].firstChild){frag.appendChild(box[0].firstChild)}$(opts.contentSelector)[0].appendChild(frag);data=children.get();break}props.loadingMsg.fadeOut("normal");if(opts.animate){var scrollTo=$(window).scrollTop()+$("#infscr-loading").height()+opts.extraScrollPx+"px";$("html,body").animate({scrollTop:scrollTo},800,function(){opts.isDuringAjax=false})}if(!opts.animate){opts.isDuringAjax=false}callback.call($(opts.contentSelector)[0],data)};$.fn.infinitescroll._donemsg=function infscr_donemsg(){var props=$.infinitescroll,opts=$.infinitescroll.opts;props.loadingMsg.find("img").hide().parent().find("div").html(opts.donetext).animate({opacity:1},2000,function(){$(this).parent().fadeOut("normal")});opts.errorCallback()};$.fn.infinitescroll.pause=function infscr_pause(pause){var debug=$.fn.infinitescroll._debug,opts=$.infinitescroll.opts;if(pause!=="pause"&&pause!=="resume"&&pause!=="toggle"&&pause!==null){debug("Invalid argument. Toggling pause value instead")}pause=(pause&&(pause=="pause"||pause=="resume"))?pause:"toggle";switch(pause){case"pause":opts.isPaused=true;break;case"resume":opts.isPaused=false;break;case"toggle":opts.isPaused=!opts.isPaused;break}debug("Paused",opts.isPaused);return false};$.fn.infinitescroll._error=function infscr_error(xhr){var opts=$.infinitescroll.opts,binder=(opts.container.nodeName=="HTML")?$(window):$(opts.container),debug=$.fn.infinitescroll._debug,showDoneMsg=$.fn.infinitescroll._donemsg,error=(!opts.isDone&&xhr==404)?"end":(opts.isDestroyed&&xhr==302)?"destroy":"unknown";switch(error){case"end":debug("Page not found. Self-destructing...");showDoneMsg();opts.isDone=true;opts.currPage=1;opts.isPaused=false;binder.unbind("smartscroll.infscr."+opts.infid);break;case"destroy":debug("Destroyed. Going to next instance...");opts.isDone=true;opts.currPage=1;opts.isPaused=false;binder.unbind("smartscroll.infscr."+opts.infid);break;case"unknown":debug("Unknown Error. WHAT DID YOU DO?!...");showDoneMsg();opts.isDone=true;opts.currPage=1;binder.unbind("smartscroll.infscr."+opts.infid);break}};$.fn.infinitescroll.destroy=function infscr_destroy(){var opts=$.infinitescroll.opts,error=$.fn.infinitescroll._error;opts.isDestroyed=true;return error([302])};$.fn.infinitescroll.binding=function infscr_binding(binding){var opts=$.infinitescroll.opts,setup=$.fn.infinitescroll._setup,error=$.fn.infinitescroll._error,debug=$.fn.infinitescroll._debug;switch(binding){case"bind":opts.binder.bind("smartscroll.infscr."+opts.infid,setup);break;case"unbind":opts.binder.unbind("smartscroll.infscr."+opts.infid);break}debug("Binding",binding);return false};var event=$.event,scrollTimeout;event.special.smartscroll={setup:function(){$(this).bind("scroll",event.special.smartscroll.handler)},teardown:function(){$(this).unbind("scroll",event.special.smartscroll.handler)},handler:function(event,execAsap){var context=this,args=arguments;event.type="smartscroll";if(scrollTimeout){clearTimeout(scrollTimeout)}scrollTimeout=setTimeout(function(){jQuery.event.handle.apply(context,args)},execAsap==="execAsap"?0:100)}};$.fn.smartscroll=function(fn){return fn?this.bind("smartscroll",fn):this.trigger("smartscroll",["execAsap"])}})(jQuery); \ No newline at end of file diff --git a/public/javascripts/view.js b/public/javascripts/view.js index 47cc08724..dfbfcf6a4 100644 --- a/public/javascripts/view.js +++ b/public/javascripts/view.js @@ -18,7 +18,8 @@ var View = { $(document).bind('afterReveal.facebox', function() { jQuery("#facebox label").inFieldLabels(); }); - InfiniteScroll.postScroll(function(){ + + Diaspora.widgets.subscribe("stream/scrolled", function() { $('#main_stream .comments label').inFieldLabels(); }); diff --git a/public/javascripts/web-socket-receiver.js b/public/javascripts/web-socket-receiver.js index 5b39cc415..c0bfdc578 100644 --- a/public/javascripts/web-socket-receiver.js +++ b/public/javascripts/web-socket-receiver.js @@ -6,6 +6,12 @@ var WebSocketReceiver = { //Attach onmessage to websocket ws.onmessage = WSR.onMessage; ws.onclose = function() { + Diaspora.widgets.notifications.showNotification({ + html: '
    ' + + Diaspora.widgets.i18n.t("web_sockets.disconnected") + + '
    ' + }); + WSR.debug("socket closed"); }; ws.onopen = function() { @@ -37,7 +43,7 @@ var WebSocketReceiver = { }); } else if (obj['class']=="likes") { - WebSocketReceiver.processLike(obj.post_id, obj.html) + WebSocketReceiver.processLike(obj.post_id, obj.html); } else { WebSocketReceiver.processPost(obj['class'], obj.post_id, obj.html, obj.aspect_ids); @@ -55,7 +61,7 @@ var WebSocketReceiver = { } else { $('#people_stream').prepend(response.html).slideDown('slow', function(){}); var first_li = result_ul.find('li:first'); - first_li.hide() + first_li.hide(); first_li.after(response.html); result_ul.find("[name='request[into]']").val(result_ul.attr('aspect_id')); result_ul.children(':nth-child(2)').slideDown('fast', function(){}); @@ -64,36 +70,21 @@ var WebSocketReceiver = { processNotification: function(notification){ - var nBadge = $("#notification_badge div.badge_count"); - - nBadge.html().replace(/\d+/, function(num){ - nBadge.html(parseInt(num)+1); - }); - - if(nBadge.hasClass("hidden")){ - nBadge.removeClass("hidden"); - } - - $('#notification').html(notification['html']) - .fadeIn(200) - .delay(8000) - .fadeOut(200, function(){ - $(this).html(""); - }); + Diaspora.widgets.notifications.showNotification(notification); }, processRetraction: function(post_id){ $("*[data-guid='" + post_id + "']").fadeOut(400, function() { $(this).remove(); }); - if($("#main_stream")[0].childElementCount == 0) { + if($("#main_stream")[0].childElementCount === 0) { $("#no_posts").fadeIn(200); } }, processComment: function(postId, commentId, html, opts) { - if( $(".comment[data-guid='"+commentId+"']").length == 0 ) { + if( $(".comment[data-guid='"+commentId+"']").length === 0 ) { var post = $("*[data-guid='"+postId+"']'"), prevComments = $('.comment.posted', post); @@ -141,7 +132,7 @@ var WebSocketReceiver = { }, addPostToStream: function(postId, html) { - if( $(".stream_element[data-guid='" + postId + "']").length == 0 ) { + if( $(".stream_element[data-guid='" + postId + "']").length === 0 ) { var streamElement = $(html); var showMessage = function() { @@ -174,7 +165,7 @@ var WebSocketReceiver = { if(WebSocketReceiver.onStreamForAspect(value, streamIds)) { found = true; return false; - }; + } }); return found; }, @@ -185,7 +176,7 @@ var WebSocketReceiver = { onPageOne: function() { var c = document.location.search.charAt(document.location.search.length-1); - return ((c =='') || (c== '1')); + return ((c === '') || (c === '1')); }, debug: function(str) { $("#debug").append("

    " + str); diff --git a/public/javascripts/widgets/alert.js b/public/javascripts/widgets/alert.js index eeb359a5f..9dcf8ed4c 100644 --- a/public/javascripts/widgets/alert.js +++ b/public/javascripts/widgets/alert.js @@ -29,6 +29,6 @@ Diaspora.widgets.add("alert", function() { $.facebox({ div: "#diaspora_alert" - }); + }, 'diaspora_alert'); } -}); \ No newline at end of file +}); diff --git a/public/javascripts/widgets/directionDetector.js b/public/javascripts/widgets/directionDetector.js index e6aeafee4..257b5cee7 100644 --- a/public/javascripts/widgets/directionDetector.js +++ b/public/javascripts/widgets/directionDetector.js @@ -8,9 +8,10 @@ Diaspora.widgets.add("directionDetector", function() { this.start = function() { Diaspora.widgets.directionDetector.updateBinds(); - InfiniteScroll.postScrollCallback = function() { + + Diaspora.widgets.subscribe("stream/scrolled", function() { Diaspora.widgets.directionDetector.updateBinds(); - } + }); }; this.isRTL = function(str) { @@ -41,7 +42,7 @@ Diaspora.widgets.add("directionDetector", function() { this.cleaner = new RegExp('@[^ ]+|^RT[: ]{1}| RT | RT: |[♺♻:]+', 'g'); this.binds = []; - + this.updateBinds = function() { $.each(Diaspora.widgets.directionDetector.binds, function(i, v) {v.unbind('keyup', Diaspora.widgets.directionDetector.updateDirection);}); Diaspora.widgets.directionDetector.binds = []; diff --git a/public/javascripts/widgets/embedder.js b/public/javascripts/widgets/embedder.js index 99d1d8473..1f2e4da50 100644 --- a/public/javascripts/widgets/embedder.js +++ b/public/javascripts/widgets/embedder.js @@ -52,7 +52,7 @@ }; Embedder.prototype.start = function() { - $(".stream").delegate("a.video-link", "click", this.onVideoLinkClicked); + $("#main_stream a.video-link").live("click", this.onVideoLinkClicked); this.registerServices(); var $post = $("#main_stream").children(".stream_element:first"), @@ -63,10 +63,10 @@ Embedder.prototype.registerServices = function() { var watchVideoOn = Diaspora.widgets.i18n.t("videos.watch"); - + this.register("youtube.com", - '' + $.mustache(watchVideoOn, { provider: "YouTube" }) + '
    ' + - ''); + '' + $.mustache(watchVideoOn, { provider: "YouTube" }) + '
    ' + + ''); this.register("vimeo.com", '' + $.mustache(watchVideoOn, { provider: "Vimeo" }) + '
    ' + diff --git a/public/javascripts/widgets/i18n.js b/public/javascripts/widgets/i18n.js index ade4fccba..b3a259db5 100644 --- a/public/javascripts/widgets/i18n.js +++ b/public/javascripts/widgets/i18n.js @@ -1,15 +1,11 @@ -/** - * Created by . - * User: dan - * Date: Jan 25, 2011 - * Time: 5:18:32 PM - * To change this template use File | Settings | File Templates. +/* Copyright (c) 2010, Diaspora Inc. This file is + * licensed under the Affero General Public License version 3 or later. See + * the COPYRIGHT file. */ -Diaspora.widgets.add("i18n", function() { - this.start = $.noop; +Diaspora.widgets.add("i18n", function() { this.language = "en"; - this.locale = {}; + this.locale = { }; this.loadLocale = function(locale, language) { this.language = language; @@ -33,4 +29,4 @@ Diaspora.widgets.add("i18n", function() { return ret; }; -}); \ No newline at end of file +}); diff --git a/public/javascripts/widgets/infinite-scroll.js b/public/javascripts/widgets/infinite-scroll.js new file mode 100644 index 000000000..40cc149a9 --- /dev/null +++ b/public/javascripts/widgets/infinite-scroll.js @@ -0,0 +1,49 @@ +/* Copyright (c) 2010, Diaspora Inc. This file is +* licensed under the Affero General Public License version 3 or later. See +* the COPYRIGHT file. +*/ + +(function() { + var InfiniteScroll = function() { }; + InfiniteScroll.prototype.options = + { + navSelector : "#pagination", + nextSelector : ".paginate", + itemSelector : ".stream_element", + pathParse : function( pathStr, nextPage ){ + var newPath = pathStr.replace("?", "?only_posts=true&"); + var last_time = $('#main_stream .stream_element').last().find('.time').attr('integer'); + return newPath.replace( /max_time=\d+/, 'max_time=' + last_time); + }, + bufferPx: 500, + debug: false, + donetext: Diaspora.widgets.i18n.t("infinite_scroll.no_more"), + loadingText: "", + loadingImg: '/images/ajax-loader.gif' + }; + + InfiniteScroll.prototype.reInitialize = function(){ + this.clear(); + this.initialize(); + }; + + InfiniteScroll.prototype.initialize = function(){ + if($('#main_stream').length !== 0){ + $('#main_stream').infinitescroll(this.options, function() { + Diaspora.widgets.publish("stream/scrolled"); + }); + } + }; + + InfiniteScroll.prototype.start = function() { + Diaspora.widgets.subscribe("stream/reloaded", this.reInitialize, this); + this.initialize(); + }; + + InfiniteScroll.prototype.clear = function() { + $('#main_stream').infinitescroll('destroy'); + }; + + Diaspora.widgets.add("infinitescroll", InfiniteScroll); +})(); + diff --git a/public/javascripts/widgets/notifications.js b/public/javascripts/widgets/notifications.js new file mode 100644 index 000000000..0091720e3 --- /dev/null +++ b/public/javascripts/widgets/notifications.js @@ -0,0 +1,69 @@ +/* Copyright (c) 2010, Diaspora Inc. This file is +* licensed under the Affero General Public License version 3 or later. See +* the COPYRIGHT file. +*/ + +(function() { + var Notifications = function() { + this.start = function() { + var self = this; + this.badge = $("#notification_badge .badge_count, .notification_count"); + this.notificationArea = $("#notifications"); + this.count = parseInt(this.badge.html()) || 0; + + $(".stream_element.unread").live("mousedown", function() { + self.decrementCount(); + + var notification = $(this); + notification.removeClass("unread"); + + $.ajax({ + url: "notifications/" + notification.data("guid"), + type: "PUT" + }); + }); + + $("a.more").live("click", function(evt) { + evt.preventDefault(); + $(this).hide() + .next(".hidden") + .removeClass("hidden"); + }); + }; + }; + + Notifications.prototype.showNotification = function(notification) { $(notification.html).prependTo(this.notificationArea) + .fadeIn(200) + .delay(8000) + .fadeOut(200, function() { + $(this).detach(); + }); + + this.incrementCount(); + }; + + Notifications.prototype.changeNotificationCount = function(change) { + this.count += change; + + if(this.badge.text() !== "") { + this.badge.text(this.count); + + if(this.count === 0) { + this.badge.addClass("hidden"); + } + else if(this.count === 1) { + this.badge.removeClass("hidden"); + } + } + }; + + Notifications.prototype.decrementCount = function() { + this.changeNotificationCount(-1); + }; + + Notifications.prototype.incrementCount = function() { + this.changeNotificationCount(1); + }; + + Diaspora.widgets.add("notifications", Notifications); +})(); \ No newline at end of file diff --git a/public/javascripts/widgets/timeago.js b/public/javascripts/widgets/timeago.js index cd5ffca65..c1647b925 100644 --- a/public/javascripts/widgets/timeago.js +++ b/public/javascripts/widgets/timeago.js @@ -1,44 +1,22 @@ -/** - * Created by . - * User: dan - * Date: Jan 25, 2011 - * Time: 8:49:02 PM - * To change this template use File | Settings | File Templates. +/* Copyright (c) 2010, Diaspora Inc. This file is + * licensed under the Affero General Public License version 3 or later. See + * the COPYRIGHT file. */ + Diaspora.widgets.add("timeago", function() { this.selector = "abbr.timeago"; - this.start = function() { - InfiniteScroll.postScroll(function(){ - Diaspora.widgets.timeago.updateTimeAgo(); + Diaspora.widgets.subscribe("stream/scrolled", this.updateTimeAgo); + Diaspora.widgets.subscribe("stream/reloaded", this.updateTimeAgo); + + if(Diaspora.widgets.i18n.language !== "en") { + $.each($.timeago.settings.strings, function(index, element) { + $.timeago.settings.strings[index] = Diaspora.widgets.i18n.t("timeago." + index); }); - if(Diaspora.widgets.i18n.language === "en") { - return; - } - - jQuery.timeago.settings.strings = { - prefixAgo: Diaspora.widgets.i18n.t("timeago.prefixAgo"), - prefixFromNow: Diaspora.widgets.i18n.t("timeago.prefixFromNow"), - suffixAgo: Diaspora.widgets.i18n.t("timeago.suffixAgo"), - suffixFromNow: Diaspora.widgets.i18n.t("timeago.suffixFromNow"), - seconds: Diaspora.widgets.i18n.t("timeago.seconds"), - minute: Diaspora.widgets.i18n.t("timeago.minute"), - minutes: Diaspora.widgets.i18n.t("timeago.minutes"), - hour: Diaspora.widgets.i18n.t("timeago.hour"), - hours: Diaspora.widgets.i18n.t("timeago.hours"), - day: Diaspora.widgets.i18n.t("timeago.day"), - days: Diaspora.widgets.i18n.t("timeago.days"), - month: Diaspora.widgets.i18n.t("timeago.month"), - months: Diaspora.widgets.i18n.t("timeago.months"), - year: Diaspora.widgets.i18n.t("timeago.year"), - years: Diaspora.widgets.i18n.t("timeago.years") - }; - - Diaspora.widgets.timeago.updateTimeAgo("abbr"); - + } }; this.updateTimeAgo = function(selector) { - $(selector || this.selector).timeago(); + $((typeof selector === "string") ? selector : Diaspora.widgets.timeago.selector).timeago(); }; }); diff --git a/public/robots.txt b/public/robots.txt index 8e1d42063..7f28f4240 100644 --- a/public/robots.txt +++ b/public/robots.txt @@ -2,4 +2,4 @@ # # To ban all spiders from the entire site uncomment the next two lines: User-Agent: * -Disallow: / +Disallow: /people/ diff --git a/public/stylesheets/sass/application.sass b/public/stylesheets/sass/application.sass index b60310af7..789bb78cc 100644 --- a/public/stylesheets/sass/application.sass +++ b/public/stylesheets/sass/application.sass @@ -236,7 +236,10 @@ header :display block .unread - :background-color #eee + :font-weight bold + :color #333 !important + time + :color #333 !important .diaspora_header_logo :position relative @@ -267,8 +270,6 @@ header :font :weight normal :size smaller - :position absolute - :right 20px .from a @@ -779,7 +780,7 @@ textarea :height auto input[type='checkbox'] - :width auto + :width auto !important input[type='hidden'] :display none @@ -1606,36 +1607,39 @@ ul.aspects h3 span.current_gs_step :color #22C910 -#notification - @include border-radius(5px) - @include box-shadow(0,2px,3px,#333) - +#notifications :z-index 10 - :display none :position fixed :bottom 21px :right 12px - :background - :color rgb(30,30,30) - :color rgba(30,30,30,0.9) + .notification + @include border-radius(5px) + @include box-shadow(0,2px,3px,#333) - :min-width 200px - :padding 12px - :color #fff - - :vertical - :align middle - - .avatar - :display inline-block - :height 20px - :width 20px :margin - :right 5px + :bottom 10px + + :background + :color rgb(30,30,30) + :color rgba(30,30,30,0.9) + + :min-width 200px + :padding 12px + :color #fff + :vertical :align middle + .avatar + :display inline-block + :height 20px + :width 20px + :margin + :right 5px + :vertical + :align middle + .bottom_notification :position fixed :bottom 0 @@ -1774,6 +1778,12 @@ ul#request_result :bottom 25px input.add :color green + .stream_element + .content + :display inline + :position relative + :bottom 2.5em + :padding 0 .contact_list, .aspect_list @@ -2252,6 +2262,14 @@ h3,h4 :padding 0.2em 0.5em :width 500px +.day_group + :min-height 100px + :margin + :bottom 10px + .stream_element + &:last-child + :border none + .stream.notifications > li:hover :background none @@ -2363,6 +2381,8 @@ div.dislikes #facebox .close :display none + .diaspora_alert~.close + :display block #aspect_edit_controls :margin @@ -2814,3 +2834,48 @@ h1.tag :width 12px :height 12px :margin-left 0.5em + +#contacts_of_contact + .section + :margin + :bottom 4px + .see_all + :text-align center + +.date + :background + :color #e6e6e6 + :border-radius 8px + :padding 5px + :color #999 + + :text-align center + .day + :font-size 50px + :font-weight 200 + :margin-bottom -15px + :margin-top -10px + + .month + :font-size 14px + +.notification_count + :background + :color #f0f0f0 + :color #999 + :font + :weight normal + + :padding 0 5px + :left 11px + :margin + :right 5px + :border + :radius 5px + + &.unread + :background + :color lighten(#A40802, 5%) + :color #eee !important + :font + :weight bold diff --git a/public/stylesheets/sass/mobile.sass b/public/stylesheets/sass/mobile.sass old mode 100644 new mode 100755 index a02ac4b4e..9676302fb --- a/public/stylesheets/sass/mobile.sass +++ b/public/stylesheets/sass/mobile.sass @@ -7,8 +7,7 @@ $blue: #3F8FBA - -a:not([role='button']) +a:not([role='button']):not(.arrow) :text :decoration none :font @@ -174,6 +173,19 @@ a :background :color #000 +#photo_controls + :margin + :bottom -42px + +.arrow + :color white !important + :font + :size 26pt + :text + :shadow 0 1px 2px #333 + :decoration none + :padding 0 + ul :margin 0 :padding 0 @@ -346,4 +358,3 @@ ul :background :color #333 :color #ccc - diff --git a/public/stylesheets/sass/ui.sass b/public/stylesheets/sass/ui.sass index b80440e7d..31293f409 100644 --- a/public/stylesheets/sass/ui.sass +++ b/public/stylesheets/sass/ui.sass @@ -33,6 +33,8 @@ :cursor pointer + :white-space nowrap + :color #4a4a4a :text :shadow 0 1px 1px #eee diff --git a/spec/controllers/conversations_controller_spec.rb b/spec/controllers/conversations_controller_spec.rb index 31daa37dc..b4e6e0b7c 100644 --- a/spec/controllers/conversations_controller_spec.rb +++ b/spec/controllers/conversations_controller_spec.rb @@ -14,8 +14,8 @@ describe ConversationsController do it 'succeeds' do response.should be_success end - it "assigns a list of the user's contacts" do - assigns(:all_contacts_and_ids).should == alice.contacts.collect{|c| {"value" => c.id, "name" => c.person.name}} + it "assigns a json list of contacts" do + assigns(:contacts_json).should include(alice.contacts.first.person.name) end it "assigns a contact if passed a contact id" do get :new, :contact_id => alice.contacts.first.id diff --git a/spec/controllers/people_controller_spec.rb b/spec/controllers/people_controller_spec.rb index e923c8a1b..046094236 100644 --- a/spec/controllers/people_controller_spec.rb +++ b/spec/controllers/people_controller_spec.rb @@ -154,16 +154,26 @@ describe PeopleController do response.should be_success end - it "assigns only public posts" do - public_posts = [] - public_posts << bob.post(:status_message, :text => "first public ", :to => bob.aspects[0].id, :public => true) - bob.post(:status_message, :text => "to an aspect @user is not in", :to => bob.aspects[1].id) - bob.post(:status_message, :text => "to all aspects", :to => 'all') - public_posts << bob.post(:status_message, :text => "public", :to => 'all', :public => true) + context 'with posts' do + before do + @public_posts = [] + @public_posts << bob.post(:status_message, :text => "first public ", :to => bob.aspects[0].id, :public => true) + bob.post(:status_message, :text => "to an aspect @user is not in", :to => bob.aspects[1].id) + bob.post(:status_message, :text => "to all aspects", :to => 'all') + @public_posts << bob.post(:status_message, :text => "public", :to => 'all', :public => true) + @public_posts.first.created_at -= 1000 + @public_posts.first.save + end - get :show, :id => @person.id + it "assigns only public posts" do + get :show, :id => @person.id + assigns[:posts].models.should =~ @public_posts + end - assigns[:posts].models.should =~ public_posts + it 'is sorted by created_at desc' do + get :show, :id => @person.id + assigns[:posts].models.should == @public_posts.sort_by{|p| p.created_at}.reverse + end end it 'throws 404 if the person is remote' do @@ -239,6 +249,14 @@ describe PeopleController do end end end + describe '#contacts' do + it 'assigns the contacts of a person' do + contact = alice.contact_for(bob.person) + contacts = contact.contacts + get :contacts, :person_id => bob.person.id + assigns(:contacts_of_contact).should == contacts + end + end describe '#webfinger' do it 'enqueues a webfinger job' do diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index 74f1fdc6b..e7433a9e9 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -101,6 +101,27 @@ describe ApplicationHelper do res.should =~ /data-video-id="#{video_id}"/ end + it "keeps anchors" do + anchor = "#t=11m34" + video_id = "DHRoHuv3I8E" + url = "http://www.youtube.com/watch?v=" + video_id + anchor + res = markdownify(url) + res.should =~ /Youtube:/ + res.should =~ /data-host="youtube.com"/ + res.should =~ /data-video-id="#{video_id}"/ + res.should =~ /data-anchor="#{anchor}"/ + end + + it "has an empty data-anchor attribute if there is no anchor" do + video_id = "DHRoHuv3I8E" + url = "http://www.youtube.com/watch?v=" + video_id + res = markdownify(url) + res.should =~ /Youtube:/ + res.should =~ /data-host="youtube.com"/ + res.should =~ /data-video-id="#{video_id}"/ + res.should =~ /data-anchor=""/ + end + it "leaves the links in the href of the #a tag" do video_id = "ABYnqp-bxvg" start_url ="http://www.youtube.com/watch?v=" + video_id @@ -140,11 +161,21 @@ describe ApplicationHelper do end end - describe "hearts" do + describe "emoticons" do it "replaces <3 with ♥" do message = "i <3 you" markdownify(message).should == "i ♥ you" end + + it "replaces various things with (their) HTML entities" do + message = ":) :-) :( :-( ... -> <- (tm) (r) (c)" + markdownify(message).should == "☺ ☺ ☹ ☹ … → ← ™ ® ©" + end + + it "skips doing it if you say so" do + message = ":) :-) :( :-( ... -> <-" + markdownify(message, :emoticons => false).should == ":) :-) :( :-( ... -> <-" + end end describe "weak emphasis" do diff --git a/spec/helpers/stream_helper_spec.rb b/spec/helpers/comments_helper_spec.rb similarity index 95% rename from spec/helpers/stream_helper_spec.rb rename to spec/helpers/comments_helper_spec.rb index 1b2d96b49..7880ab4df 100644 --- a/spec/helpers/stream_helper_spec.rb +++ b/spec/helpers/comments_helper_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe StreamHelper do +describe CommentsHelper do before do @user = alice @aspect = @user.aspects.first diff --git a/spec/integration/receiving_spec.rb b/spec/integration/receiving_spec.rb index bfc59e823..2d96f12e8 100644 --- a/spec/integration/receiving_spec.rb +++ b/spec/integration/receiving_spec.rb @@ -61,7 +61,7 @@ describe 'a user receives a post' do bob.dispatch_post(sm, :to => bob.aspects.first) end - alice.raw_visible_posts.count.should == 1 + alice.visible_posts.count.should == 1 end context 'mentions' do @@ -153,14 +153,14 @@ describe 'a user receives a post' do end it "adds a received post to the the contact" do - alice.raw_visible_posts.should include(@status_message) + alice.visible_posts.should include(@status_message) @contact.posts.should include(@status_message) end it 'removes posts upon forceful removal' do alice.remove_contact(@contact, :force => true) alice.reload - alice.raw_visible_posts.should_not include @status_message + alice.visible_posts.should_not include @status_message end context 'dependant delete' do @@ -240,7 +240,7 @@ describe 'a user receives a post' do end it 'should correctly attach the user already on the pod' do - bob.reload.raw_visible_posts.size.should == 1 + bob.reload.visible_posts.size.should == 1 post_in_db = StatusMessage.find(@post.id) post_in_db.comments.should == [] receive_with_zord(bob, alice.person, @xml) @@ -267,7 +267,7 @@ describe 'a user receives a post' do end } - bob.reload.raw_visible_posts.size.should == 1 + bob.reload.visible_posts.size.should == 1 post_in_db = StatusMessage.find(@post.id) post_in_db.comments.should == [] @@ -339,7 +339,7 @@ describe 'a user receives a post' do zord = Postzord::Receiver.new(bob, :salmon_xml => salmon_xml) zord.perform - bob.raw_visible_posts.include?(post).should be_true + bob.visible_posts.include?(post).should be_true end end diff --git a/spec/javascripts/aspect-filters-spec.js b/spec/javascripts/aspect-filters-spec.js new file mode 100644 index 000000000..5f955e41a --- /dev/null +++ b/spec/javascripts/aspect-filters-spec.js @@ -0,0 +1,13 @@ +/* Copyright (c) 2010, Diaspora Inc. This file is +* licensed under the Affero General Public License version 3 or later. See +* the COPYRIGHT file. +*/ + +describe('AspectFilters', function(){ + it('initializes selectedGUIDS', function(){ + expect(AspectFilters.selectedGUIDS).toEqual([]); + }); + it('initializes requests', function(){ + expect(AspectFilters.requests).toEqual(0); + }); +}); diff --git a/spec/javascripts/diaspora-spec.js b/spec/javascripts/diaspora-spec.js index d4f4978ea..ffbf289eb 100644 --- a/spec/javascripts/diaspora-spec.js +++ b/spec/javascripts/diaspora-spec.js @@ -4,49 +4,84 @@ */ describe("Diaspora", function() { - describe("widgetCollection", function() { + describe("WidgetCollection", function() { describe("prototype", function() { + var widgets; beforeEach(function() { - window.widgets = new Diaspora.widgetCollection(); + widgets = new Diaspora.WidgetCollection(); }); describe("add", function() { it("adds a widget to the collection", function() { - expect(window.widgets.collection["nameOfWidget"]).not.toBeDefined(); - window.widgets.add("nameOfWidget", function() { }); - expect(window.widgets.collection["nameOfWidget"]).toBeDefined(); + expect(widgets.collection["nameOfWidget"]).not.toBeDefined(); + widgets.add("nameOfWidget", function() { }); + expect(widgets.collection["nameOfWidget"]).toBeDefined(); }); it("sets a shortcut by referencing the object on Diaspora.widgetCollection", function() { - expect(window.widgets.sup).toBeFalsy(); - window.widgets.add("sup", function() { }); - expect(window.widgets.sup).toEqual(window.widgets.collection.sup); + expect(widgets.sup).toBeFalsy(); + widgets.add("sup", function() { }); + expect(widgets.sup).toEqual(widgets.collection.sup); }); }); describe("remove", function() { it("removes a widget from the collection", function() { - window.widgets.add("nameOfWidget", function() { }); - expect(window.widgets.collection["nameOfWidget"]).toBeDefined(); - window.widgets.remove("nameOfWidget"); - expect(window.widgets.collection["nameOfWidget"]).not.toBeDefined(); + widgets.add("nameOfWidget", function() { }); + expect(widgets.collection["nameOfWidget"]).toBeDefined(); + widgets.remove("nameOfWidget"); + expect(widgets.collection["nameOfWidget"]).not.toBeDefined(); }); }); describe("init", function() { it("calls the start method on all of the widgets present", function() { - window.widgets.add("nameOfWidget", function() { + widgets.add("nameOfWidget", function() { this.start = function() { } }); - spyOn(window.widgets.collection["nameOfWidget"], "start"); - window.widgets.init(); - expect(window.widgets.collection["nameOfWidget"].start).toHaveBeenCalled(); + spyOn(widgets.collection["nameOfWidget"], "start"); + widgets.init(); + expect(widgets.collection["nameOfWidget"].start).toHaveBeenCalled(); }); - it("changes the ready property to true", function() { - expect(window.widgets.initialized).toBeFalsy(); - window.widgets.init(); - expect(window.widgets.initialized).toBeTruthy(); + + it("changes the initialized property to true", function() { + expect(widgets.initialized).toBeFalsy(); + widgets.init(); + expect(widgets.initialized).toBeTruthy(); + }); + }); + + describe("subscribe", function() { + it("subscribes to an event specified by an id", function() { + expect(widgets.eventsContainer.data("events")).not.toBeDefined(); + widgets.subscribe("testing/event", function() { }); + expect(widgets.eventsContainer.data("events")["testing/event"]).toBeDefined(); + }); + + it("accepts a context in which the function will always be called", function() { + var foo = "bar"; + widgets.subscribe("testing/context", function() { foo = this.foo; }); + widgets.publish("testing/context"); + expect(foo).toEqual(undefined); + + widgets.subscribe("testing/context_", function() { foo = this.foo; }, { foo: "hello" }); + widgets.publish("testing/context_"); + expect(foo).toEqual("hello"); + }); + }); + + describe("publish", function() { + it("triggers events that are related to the specified id", function() { + var called = false; + + widgets.subscribe("testing/event", function() { + called = true; + }); + + widgets.publish("testing/event"); + + expect(called).toBeTruthy(); }); }); }); diff --git a/spec/javascripts/embedder-spec.js b/spec/javascripts/embedder-spec.js index c3414c063..301b04405 100644 --- a/spec/javascripts/embedder-spec.js +++ b/spec/javascripts/embedder-spec.js @@ -2,6 +2,7 @@ * licensed under the Affero General Public License version 3 or later. See * the COPYRIGHT file. */ + describe("Diaspora", function() { describe("widgets", function() { describe("embedder", function() { @@ -18,6 +19,9 @@ describe("Diaspora", function() { }); }); describe("render", function() { + beforeEach(function(){ + Diaspora.widgets.embedder.registerServices(); + }); it("renders the specified mustache template", function() { var template = Diaspora.widgets.embedder.render("youtube.com", {"video-id": "asdf"}); expect(template.length > 0).toBeTruthy(); @@ -31,7 +35,7 @@ describe("Diaspora", function() { describe("embed", function() { beforeEach(function() { $("#jasmine_content").html( - '

    ' + + '
    ' + '' + 'spec video' + '' + @@ -39,10 +43,11 @@ describe("Diaspora", function() { ); }); - it("delegates '.stream a.video-link'", function() { - spyOn($.fn, "delegate"); + it("attackes onVideoLinkClicked to a.video-link'", function() { + spyOn(Diaspora.widgets.embedder, "onVideoLinkClicked"); Diaspora.widgets.embedder.start(); - expect($.fn.delegate).toHaveBeenCalledWith("a.video-link", "click", Diaspora.widgets.embedder.onVideoLinkClicked); + $("a.video-link:first").click(); + expect(Diaspora.widgets.embedder.onVideoLinkClicked).toHaveBeenCalled(); }); }); @@ -52,7 +57,7 @@ describe("Diaspora", function() { var $post = $("#main_stream").children(".stream_element:first"), $contentParagraph = $post.children(".sm_body").children('.content').children("p"); - + expect($contentParagraph.length).toEqual(1); }); }); diff --git a/spec/javascripts/stream-spec.js b/spec/javascripts/stream-spec.js index 4d2bc64a9..19b6e71e6 100644 --- a/spec/javascripts/stream-spec.js +++ b/spec/javascripts/stream-spec.js @@ -4,59 +4,60 @@ */ describe("Stream", function() { + beforeEach(function() { + jasmine.Clock.useMock(); + $('#jasmine_content').html( + '
    ' + + '
  • ' + + '
    ' + + '
    ' + + 'show comments (0)' + + '
    ' + + '' + + '
    ' + + '
  • ' + + '
    ' + ); + }); describe("initialize", function() { it("attaches a click event to show_post_comments links", function() { - spyOn($.fn, "delegate"); + spyOn(Stream, "toggleComments"); Stream.initialize(); - expect($.fn.delegate).toHaveBeenCalledWith( - "a.show_post_comments", "click", Stream.toggleComments); + $('.stream a.show_post_comments').click(); + expect(Stream.toggleComments).toHaveBeenCalled(); }); }); describe("toggleComments", function() { - - beforeEach(function() { - jasmine.Clock.useMock(); - $('#jasmine_content').html( - '
    ' + - '
  • ' + - '
    ' + - '
    ' + - 'show comments (0)' + - '
    ' + - '' + - '
    ' + - '
  • ' + - '
    ' - ); + beforeEach(function(){ + jQuery('#main_stream a.show_post_comments:not(.show)').die(); Stream.initialize(); }); - it("toggles class hidden on the comment block", function () { - expect($('ul.comments')).toHaveClass("hidden"); + expect(jQuery('ul.comments')).toHaveClass("hidden"); $("a.show_post_comments").click(); jasmine.Clock.tick(200); - expect($('ul.comments')).not.toHaveClass("hidden"); + expect(jQuery('ul.comments')).not.toHaveClass("hidden"); }); it("changes the text on the show comments link", function() { $("a.show_post_comments").click(); jasmine.Clock.tick(200); expect($("a.show_post_comments").text()).toEqual("hide comments (0)"); - }) + }); }); }); diff --git a/spec/javascripts/support/jasmine.yml b/spec/javascripts/support/jasmine.yml index 626edff19..de698e936 100644 --- a/spec/javascripts/support/jasmine.yml +++ b/spec/javascripts/support/jasmine.yml @@ -28,8 +28,9 @@ src_files: - public/javascripts/widgets/i18n.js - public/javascripts/widgets/timeago.js - public/javascripts/widgets/directionDetector.js + - public/javascripts/widgets/infinite-scroll.js + - public/javascripts/widgets/notifications.js - public/javascripts/mobile.js - - public/javascripts/infinite-scroll.js - public/javascripts/contact-list.js - public/javascripts/web-socket-receiver.js - public/javascripts/view.js @@ -37,6 +38,7 @@ src_files: - public/javascripts/stream.js - public/javascripts/validation.js - public/javascripts/rails.js + - public/javascripts/aspect-filters.js # stylesheets # # Return an array of stylesheet filepaths relative to src_dir to include before jasmine specs. diff --git a/spec/javascripts/validation-spec.js b/spec/javascripts/validation-spec.js index 41eed51a6..e15db117c 100644 --- a/spec/javascripts/validation-spec.js +++ b/spec/javascripts/validation-spec.js @@ -1,4 +1,9 @@ -describe("Validation", function() { +/* Copyright (c) 2010, Diaspora Inc. This file is +* licensed under the Affero General Public License version 3 or later. See +* the COPYRIGHT file. +*/ + +describe("Validation", function() { describe("rules", function() { describe("username", function() { describe("characters", function() { diff --git a/spec/javascripts/view-spec.js b/spec/javascripts/view-spec.js index 1a8a85345..ba3a3600f 100644 --- a/spec/javascripts/view-spec.js +++ b/spec/javascripts/view-spec.js @@ -1,4 +1,9 @@ -describe("View", function() { +/* Copyright (c) 2010, Diaspora Inc. This file is +* licensed under the Affero General Public License version 3 or later. See +* the COPYRIGHT file. +*/ + +describe("View", function() { it("is the object that helps the UI", function() { expect(typeof View === "object").toBeTruthy(); }); diff --git a/spec/javascripts/widget-i18n-spec.js b/spec/javascripts/widgets/i18n-spec.js similarity index 90% rename from spec/javascripts/widget-i18n-spec.js rename to spec/javascripts/widgets/i18n-spec.js index 6bf3ea380..aecd5378b 100644 --- a/spec/javascripts/widget-i18n-spec.js +++ b/spec/javascripts/widgets/i18n-spec.js @@ -1,10 +1,8 @@ -/** - * Created by . - * User: dan - * Date: Jan 27, 2011 - * Time: 3:20:57 PM - * To change this template use File | Settings | File Templates. - */ +/* Copyright (c) 2010, Diaspora Inc. This file is +* licensed under the Affero General Public License version 3 or later. See +* the COPYRIGHT file. +*/ + describe("Diaspora", function() { describe("widgets", function() { describe("i18n", function() { diff --git a/spec/javascripts/widgets/notifications-spec.js b/spec/javascripts/widgets/notifications-spec.js new file mode 100644 index 000000000..aeedf1d57 --- /dev/null +++ b/spec/javascripts/widgets/notifications-spec.js @@ -0,0 +1,56 @@ +/* Copyright (c) 2010, Diaspora Inc. This file is +* licensed under the Affero General Public License version 3 or later. See +* the COPYRIGHT file. +*/ +describe("Diaspora", function() { + describe("widgets", function() { + describe("notifications", function() { + var changeNotificationCountSpy; + + beforeEach(function() { + changeNotificationCountSpy = spyOn(Diaspora.widgets.notifications, "changeNotificationCount").andCallThrough(); + $("#jasmine_content").html("
    "); + Diaspora.widgets.notifications.start(); + changeNotificationCountSpy.reset(); + }); + + describe("decrementCount", function() { + it("decrements Notifications.count", function() { + var originalCount = Diaspora.widgets.notifications.count; + Diaspora.widgets.notifications.decrementCount(); + expect(Diaspora.widgets.notifications.count).toBeLessThan(originalCount); + }); + + it("calls Notifications.changeNotificationCount", function() { + Diaspora.widgets.notifications.decrementCount(); + expect(Diaspora.widgets.notifications.changeNotificationCount).toHaveBeenCalled(); + }) + }); + + describe("incrementCount", function() { + it("increments Notifications.count", function() { + var originalCount = Diaspora.widgets.notifications.count; + Diaspora.widgets.notifications.incrementCount(); + expect(Diaspora.widgets.notifications.count).toBeGreaterThan(originalCount); + }); + + it("calls Notifications.changeNotificationCount", function() { + Diaspora.widgets.notifications.incrementCount(); + expect(Diaspora.widgets.notifications.changeNotificationCount).toHaveBeenCalled(); + }); + }); + + describe("showNotification", function() { + it("prepends a div to div#notifications", function() { + expect($("#notifications div").length).toEqual(0); + + Diaspora.widgets.notifications.showNotification({ + html: '
    ' + }); + + expect($("#notifications div").length).toEqual(1); + }); + }); + }); + }); +}); \ No newline at end of file diff --git a/spec/lib/diaspora/exporter_spec.rb b/spec/lib/diaspora/exporter_spec.rb index 8223bf688..e31cd27e6 100644 --- a/spec/lib/diaspora/exporter_spec.rb +++ b/spec/lib/diaspora/exporter_spec.rb @@ -96,7 +96,8 @@ describe Diaspora::Exporter do it 'should include post created at time' do doc = Nokogiri::XML::parse(posts_xml) - xml_time = Time.zone.parse(doc.xpath('//posts/status_message/created_at').first.text) + target_xml = doc.xpath('//posts/status_message').detect{|status| status.to_s.include?(@status_message1.text)} + xml_time = Time.zone.parse(target_xml.xpath('//status_message').text) xml_time.to_i.should == @status_message1.created_at.to_i end end diff --git a/spec/misc_spec.rb b/spec/misc_spec.rb index b089fc603..5c1b3365a 100644 --- a/spec/misc_spec.rb +++ b/spec/misc_spec.rb @@ -46,7 +46,7 @@ describe 'making sure the spec runner works' do it 'allows posting after running' do message = @user1.post(:status_message, :text => "Connection!", :to => @aspect1.id) - @user2.reload.raw_visible_posts.should include message + @user2.reload.visible_posts.should include message end end diff --git a/spec/models/notification_spec.rb b/spec/models/notification_spec.rb index e3a6df0c0..fe50ec026 100644 --- a/spec/models/notification_spec.rb +++ b/spec/models/notification_spec.rb @@ -12,11 +12,12 @@ describe Notification do @user2 = eve @aspect = @user.aspects.create(:name => "dudes") @opts = {:target_id => @sm.id, - :target_type => @sm.class.name, + :target_type => @sm.class.base_class.to_s, :type => 'Notifications::CommentOnPost', :actors => [@person], :recipient_id => @user.id} @note = Notification.new(@opts) + @note.type = 'Notifications::CommentOnPost' @note.actors =[ @person] end @@ -39,6 +40,15 @@ describe Notification do end end + describe '.concatenate_or_create' do + it 'creates a new notificiation if the notification does not exist, or if it is unread' do + @note.unread = false + @note.save + Notification.count.should == 1 + Notification.concatenate_or_create(@note.recipient, @note.target, @note.actors.first, Notifications::CommentOnPost) + Notification.count.should == 2 + end + end describe '.notify' do it 'does not call Notification.create if the object does not have a notification_type' do Notification.should_not_receive(:make_notificatin) @@ -100,15 +110,6 @@ describe Notification do Notification.where(:recipient_id => @user3.id, :target_type => @sm.class.base_class, :target_id => @sm.id).first.actors.count.should == 2 end - it 'marks the notification as unread' do - note = Notification.where(:recipient_id => @user3.id,:target_type => @sm.class.base_class, :target_id => @sm.id).first - note.unread = false - note.save - lambda { - Postzord::Receiver.new(@user3, :person => @user2.person, :object => @user2.comment("hey", :on => @sm)).receive_object - note.reload - }.should change(note, :unread).from(false).to(true) - end end end end diff --git a/spec/models/user/attack_vectors_spec.rb b/spec/models/user/attack_vectors_spec.rb index b10d7ee1b..f56b274d1 100644 --- a/spec/models/user/attack_vectors_spec.rb +++ b/spec/models/user/attack_vectors_spec.rb @@ -30,7 +30,7 @@ describe "attack vectors" do zord = Postzord::Receiver.new(user, :salmon_xml => salmon_xml) zord.perform - user.raw_visible_posts.include?(post_from_non_contact).should be_false + user.visible_posts.include?(post_from_non_contact).should be_false Post.count.should == post_count end @@ -49,7 +49,7 @@ describe "attack vectors" do zord = Postzord::Receiver.new(user, :salmon_xml => salmon_xml) zord.perform - user3.reload.raw_visible_posts.should_not include(StatusMessage.find(original_message.id)) + user3.reload.visible_posts.should_not include(StatusMessage.find(original_message.id)) end context 'malicious contact attack vector' do @@ -89,10 +89,10 @@ describe "attack vectors" do zord = Postzord::Receiver.new(user, :salmon_xml => salmon_xml) zord.perform - }.should_not change{user.reload.raw_visible_posts.count} + }.should_not change{user.reload.visible_posts.count} original_message.reload.text.should == "store this!" - user.raw_visible_posts.first.text.should == "store this!" + user.visible_posts.first.text.should == "store this!" end end it 'should not overwrite another persons profile profile' do @@ -119,7 +119,7 @@ describe "attack vectors" do zord = Postzord::Receiver.new(user, :salmon_xml => salmon_xml) zord.perform - user.raw_visible_posts.count.should == 1 + user.visible_posts.count.should == 1 StatusMessage.count.should == 1 ret = Retraction.new @@ -132,7 +132,7 @@ describe "attack vectors" do zord.perform StatusMessage.count.should == 1 - user.raw_visible_posts.count.should == 1 + user.visible_posts.count.should == 1 end it "disregards retractions for non-existent posts that are from someone other than the post's author" do @@ -163,7 +163,7 @@ describe "attack vectors" do zord.perform - user.raw_visible_posts.count.should == 1 + user.visible_posts.count.should == 1 ret = Retraction.new ret.post_guid = original_message.guid @@ -177,7 +177,7 @@ describe "attack vectors" do zord.perform }.should_not change(StatusMessage, :count) - user.reload.raw_visible_posts.count.should == 1 + user.reload.visible_posts.count.should == 1 end it 'it should not allow you to send retractions for other people' do diff --git a/spec/models/user/posting_spec.rb b/spec/models/user/posting_spec.rb index 5bafbb1b0..029f1469a 100644 --- a/spec/models/user/posting_spec.rb +++ b/spec/models/user/posting_spec.rb @@ -22,8 +22,8 @@ describe User do it 'saves post into visible post ids' do lambda { alice.add_to_streams(@post, @aspects) - }.should change{alice.raw_visible_posts(:by_members_of => @aspects).length}.by(1) - alice.raw_visible_posts(:by_members_of => @aspects).should include @post + }.should change{alice.visible_posts(:by_members_of => @aspects).length}.by(1) + alice.visible_posts(:by_members_of => @aspects).should include @post end it 'saves post into each aspect in aspect_ids' do diff --git a/spec/models/user/querying_spec.rb b/spec/models/user/querying_spec.rb index d66076adc..9e1a6db64 100644 --- a/spec/models/user/querying_spec.rb +++ b/spec/models/user/querying_spec.rb @@ -11,14 +11,14 @@ describe User do @eves_aspect = eve.aspects.first end - describe "#raw_visible_posts" do + describe "#visible_posts" do it "returns all the posts the user can see" do self_post = alice.post(:status_message, :text => "hi", :to => @alices_aspect.id) visible_post = bob.post(:status_message, :text => "hello", :to => bob.aspects.first.id) dogs = bob.aspects.create(:name => "dogs") invisible_post = bob.post(:status_message, :text => "foobar", :to => dogs.id) - stream = alice.raw_visible_posts + stream = alice.visible_posts stream.should include(self_post) stream.should include(visible_post) stream.should_not include(invisible_post) @@ -30,27 +30,35 @@ describe User do (1..25).each do |n| [alice, bob, eve].each do |u| post = u.post :status_message, :text => "#{u.username} - #{n}", :to => u.aspects.first.id - post.created_at = post.created_at + time_interval - post.updated_at = post.updated_at + time_interval + post.created_at = post.created_at - time_interval + post.updated_at = post.updated_at - time_interval post.save time_interval += 1000 end end end it 'works' do #This is in one spec to save time - bob.raw_visible_posts.length.should == 15 - bob.raw_visible_posts.should == bob.raw_visible_posts(:by_members_of => bob.aspects.map{|a| a.id}) - bob.raw_visible_posts.sort_by{|p| p.updated_at}.map{|p| p.id}.should == bob.raw_visible_posts.map{|p| p.id}.reverse + bob.visible_posts.length.should == 15 #it returns 15 by default + bob.visible_posts.should == bob.visible_posts(:by_members_of => bob.aspects.map{|a| a.id}) # it is the same when joining through aspects + bob.visible_posts.sort_by{|p| p.updated_at}.map{|p| p.id}.should == bob.visible_posts.map{|p| p.id}.reverse #it is sorted updated_at desc by default opts = {:limit => 40} - bob.raw_visible_posts(opts).length.should == 40 - bob.raw_visible_posts(opts).should == bob.raw_visible_posts(opts.merge(:by_members_of => bob.aspects.map{|a| a.id})) - bob.raw_visible_posts(opts).sort_by{|p| p.updated_at}.map{|p| p.id}.should == bob.raw_visible_posts(opts).map{|p| p.id}.reverse + bob.visible_posts(opts).length.should == 40 #it takes a limit + bob.visible_posts(opts).should == bob.visible_posts(opts.merge(:by_members_of => bob.aspects.map{|a| a.id})) + bob.visible_posts(opts).sort_by{|p| p.updated_at}.map{|p| p.id}.should == bob.visible_posts(opts).map{|p| p.id}.reverse - opts = {:page => 2} - bob.raw_visible_posts(opts).length.should == 15 - bob.raw_visible_posts(opts).map{|p| p.id}.should == bob.raw_visible_posts(opts.merge(:by_members_of => bob.aspects.map{|a| a.id})).map{|p| p.id} - bob.raw_visible_posts(opts).sort_by{|p| p.updated_at}.map{|p| p.id}.should == bob.raw_visible_posts(opts).map{|p| p.id}.reverse + last_time_of_last_page = bob.visible_posts.last.updated_at + opts = {:max_time => last_time_of_last_page} + bob.visible_posts(opts).length.should == 15 + bob.visible_posts(opts).map{|p| p.id}.should == bob.visible_posts(opts.merge(:by_members_of => bob.aspects.map{|a| a.id})).map{|p| p.id} + bob.visible_posts(opts).sort_by{|p| p.updated_at}.map{|p| p.id}.should == bob.visible_posts(opts).map{|p| p.id}.reverse + bob.visible_posts(opts).map{|p|p.id}.should == bob.visible_posts(:limit => 40)[15...30].map{|p|p.id} #pagination should return the right posts + + opts = {:max_time => last_time_of_last_page.to_i} + bob.visible_posts(opts).length.should == 15 + bob.visible_posts(opts).map{|p| p.id}.should == bob.visible_posts(opts.merge(:by_members_of => bob.aspects.map{|a| a.id})).map{|p| p.id} + bob.visible_posts(opts).sort_by{|p| p.updated_at}.map{|p| p.id}.should == bob.visible_posts(opts).map{|p| p.id}.reverse + bob.visible_posts(opts).map{|p|p.id}.should == bob.visible_posts(:limit => 40)[15...30].map{|p|p.id} #pagination should return the right posts end end end @@ -70,7 +78,7 @@ describe User do describe "#visible_posts" do it "queries by person id" do - query = eve.raw_visible_posts.where(:author_id => eve.person.id) + query = eve.visible_posts.where(:author_id => eve.person.id) query.include?(@status_message1).should == true query.include?(@status_message2).should == true query.include?(@status_message3).should == false @@ -79,7 +87,7 @@ describe User do end it "selects public posts" do - query = eve.raw_visible_posts.where(:public => true) + query = eve.visible_posts.where(:public => true) query.include?(@status_message1).should == false query.include?(@status_message2).should == true query.include?(@status_message3).should == true @@ -88,7 +96,7 @@ describe User do end it "selects non public posts" do - query = eve.raw_visible_posts.where(:public => false) + query = eve.visible_posts.where(:public => false) query.include?(@status_message1).should == true query.include?(@status_message2).should == false query.include?(@status_message3).should == false @@ -97,13 +105,13 @@ describe User do end it "selects by message contents" do - query = eve.raw_visible_posts.where(:text=> "hi") + query = eve.visible_posts.where(:text=> "hi") query.should == [@status_message1] end it "does not return pending posts" do @pending_status_message.pending.should be_true - eve.raw_visible_posts.should_not include @pending_status_message + eve.visible_posts.should_not include @pending_status_message end it '#find_visible_post_by_id' do diff --git a/spec/shared_behaviors/taggable.rb b/spec/shared_behaviors/taggable.rb index 4a7838601..0b1bd95f0 100644 --- a/spec/shared_behaviors/taggable.rb +++ b/spec/shared_behaviors/taggable.rb @@ -39,8 +39,8 @@ describe Diaspora::Taggable do end describe '#tag_strings' do it 'returns a string for every #thing' do - str = '#what #hey #that"smybike. #@hey ##boo # #THATWASMYBIKE #vöglein #hey#there #135440we #abc/23 ###' - arr = ['what', 'hey', 'that', 'THATWASMYBIKE', 'vöglein', '135440we', 'abc'] + str = '#what #hey #that"smybike. #@hey ##boo # #THATWASMYBIKE #vöglein #hey#there #135440we #abc/23 ### #h!gh #ok? #see: #re:publica' + arr = ['what', 'hey', 'that', 'THATWASMYBIKE', 'vöglein', '135440we', 'abc', 'h!gh', 'ok', 'see', 're:publica'] @object.send(@object.class.field_with_tags_setter, str) @object.tag_strings.should =~ arr diff --git a/spec/support/user_methods.rb b/spec/support/user_methods.rb index 5ac07ec16..6e43704b3 100644 --- a/spec/support/user_methods.rb +++ b/spec/support/user_methods.rb @@ -17,6 +17,10 @@ class User add_to_streams(p, aspects) dispatch_post(p, :to => opts[:to]) end + unless opts[:created_at] + p.created_at = Time.now - 1 + p.save + end p end end diff --git a/vendor/gems/jasmine/jasmine.gemspec b/vendor/gems/jasmine/jasmine.gemspec index 5fad38a8a..1bd94cc1a 100644 --- a/vendor/gems/jasmine/jasmine.gemspec +++ b/vendor/gems/jasmine/jasmine.gemspec @@ -10,7 +10,7 @@ Gem::Specification.new do |s| s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= s.authors = ["Rajan Agaskar", "Christian Williams", "Davis Frank"] s.date = %q{2010-10-05} - s.default_executable = %q{jasmine} + #s.default_executable = %q{jasmine} s.description = %q{Javascript BDD test framework} s.email = %q{jasmine-js@googlegroups.com} s.executables = ["jasmine"]