Compare commits

..

81 Commits

Author SHA1 Message Date
Matt-Yorkley
d280bf0d4d Update all locales with the latest Transifex translations 2020-02-27 11:42:02 +01:00
Luis Ramos
03c91dfac1 Merge pull request #4780 from luisramos0/bulk_prod_errors
Fix javascript logic that parses server errors in the bulk product edit page
2020-02-25 18:49:54 +00:00
Luis Ramos
60e12063cd Merge pull request #4758 from luisramos0/fix_incomplete_stripe
Make the payment methods filter handle misconfigured stripe payment methods
2020-02-25 18:47:09 +00:00
Pau Pérez Fabregat
e5b57af315 Merge pull request #4815 from openfoodfoundation/transifex
Transifex
2020-02-25 13:37:30 +01:00
Pau Pérez Fabregat
a396a7f0af Merge pull request #4818 from luisramos0/delete_dead_code
Delete dead code after PRs 4512 and 4508
2020-02-25 13:32:23 +01:00
Transifex-Openfoodnetwork
d084789c56 Updating translations for config/locales/nb.yml 2020-02-25 19:57:08 +11:00
Transifex-Openfoodnetwork
dafac32e70 Updating translations for config/locales/nb.yml 2020-02-25 19:53:59 +11:00
Transifex-Openfoodnetwork
6ca39f3aa5 Updating translations for config/locales/fr_CA.yml 2020-02-25 09:10:13 +11:00
Transifex-Openfoodnetwork
234a9ef1b4 Updating translations for config/locales/en_CA.yml 2020-02-25 08:41:07 +11:00
Luis Ramos
24a1327805 Merge pull request #4785 from openfoodfoundation/dependabot/bundler/stripe-5.15.0
Bump stripe from 5.11.0 to 5.15.0
2020-02-24 20:12:39 +00:00
Luis Ramos
33d77d57f4 Merge pull request #4776 from luisramos0/remove_assets_group
Remove the assets group from the gemfile (taken from spree upgrade branch)
2020-02-24 20:12:01 +00:00
Transifex-Openfoodnetwork
0571b657aa Updating translations for config/locales/en_FR.yml 2020-02-25 04:39:02 +11:00
Transifex-Openfoodnetwork
e4958baddc Updating translations for config/locales/en_FR.yml 2020-02-25 04:35:52 +11:00
Transifex-Openfoodnetwork
c985747297 Updating translations for config/locales/fr.yml 2020-02-25 04:31:33 +11:00
Transifex-Openfoodnetwork
f5ffdfc258 Updating translations for config/locales/en_NZ.yml 2020-02-23 22:32:56 +11:00
Luis Ramos
a3a61967a8 Merge pull request #4621 from luisramos0/spree_backend_js
OFN without spree_backend 🎉
2020-02-22 10:24:50 +00:00
Luis Ramos
1bdeda4a21 Delete dead code after PRs 4512 and 4508 2020-02-21 12:25:07 +00:00
Transifex-Openfoodnetwork
49ba83da6d Updating translations for config/locales/en_GB.yml 2020-02-21 05:32:39 +11:00
Transifex-Openfoodnetwork
19d1497c4b Updating translations for config/locales/en_GB.yml 2020-02-21 05:29:31 +11:00
Luis Ramos
0c4f22f847 Fix images/new.js path and add simple spec to verify the page loads correctly
Testing the file upload would be a bit more complicated
2020-02-20 11:18:22 +00:00
Luis Ramos
1803ea3c38 Add traling breakline to case where errors come in a array 2020-02-20 10:06:10 +00:00
Pau Pérez Fabregat
93fda02e43 Merge pull request #4803 from openfoodfoundation/dependabot/bundler/rubocop-0.80.0
Bump rubocop from 0.79.0 to 0.80.0
2020-02-20 09:34:10 +01:00
Pau Pérez Fabregat
77958f9afe Merge pull request #4796 from openfoodfoundation/dependabot/bundler/i18n-js-3.6.0
Bump i18n-js from 3.5.1 to 3.6.0
2020-02-20 09:32:02 +01:00
Maikel Linke
82e402f31a Update translations from Transifex 2020-02-20 16:20:06 +11:00
Maikel
35aeb98d45 Merge pull request #4792 from openfoodfoundation/transifex
Transifex
2020-02-20 10:43:45 +11:00
Luis Ramos
d99cba3b6e Merge pull request #4709 from mkllnk/4172-js-pluralize
Pluralize common variant unit names
2020-02-19 22:28:54 +00:00
dependabot-preview[bot]
4c6fd96bcc Bump rubocop from 0.79.0 to 0.80.0
Bumps [rubocop](https://github.com/rubocop-hq/rubocop) from 0.79.0 to 0.80.0.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v0.79.0...v0.80.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-18 19:18:53 +00:00
dependabot-preview[bot]
ff088c6203 Bump stripe from 5.11.0 to 5.15.0
Bumps [stripe](https://github.com/stripe/stripe-ruby) from 5.11.0 to 5.15.0.
- [Release notes](https://github.com/stripe/stripe-ruby/releases)
- [Changelog](https://github.com/stripe/stripe-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stripe/stripe-ruby/compare/v5.11.0...v5.15.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-18 12:01:10 +00:00
Luis Ramos
a1cb6928db Merge pull request #4793 from openfoodfoundation/dependabot/bundler/webmock-3.8.2
Bump webmock from 3.8.1 to 3.8.2
2020-02-18 11:59:14 +00:00
Luis Ramos
40a5b60dcb Merge pull request #4794 from openfoodfoundation/dependabot/bundler/oauth2-1.4.4
Bump oauth2 from 1.4.3 to 1.4.4
2020-02-18 11:58:58 +00:00
Luis Ramos
2711736004 Use Array#join and make code simpler 2020-02-18 10:49:41 +00:00
Luis Ramos
18c165e893 Merge pull request #4784 from CSCI-462-01-2020/Issue4731
Add Order Cycle Button Tooltips
2020-02-17 19:32:39 +00:00
Luis Ramos
0aaa04295b Improve and unit test errorsParser 2020-02-17 11:21:21 +00:00
Luis Ramos
7639e9a38d Extrac ErrorsParser to separate class and make it handle the rails error structure with keys 2020-02-17 11:21:21 +00:00
Transifex-Openfoodnetwork
d783bd771f Updating translations for config/locales/ar.yml 2020-02-15 09:33:06 +11:00
Transifex-Openfoodnetwork
9dd9d14107 Updating translations for config/locales/ar.yml 2020-02-15 09:29:56 +11:00
Transifex-Openfoodnetwork
e942266dd7 Updating translations for config/locales/pt_BR.yml 2020-02-15 07:05:18 +11:00
dependabot-preview[bot]
c8f78904d6 Bump i18n-js from 3.5.1 to 3.6.0
Bumps [i18n-js](https://github.com/fnando/i18n-js) from 3.5.1 to 3.6.0.
- [Release notes](https://github.com/fnando/i18n-js/releases)
- [Changelog](https://github.com/fnando/i18n-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fnando/i18n-js/compare/v3.5.1...v3.6.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-14 19:24:49 +00:00
Transifex-Openfoodnetwork
a982fd1e2b Updating translations for config/locales/tr.yml 2020-02-14 22:27:33 +11:00
Transifex-Openfoodnetwork
7e8b2f6be5 Updating translations for config/locales/tr.yml 2020-02-14 22:24:23 +11:00
Transifex-Openfoodnetwork
921c7bbc3a Updating translations for config/locales/tr.yml 2020-02-14 22:21:12 +11:00
Transifex-Openfoodnetwork
eaff6b0c68 Updating translations for config/locales/nb.yml 2020-02-14 19:26:01 +11:00
Transifex-Openfoodnetwork
e1ab424481 Updating translations for config/locales/nb.yml 2020-02-14 19:22:51 +11:00
Transifex-Openfoodnetwork
e59c9720fc Updating translations for config/locales/en_GB.yml 2020-02-14 06:53:13 +11:00
dependabot-preview[bot]
b25f0007f0 Bump oauth2 from 1.4.3 to 1.4.4
Bumps [oauth2](https://github.com/oauth-xx/oauth2) from 1.4.3 to 1.4.4.
- [Release notes](https://github.com/oauth-xx/oauth2/releases)
- [Changelog](https://github.com/oauth-xx/oauth2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/oauth-xx/oauth2/compare/v1.4.3...v1.4.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-13 19:19:44 +00:00
dependabot-preview[bot]
65c5cdd52f Bump webmock from 3.8.1 to 3.8.2
Bumps [webmock](https://github.com/bblimke/webmock) from 3.8.1 to 3.8.2.
- [Release notes](https://github.com/bblimke/webmock/releases)
- [Changelog](https://github.com/bblimke/webmock/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bblimke/webmock/compare/v3.8.1...v3.8.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-13 19:16:18 +00:00
Transifex-Openfoodnetwork
a2873ea553 Updating translations for config/locales/fr.yml 2020-02-14 05:05:51 +11:00
Transifex-Openfoodnetwork
3a593ff255 Updating translations for config/locales/fr.yml 2020-02-14 05:02:42 +11:00
Transifex-Openfoodnetwork
92e1193ffb Updating translations for config/locales/en_FR.yml 2020-02-14 05:01:02 +11:00
Transifex-Openfoodnetwork
016968dcb9 Updating translations for config/locales/fr.yml 2020-02-14 04:59:33 +11:00
blainebillings
fec653186a Add Order Cycle Button Tooltips 2020-02-11 10:10:39 -05:00
luisramos0
66320b5055 Remove the assets group from the gemfile, it will disappear in rails 4 2020-02-07 12:29:02 +00:00
luisramos0
f0f537ff8f Fix path of spree-select2.js pointing to the file in ofn rather the file in spree_backend 2020-02-06 11:21:47 +00:00
luisramos0
e5c9468d09 Fix rubocop issues in navigation_helper 2020-02-05 22:16:20 +00:00
luisramos0
8aed173127 Uncomment events in order edit page and remove unused spree autocomplete js code 2020-02-05 20:04:15 +00:00
luisramos0
61ecca7257 Move template loading to directive of customer search override 2020-02-05 20:04:15 +00:00
luisramos0
7eba657b2f Add missing templates from spree_backend 2020-02-05 20:04:15 +00:00
luisramos0
784de340d1 Disable adaptive menu when running tests, this is what spree_backend was doing before 2020-02-05 20:04:15 +00:00
luisramos0
9191628f29 Bring custom form_builder initializer from spree_backend 2020-02-05 20:04:15 +00:00
luisramos0
88410b1efd Add missing general config routes from spree_backend 2020-02-05 20:04:12 +00:00
luisramos0
afea032361 Add return_authorizations route from spree_backend 2020-02-05 16:02:43 +00:00
luisramos0
3decb4056c Remove repeated include spree_paypal_express and add require css select2 2020-02-05 16:02:43 +00:00
luisramos0
8e9b08feca Remove jquery-alerts from head html 2020-02-05 16:02:43 +00:00
luisramos0
694995ea5d Prefix root_path with main_app so that ofn's route is used. The spree root path is no longer defined, we dont need it 2020-02-05 16:02:43 +00:00
luisramos0
22de7252d0 Fix route in login nav and bring reports and properties resource route from spree_backend 2020-02-05 16:02:43 +00:00
luisramos0
2acf8e5125 Remove config_locale from base controller, in OFN we dont have separate locales for frontoffice and backoffice 2020-02-05 16:02:43 +00:00
luisramos0
e1f61e645d Remove dependency to spree_backend and add dependencies still required: jquery-ui-rails and select2-rails 2020-02-05 16:02:43 +00:00
luisramos0
687d827ceb Add required css require for select2 2020-02-05 16:02:43 +00:00
luisramos0
2885e38113 Re-activate/re-add click events that were registered in spree_backend code before 2020-02-05 16:02:43 +00:00
luisramos0
9f3ca58b55 Add empty admin/spree_backend.js
This file is required by spree_paypal_express that we still need after leaving spree_backend
2020-02-05 16:02:43 +00:00
luisramos0
ffe3228848 Remove spree_backend dependencies from all.js and all.css and fix some dependencies path problems 2020-02-05 16:02:43 +00:00
luisramos0
834231eb8f Add js code needed for the zones admin page 2020-02-05 16:02:43 +00:00
luisramos0
68f5aabd3f Add js code needed where calculators are used: ship methods and payment methods config pages 2020-02-05 16:02:43 +00:00
luisramos0
7e7ea92833 Add js code needed in the states admin page 2020-02-05 16:02:43 +00:00
luisramos0
ebf22ceb19 Add js and css code for image settings from spree_backend 2020-02-05 16:02:43 +00:00
luisramos0
6e78ae762a Make it work even if preferred_enterprise_id is null 2020-02-04 10:01:18 +00:00
Maikel Linke
9535c5647f Make pluralisation code an independent lib
I considered moving the code to a service but I think that this code
can be completely independent of the Open Food Network use case. It
would be easy to move to a gem. The downcasing may need reconsidering
for general use.
2020-01-31 09:48:32 +11:00
Maikel Linke
6f8bb793e1 Add unit names commonly used in French 2020-01-31 09:48:32 +11:00
Maikel Linke
2476050f29 Remove usage count comments 2020-01-31 09:48:32 +11:00
Maikel Linke
1cce106977 Use our unit name pluralization in Ruby
This code will be used for the shop front and reports.
2020-01-31 09:48:32 +11:00
Maikel Linke
98b55287f1 Pluralize common variant unit names
This adds the most popular unit names as singular and plural to our
locale for translation. The added Javascript performs a reverse lookup
to find the right singular/plural form of a unit name in that language.
2020-01-31 09:48:32 +11:00
50 changed files with 1369 additions and 294 deletions

31
Gemfile
View File

@@ -3,7 +3,7 @@ ruby "2.3.7"
git_source(:github) { |repo_name| "https://github.com/#{repo_name}.git" }
gem 'i18n', '~> 0.6.11'
gem 'i18n-js', '~> 3.5.1'
gem 'i18n-js', '~> 3.6.0'
gem 'rails', '~> 3.2.22'
gem 'rails-i18n', '~> 3.0.0'
gem 'rails_safe_tasks', '~> 1.0'
@@ -19,9 +19,8 @@ gem 'activerecord-postgresql-adapter'
gem 'pg', '~> 0.21.0'
# OFN-maintained and patched version of Spree v2.0.4. See
# https://github.com/openfoodfoundation/openfoodnetwork/wiki/Spree-2.0-upgrade
# https://github.com/openfoodfoundation/openfoodnetwork/wiki/Tech-Doc:-OFN's-Spree-fork%F0%9F%8D%B4
# for details.
gem 'spree_backend', github: 'openfoodfoundation/spree', branch: '2-0-4-stable'
gem 'spree_core', github: 'openfoodfoundation/spree', branch: '2-0-4-stable'
gem 'spree_i18n', github: 'spree/spree_i18n', branch: '1-3-stable'
@@ -39,7 +38,7 @@ gem 'activemerchant', '~> 1.78'
gem 'devise', '~> 2.2.5'
gem 'devise-encryptable', '0.2.0'
gem 'jwt', '~> 2.2'
gem 'oauth2', '~> 1.4.3' # Used for Stripe Connect
gem 'oauth2', '~> 1.4.4' # Used for Stripe Connect
gem 'daemons'
gem 'delayed_job_active_record'
@@ -62,7 +61,7 @@ gem 'haml'
gem 'rabl'
gem 'redcarpet'
gem 'sass', "~> 3.3"
gem 'sass-rails', '~> 3.2.3', groups: [:default, :assets]
gem 'sass-rails', '~> 3.2.3'
gem 'truncate_html'
gem 'unicorn'
@@ -99,27 +98,25 @@ gem 'whenever', require: false
gem 'test-unit', '~> 3.3'
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'coffee-rails', '~> 3.2.1'
gem 'compass-rails'
gem 'coffee-rails', '~> 3.2.1'
gem 'compass-rails'
gem 'mini_racer', '0.2.9'
gem 'mini_racer', '0.2.9'
gem 'uglifier', '>= 1.0.3'
gem 'uglifier', '>= 1.0.3'
gem 'angular-rails-templates', '~> 0.3.0'
gem 'foundation-icons-sass-rails'
gem 'momentjs-rails'
gem 'turbo-sprockets-rails3'
end
gem 'angular-rails-templates', '~> 0.3.0'
gem 'foundation-icons-sass-rails'
gem 'momentjs-rails'
gem 'turbo-sprockets-rails3'
gem "foundation-rails"
gem 'foundation_rails_helper', github: 'willrjmarshall/foundation_rails_helper', branch: "rails3"
gem 'jquery-migrate-rails'
gem 'jquery-rails', '3.0.4'
gem 'jquery-ui-rails', '~> 4.0.0'
gem 'select2-rails', '~> 3.4.7'
gem 'ofn-qz', github: 'openfoodfoundation/ofn-qz', ref: '60da2ae4c44cbb4c8d602f59fb5fff8d0f21db3c'

View File

@@ -34,18 +34,6 @@ GIT
revision: 8a8585a43cd04d1a50dc65227f337a91b18d66d5
branch: 2-0-4-stable
specs:
spree_api (2.0.4)
rabl (= 0.8.4)
spree_core (= 2.0.4)
versioncake (= 1.0.0)
spree_backend (2.0.4)
deface (>= 0.9.0)
jquery-rails (~> 3.0.0)
jquery-ui-rails (~> 4.0.0)
rails (~> 3.2.8)
select2-rails (~> 3.4.7)
spree_api (= 2.0.4)
spree_core (= 2.0.4)
spree_core (2.0.4)
activemerchant (~> 1.34)
acts_as_list (= 0.2.0)
@@ -437,7 +425,7 @@ GEM
httparty (0.16.2)
multi_xml (>= 0.5.2)
i18n (0.6.11)
i18n-js (3.5.1)
i18n-js (3.6.0)
i18n (>= 0.6.6)
immigrant (0.3.6)
activerecord (>= 3.0)
@@ -486,7 +474,7 @@ GEM
newrelic_rpm (3.18.1.330)
nokogiri (1.6.8.1)
mini_portile2 (~> 2.1.0)
oauth2 (1.4.3)
oauth2 (1.4.4)
faraday (>= 0.8, < 2.0)
jwt (>= 1.0, < 3.0)
multi_json (~> 1.3)
@@ -578,6 +566,7 @@ GEM
redcarpet (3.5.0)
request_store (1.4.1)
rack (>= 1.4)
rexml (3.2.4)
roadie (3.4.0)
css_parser (~> 1.4)
nokogiri (~> 1.5)
@@ -610,11 +599,12 @@ GEM
rspec-retry (0.6.2)
rspec-core (> 3.3)
rspec-support (3.9.0)
rubocop (0.79.0)
rubocop (0.80.0)
jaro_winkler (~> 1.5.1)
parallel (~> 1.10)
parser (>= 2.7.0.1)
rainbow (>= 2.2.2, < 4.0)
rexml
ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 1.7)
rubocop-rails (2.4.2)
@@ -658,7 +648,7 @@ GEM
tilt (~> 1.1, != 1.3.0)
state_machine (1.2.0)
stringex (1.5.1)
stripe (5.11.0)
stripe (5.15.0)
test-unit (3.3.5)
power_assert
thor (0.20.3)
@@ -683,17 +673,13 @@ GEM
rack
unicorn
uuidtools (2.1.5)
versioncake (1.0.0)
actionpack (>= 3.0)
activesupport (>= 3.0)
railties (>= 3.0)
warden (1.2.7)
rack (>= 1.0)
webdrivers (4.2.0)
nokogiri (~> 1.6)
rubyzip (>= 1.3.0)
selenium-webdriver (>= 3.0, < 4.0)
webmock (3.8.1)
webmock (3.8.2)
addressable (>= 2.3.6)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
@@ -753,10 +739,11 @@ DEPENDENCIES
gmaps4rails
haml
i18n (~> 0.6.11)
i18n-js (~> 3.5.1)
i18n-js (~> 3.6.0)
immigrant
jquery-migrate-rails
jquery-rails (= 3.0.4)
jquery-ui-rails (~> 4.0.0)
json_spec (~> 1.1.4)
jwt (~> 2.2)
kaminari (~> 0.14.1)
@@ -766,7 +753,7 @@ DEPENDENCIES
momentjs-rails
newrelic_rpm (~> 3.0)
nokogiri (>= 1.6.7.1)
oauth2 (~> 1.4.3)
oauth2 (~> 1.4.4)
ofn-qz!
oj
order_management!
@@ -790,12 +777,12 @@ DEPENDENCIES
rubocop-rails
sass (~> 3.3)
sass-rails (~> 3.2.3)
select2-rails (~> 3.4.7)
selenium-webdriver
shoulda-matchers
simple_form!
simplecov
spinjs-rails
spree_backend!
spree_core!
spree_i18n!
spree_paypal_express!

View File

@@ -16,6 +16,7 @@
//= require jquery.jstree/jquery.jstree
//= require jquery.vAlign
//= require jquery.horizontalNav
//= require jquery.adaptivemenu
//= require angular
//= require angular-resource
//= require angular-animate
@@ -28,11 +29,9 @@
// spree
//= require spree
//= require admin/spree-select2
//= require admin/spree_backend
//= require admin/spree/spree-select2
//= require modernizr
//= require spin
//= require jquery.adaptivemenu
//= require equalize
//= require css_browser_selector_dev
//= require responsive-tables

View File

@@ -1,4 +1,4 @@
angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout, $filter, $http, $window, BulkProducts, DisplayProperties, DirtyProducts, VariantUnitManager, StatusMessage, producers, Taxons, Columns, tax_categories, RequestMonitor, SortOptions) ->
angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout, $filter, $http, $window, BulkProducts, DisplayProperties, DirtyProducts, VariantUnitManager, StatusMessage, producers, Taxons, Columns, tax_categories, RequestMonitor, SortOptions, ErrorsParser) ->
$scope.StatusMessage = StatusMessage
$scope.columns = Columns.columns
@@ -230,10 +230,9 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout
BulkProducts.updateVariantLists(data.products || [])
$timeout -> $scope.displaySuccess()
).error (data, status) ->
if status == 400 && data.errors? && data.errors.length > 0
errors = error + "\n" for error in data.errors
alert t("products_update_error") + "\n" + errors
$scope.displayFailure t("products_update_error")
if status == 400 && data.errors?
errorsString = ErrorsParser.toString(data.errors, status)
$scope.displayFailure t("products_update_error") + "\n" + errorsString
else
$scope.displayFailure t("products_update_error_data") + status
@@ -284,7 +283,7 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout
$scope.displayFailure = (failMessage) ->
StatusMessage.display 'failure', t("products_update_error_msg") + "#{failMessage}"
StatusMessage.display 'failure', t("products_update_error_msg") + " #{failMessage}"
$scope.displayDirtyProducts = ->

View File

@@ -3,6 +3,9 @@ angular.module("admin.orders").directive 'customerSearchOverride', ->
scope:
distributorId: '@'
link: (scope, element, attr) ->
if $('#customer_autocomplete_template').length > 0
customerTemplate = Handlebars.compile($('#customer_autocomplete_template').text())
formatCustomerResult = (customer) ->
customerTemplate
customer: customer

View File

@@ -21,9 +21,7 @@ angular.module("admin.products").factory "OptionValueNamer", (VariantUnitManager
else
value = @variant.unit_value
unit_name = @variant.product.variant_unit_name
# TODO needs to add pluralize to line below
# unit_name = unit_name if value > 1
unit_name = @pluralize(@variant.product.variant_unit_name, value)
value = parseInt(value, 10) if value == parseInt(value, 10)
@@ -32,6 +30,21 @@ angular.module("admin.products").factory "OptionValueNamer", (VariantUnitManager
[value, unit_name]
pluralize: (unit_name, count) ->
return unit_name if count == undefined
unit_key = @unit_key(unit_name)
return unit_name unless unit_key
I18n.t(["inflections", unit_key], {count: count, defaultValue: unit_name})
unit_key: (unit_name) ->
unless I18n.unit_keys
I18n.unit_keys = {}
for key, translations of I18n.t("inflections")
for quantifier, translation of translations
I18n.unit_keys[translation.toLowerCase()] = key
I18n.unit_keys[unit_name.toLowerCase()]
option_value_value_unit_scaled: ->
[unit_scale, unit_name] = @scale_for_unit_value()

View File

@@ -1,6 +1,6 @@
//= require_self
//= require admin/handlebar_extensions
//= require admin/variant_autocomplete
//= require admin/spree/orders/variant_autocomplete
/**
This is a collection of javascript functions and whatnot
@@ -21,12 +21,14 @@ jQuery(function($) {
if (typeof $('.field.checkbox label').vAlign === 'function' )
$('.field.checkbox label').vAlign()
// if (typeof Spree !== 'undefined') {
// $('.main-menu-wrapper ul').AdaptiveMenu({
// text: "<a href='#'><i class='icon-chevron-down'></i> " + Spree.translations.more + "</a>",
// klass: "dropdown"
// });
// }
// We activate AdaptiveMenu only if not on webdriver
// Re-adjusting the admin menu during tests causes tests to fail.
if (!navigator.webdriver && typeof Spree !== 'undefined') {
$('.main-menu-wrapper ul').AdaptiveMenu({
text: "<a href='#'><i class='icon-chevron-down'></i> " + Spree.translations.more + "</a>",
klass: "dropdown"
});
}
// Add some tips
if (typeof $('.with-tip').powerTip === 'function' ) {
@@ -174,6 +176,28 @@ $(document).ready(function() {
$(target).prepend(new_table_row);
})
$('body').on('click', '.delete-resource', function() {
var el = $(this);
if (confirm(el.data("confirm"))) {
$.ajax({
type: 'POST',
url: $(this).attr("href"),
data: {
_method: 'delete',
authenticity_token: AUTH_TOKEN
},
dataType: 'html',
success: function(response) {
el.parents("tr").fadeOut('hide');
},
error: function(response, textStatus, errorThrown) {
show_flash_error(response.responseText);
}
});
}
return false;
});
// Fix sortable helper
var fixHelper = function(e, ui) {
ui.children().each(function() {

View File

@@ -0,0 +1,16 @@
$(function() {
var calculator_select = $('select#calc_type')
var original_calc_type = calculator_select.attr('value');
$('.calculator-settings-warning').hide();
calculator_select.change(function() {
if (calculator_select.attr('value') == original_calc_type) {
$('div.calculator-settings').show();
$('.calculator-settings-warning').hide();
$('.calculator-settings').find('input,textarea').prop("disabled", false);
} else {
$('div.calculator-settings').hide();
$('.calculator-settings-warning').show();
$('.calculator-settings').find('input,texttarea').prop("disabled", true);
}
});
})

View File

@@ -0,0 +1,59 @@
$(document).ready(function() {
if ($('input#preferences_use_s3[type="checkbox"]:checked').length > 0) {
$('#s3_settings, #s3_headers').show();
}
// Toggle display of S3 settings based on value of use_s3 checkbox
$('input#preferences_use_s3[type="checkbox"]').click(function() {
$('#s3_settings, #s3_headers').toggle();
});
$(document).on('click', '.destroy_style', function(e) {
e.preventDefault();
$(this).parent().remove();
});
$(document).on('click', '.destroy_new_attachment_styles', function(e) {
e.preventDefault();
$(this).closest('.new_attachment_styles').remove();
});
$(document).on('click', '.destroy_new_s3_headers', function(e) {
e.preventDefault();
$(this).closest('.new_s3_headers').remove();
});
// Handle adding new styles
var styles_hash_index = 1;
$(document).on('click', '.add_new_style', function(e) {
e.preventDefault();
$('#new-styles').append(generate_html_for_hash("new_attachment_styles", styles_hash_index));
});
// Handle adding new headers
var headers_hash_index = 1;
$(document).on('click', '.add_header', function(e) {
e.preventDefault();
$('#headers_list').append(generate_html_for_hash("new_s3_headers", headers_hash_index));
});
// Generates html for new paperclip styles form fields
generate_html_for_hash = function(hash_name, index) {
var html = '<div class="' + hash_name + ' row"><div class="field">';
html += '<div class="five columns">';
html += '<label for="' + hash_name + '_' + index + '_name">';
html += Spree.translations.name + '</label>';
html += '<input id="' + hash_name + '_' + index + '_name" name="' + hash_name + '[' + index + '][name]" type="text" class="fullwidth"><br>';
html += '</div><div class="five columns">'
html += '<label for="' + hash_name + '_' + index + '_value">';
html += Spree.translations.value + '</label>';
html += '<input id="' + hash_name + '_' + index + '_value" name="' + hash_name + '[' + index + '][value]" type="text" class="fullwidth">';
html += '</div><div class="two columns">'
html += '<a href="#" title="' + Spree.translations.destroy + '" class="destroy_' + hash_name + ' with-tip button" style="margin-top: 19px;"><i class="icon-trash"></i> &nbsp; ' + Spree.translations.destroy + '</a>';
html += '</div></div></div>';
index += 1;
return html;
};
});

View File

@@ -0,0 +1,23 @@
//On page load
replace_ids = function(s){
var new_id = new Date().getTime();
return s.replace(/NEW_RECORD/g, new_id);
}
$(function() {
$('a[id*=nested]').click(function() {
var template = $(this).attr('href').replace(/.*#/, '');
html = replace_ids(eval(template));
$('#ul-' + $(this).attr('id')).append(html);
update_remove_links();
});
update_remove_links();
})
var update_remove_links = function() {
$('.remove').click(function() {
$(this).prevAll(':first').val(1);
$(this).parent().hide();
return false;
});
};

View File

@@ -15,11 +15,11 @@ $(document).ready(function() {
console.log(msg);
});
}
// $('[data-hook=admin_order_edit_form] a.ship').click(handle_ship_click);
$('[data-hook=admin_order_edit_form] a.ship').click(handle_ship_click);
//handle shipping method edit click
// $('a.edit-method').click(toggleMethodEdit);
// $('a.cancel-method').click(toggleMethodEdit);
$('a.edit-method').click(toggleMethodEdit);
$('a.cancel-method').click(toggleMethodEdit);
handle_shipping_method_save = function(){
var link = $(this);
@@ -38,11 +38,11 @@ $(document).ready(function() {
console.log(msg);
});
}
// $('[data-hook=admin_order_edit_form] a.save-method').click(handle_shipping_method_save);
$('[data-hook=admin_order_edit_form] a.save-method').click(handle_shipping_method_save);
//handle tracking edit click
// $('a.edit-tracking').click(toggleTrackingEdit);
// $('a.cancel-tracking').click(toggleTrackingEdit);
$('a.edit-tracking').click(toggleTrackingEdit);
$('a.cancel-tracking').click(toggleTrackingEdit);
handle_tracking_save = function(){
var link = $(this);

View File

@@ -29,10 +29,10 @@ $(document).ready(function() {
});
//handle edit click
// $('a.edit-item').click(toggleItemEdit);
$('a.edit-item').click(toggleItemEdit);
//handle cancel click
// $('a.cancel-item').click(toggleItemEdit);
$('a.cancel-item').click(toggleItemEdit);
handle_save_click = function(){
var save = $(this);
@@ -46,7 +46,7 @@ $(document).ready(function() {
adjustItems(shipment_number, variant_id, quantity);
return false;
}
// $('a.save-item').click(handle_save_click);
$('a.save-item').click(handle_save_click);
handle_delete_click = function(){
var del = $(this);
@@ -57,7 +57,7 @@ $(document).ready(function() {
adjustItems(shipment_number, variant_id, 0);
}
// $('a.delete-item').click(handle_delete_click);
$('a.delete-item').click(handle_delete_click);
}
});
@@ -139,39 +139,3 @@ addVariantFromStockLocation = function() {
}
return 1
}
formatVariantResult = function(variant) {
if (variant["images"][0] != undefined && variant["images"][0].urls != undefined) {
variant.image = variant.images[0].urls.mini
}
return variantTemplate({ variant: variant })
}
$.fn.variantAutocomplete = function() {
this.parent().children(".options_placeholder").attr('id', this.parent().data('index'))
this.select2({
placeholder: Spree.translations.variant_placeholder,
minimumInputLength: 3,
ajax: {
url: Spree.url(Spree.routes.variants_search),
datatype: 'json',
data: function(term, page) {
return {
q: {
"product_name_or_sku_cont": term
}
}
},
results: function (data, page) {
window.variants = data['variants'];
return { results: data['variants'] }
}
},
formatResult: formatVariantResult,
formatSelection: function (variant) {
$(this.element).parent().children('.options_placeholder').html(variant.options_text)
return variant.name;
}
})
}

View File

@@ -0,0 +1,8 @@
$(document).ready(function() {
$("#country").change(function() {
var new_state_link_href = $('#new_state_link a').attr('href');
var selected_country_id = $('#country option:selected').attr('value');
var new_link = new_state_link_href.replace(/countries\/(\d+)/, 'countries/'+selected_country_id);
$('#new_state_link a').attr('href', new_link);
});
});

View File

@@ -0,0 +1,43 @@
$ ->
($ '#country_based').click ->
show_country()
($ '#state_based').click ->
show_state()
if ($ '#country_based').is(':checked')
show_country()
else if ($ '#state_based').is(':checked')
show_state()
else
show_state()
($ '#state_based').click()
show_country = ->
($ '#state_members :input').each ->
($ this).prop 'disabled', true
($ '#state_members').hide()
($ '#zone_members :input').each ->
($ this).prop 'disabled', true
($ '#zone_members').hide()
($ '#country_members :input').each ->
($ this).prop 'disabled', false
($ '#country_members').show()
show_state = ->
($ '#country_members :input').each ->
($ this).prop 'disabled', true
($ '#country_members').hide()
($ '#zone_members :input').each ->
($ this).prop 'disabled', true
($ '#zone_members').hide()
($ '#state_members :input').each ->
($ this).prop 'disabled', false
($ '#state_members').show()

View File

@@ -1,10 +1,6 @@
angular.module("admin.utils").directive "variantAutocomplete", ($timeout) ->
restrict: 'C'
link: (scope, element, attrs) ->
# Make variantAutocomplete do nothing because it is called
# from core/app/assets/javascripts/admin/orders/edit.js
$.fn.variantAutocomplete = angular.noop
$timeout ->
if $("#variant_autocomplete_template").length > 0
variantTemplate = Handlebars.compile($("#variant_autocomplete_template").text())

View File

@@ -0,0 +1,21 @@
# Parses a structure of errors that came from the server
angular.module("admin.utils").factory "ErrorsParser", ->
new class ErrorsParser
toString: (errors, defaultContent = "") =>
return defaultContent unless errors?
errorsString = ""
if errors.length > 0
# it is an array of errors
errorsString = errors.join("\n") + "\n"
else
# it is a hash of errors
keys = Object.keys(errors)
for key in keys
errorsString += errors[key].join("\n") + "\n"
this.defaultIfEmpty(errorsString, defaultContent)
defaultIfEmpty: (content, defaultContent) =>
return defaultContent if content == ""
content

View File

@@ -4,15 +4,15 @@
* the top of the compiled file, but it's generally better to create a new file per style scope.
*
*= require admin/spree_backend
*= require jquery.powertip
*= require responsive-tables
*= require normalize
*= require skeleton
*= require responsive-tables
*= require jquery.powertip
*= require jquery.ui.datepicker
*= require jquery-ui-timepicker-addon
*= require shared/textAngular
*= require shared/ng-tags-input.min
*= require select2
*= require_self
*/
@@ -33,6 +33,11 @@
@import 'plugins/powertip';
@import 'plugins/jstree';
@import 'plugins/font-awesome';
@import 'plugins/select2';
@import 'sections/image_settings';
@import 'sections/orders';
@import 'sections/products';
@import 'hacks/mozilla';
@import 'hacks/opera';

View File

@@ -0,0 +1,3 @@
.destroy_style, .destroy_header {
float: right;
}

View File

@@ -70,10 +70,6 @@ module Spree
Spree.t(event_sym, resource: resource_desc)
end
def render_js_for_destroy
render partial: '/spree/admin/shared/destroy'
end
# Index request for JSON needs to pass a CSRF token in order to prevent JSON Hijacking
def check_json_authenticity
return unless request.format.js? || request.format.json?
@@ -86,10 +82,6 @@ module Spree
raise(ActionController::InvalidAuthenticityToken)
end
def config_locale
Spree::Backend::Config[:locale]
end
private
def html_request?

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: false
module Spree
module Admin
module NavigationHelper
@@ -34,7 +36,9 @@ module Spree
end
selected = if options[:match_path]
request.fullpath.starts_with?("#{spree.root_path}admin#{options[:match_path]}")
request.
fullpath.
starts_with?("#{main_app.root_path}admin#{options[:match_path]}")
else
args.include?(controller.controller_name.to_sym)
end

View File

@@ -1,3 +1,5 @@
require 'open_food_network/permissions'
module Permissions
class Order
def initialize(user)

View File

@@ -33,8 +33,8 @@
= t('.variants')
%td.actions
%a.edit-order-cycle.icon-edit.no-text{ ng: { href: '{{orderCycle.edit_path}}'} }
%a.edit-order-cycle.icon-edit.no-text{ ng: { href: '{{orderCycle.edit_path}}'}, 'ofn-with-tip' => t(:edit) }
%td.actions{ ng: { if: 'orderCycle.viewing_as_coordinator' } }
%a.clone-order-cycle.icon-copy.no-text{ ng: { href: '{{orderCycle.clone_path}}'} }
%td.actions{ ng: { if: 'orderCycle.deletable && orderCycle.viewing_as_coordinator' } }
%a.delete-order-cycle.icon-trash.no-text{ ng: { href: '{{orderCycle.delete_path}}'}, data: { method: 'delete', confirm: t(:are_you_sure) } }
%a.clone-order-cycle.icon-copy.no-text{ ng: { href: '{{orderCycle.clone_path}}'}, 'ofn-with-tip' => t(:clone) }
%td.actions{ ng: { if: 'orderCycle.deletable && orderCycle.viewing_as_coordinator' }}
%a.delete-order-cycle.icon-trash.no-text{ ng: { href: '{{orderCycle.delete_path}}'}, data: { method: 'delete', confirm: t(:are_you_sure) }, 'ofn-with-tip' => t(:remove) }

View File

@@ -7,4 +7,4 @@
%span.or= t('spree.or')
= link_to_with_icon 'icon-remove', t('spree.actions.cancel'), admin_product_images_url(@product), id: 'cancel_link', class: 'button'
= javascript_include_tag 'admin/images/new.js'
= javascript_include_tag 'admin/spree/images/new.js'

View File

@@ -0,0 +1,19 @@
<script type='text/template' id='customer_autocomplete_template'>
<div class='customer-autocomplete-item'>
<div class='customer-details'>
<h5>{{customer.email}}</h5>
{{#if bill_address.firstname }}
<strong>{{t 'bill_address' }}</strong>
{{bill_address.firstname}} {{bill_address.lastname}}<br>
{{bill_address.address1}}, {{bill_address.address2}}<br>
{{bill_address.city}}<br>
{{#if bill_address.state_id }}
{{bill_address.state.name}}
{{else}}
{{bill_address.state_name}}
{{/if}}
{{bill_address.country.name}}
{{/if}}
</div>
</div>
</script>

View File

@@ -18,7 +18,6 @@
= render "spree/admin/shared/routes"
%script
= "jQuery.alerts.dialogClass = 'spree';"
= raw "var AUTH_TOKEN = \"#{form_authenticity_token}\";"
= render "layouts/bugherd_script"

View File

@@ -0,0 +1,15 @@
#
# Allow some application_helper methods to be used in the scoped form_for manner
#
class ActionView::Helpers::FormBuilder
def field_container(method, options = {}, &block)
@template.field_container(@object_name,method,options,&block)
end
def error_message_on(method, options = {})
@template.error_message_on(@object_name, method, objectify_options(options))
end
end
ActionView::Base.field_error_proc = Proc.new{ |html_tag, instance| "<span class=\"field_with_errors\">#{html_tag}</span>".html_safe }

View File

@@ -1281,6 +1281,7 @@ ar:
saving_credit_card: جارٍ حفظ بطاقة الائتمان ...
card_has_been_removed: "تمت إزالة بطاقتك (الرقم: %{number})"
card_could_not_be_removed: عذرًا ، تعذرت إزالة البطاقة
invalid_credit_card: "بطاقة الائتمان غير صالحة"
ie_warning_headline: "متصفحك غير محدث :-("
ie_warning_text: "للحصول على أفضل تجربة لشبكة الغذاء المفتوح ، نوصي بشدة بترقية متصفحك:"
ie_warning_chrome: تحميل متصفح كروم
@@ -2425,11 +2426,11 @@ ar:
description: وصف
resolve: حل
exchange_products:
load_more_products: "تحميل المزيد من المنتجات"
load_all_products: "تحميل جميع المنتجات"
select_all_products: "حدد جميع المنتجات %{total_number_of_products}"
products_loaded: "%{num_of_products_loaded} من %{total_number_of_products} المنتجات المحملة"
loading_products: "تحميل المنتجات"
load_more_variants: "تحميل المزيد من المتغيرات"
load_all_variants: "تحميل جميع المتغيرات"
select_all_variants: "حدد كل %{total_number_of_variants} المتغيرات"
variants_loaded: "%{num_of_variants_loaded} من %{total_number_of_variants} تم تحميل المتغيرات"
loading_variants: "تحميل المتغيرات"
tag_rules:
shipping_method_tagged_top: "طرق الشحن الموسومة"
shipping_method_tagged_bottom: "هي:"
@@ -2588,6 +2589,21 @@ ar:
signup_or_login: "البدء بالتسجيل (أو تسجيل الدخول)"
have_an_account: "هل لديك حساب؟"
action_login: "تسجيل الدخول الآن."
inflections:
each:
zero: "كل"
one: "كل"
two: "كل"
few: "كل"
many: "كل"
other: "كل"
pack:
zero: "حزم"
one: "رزمة"
two: "حزم"
few: "حزم"
many: "حزم"
other: "حزم"
producers:
signup:
start_free_profile: "ابدأ بملف تعريف مجاني ، وتوسع عندما تكون جاهزًا!"
@@ -2830,6 +2846,8 @@ ar:
zipcode: الرمز البريدي
weight: الوزن (لكل كجم)
error_user_destroy_with_orders: "لا يمكن حذف المستخدمين الذين لديهم طلبات مكتملة"
cannot_create_payment_without_payment_methods: "لا يمكنك إنشاء دفعة لطلب بدون تحديد طرقة الدفع."
please_define_payment_methods: "يرجى تحديد بعض طرق الدفع أولاً."
options: "خيارات"
actions:
update: "تحديث"

View File

@@ -2430,12 +2430,6 @@ ca:
severity: Severitat
description: Descripció
resolve: Resoldre
exchange_products:
load_more_products: "Carrega més productes"
load_all_products: "Carrega tots els productes"
select_all_products: "Seleccioneu tots els productes %{total_number_of_products}"
products_loaded: "%{num_of_products_loaded} de %{total_number_of_products} productes carregats"
loading_products: "Carregant productes"
tag_rules:
shipping_method_tagged_top: "Els mètodes d'enviament etiquetats"
shipping_method_tagged_bottom: "son:"

View File

@@ -2575,6 +2575,10 @@ de_DE:
signup_or_login: "Beginnen Sie mit der Anmeldung (oder melden Sie sich an)"
have_an_account: "Hast du schon ein Konto?"
action_login: "Jetzt einloggen."
inflections:
bottle:
one: "Flasche"
other: "Flaschen"
producers:
signup:
start_free_profile: "Beginnen Sie mit einem kostenlosen Profil und erweitern Sie es, wenn Sie fertig sind!"

View File

@@ -2722,6 +2722,90 @@ See the %{link} to find out more about %{sitename}'s features and to start using
have_an_account: "Already have an account?"
action_login: "Log in now."
# Singular and plural forms of commonly used words.
# We use these entries to pluralize unit names in every language.
#
# Extracted with the following query:
# Spree::Product.group(:variant_unit_name).order("count_all DESC").count.each { |name, count|
# puts " # Used #{count} times."
# puts " #{name&.parameterize('_')}:"
# puts " one: \"#{name}\""
# puts " other: \"#{name}s\"";
# }
inflections:
each:
one: "each"
other: "each"
bunch:
one: "bunch"
other: "bunches"
pack:
one: "pack"
other: "packs"
box:
one: "box"
other: "boxes"
bottle:
one: "bottle"
other: "bottles"
jar:
one: "jar"
other: "jars"
head:
one: "head"
other: "heads"
bag:
one: "bag"
other: "bags"
loaf:
one: "loaf"
other: "loaves"
single:
one: "single"
other: "singles"
tub:
one: "tub"
other: "tubs"
punnet:
one: "punnet"
other: "punnets"
packet:
one: "packet"
other: "packets"
item:
one: "item"
other: "items"
dozen:
one: "dozen"
other: "dozens"
unit:
one: "unit"
other: "units"
serve:
one: "serve"
other: "serves"
tray:
one: "tray"
other: "trays"
piece:
one: "piece"
other: "pieces"
pot:
one: "pot"
other: "pots"
bundle:
one: "bundle"
other: "bundles"
flask:
one: "flask"
other: "flasks"
basket:
one: "basket"
other: "baskets"
sack:
one: "sack"
other: "sacks"
producers:
signup:
start_free_profile: "Start with a free profile, and expand when you're ready!"

View File

@@ -919,7 +919,7 @@ en_CA:
distributors: distributors
variants: variants
simple_form:
ready_for: Ready for
ready_for: Options
ready_for_placeholder: Date / time
customer_instructions: Customer instructions
customer_instructions_placeholder: 'Notes:'
@@ -1282,6 +1282,7 @@ en_CA:
saving_credit_card: Saving credit card...
card_has_been_removed: "Your card has been removed (number: %{number})"
card_could_not_be_removed: Sorry, the card could not be removed
invalid_credit_card: "Invalid credit card"
ie_warning_headline: "Your browser is out of date :-("
ie_warning_text: "For the best Open Food Network experience, we strongly recommend upgrading your browser:"
ie_warning_chrome: Download Chrome
@@ -2424,11 +2425,11 @@ en_CA:
description: Description
resolve: Resolve
exchange_products:
load_more_products: "Load More Products"
load_all_products: "Load All Products"
select_all_products: "Select All %{total_number_of_products}Products"
products_loaded: "%{num_of_products_loaded}of %{total_number_of_products} Products Loaded"
loading_products: "Loading Products"
load_more_variants: "Load More Variants"
load_all_variants: "Load All Variants"
select_all_variants: "Select All %{total_number_of_variants}Variants"
variants_loaded: "%{num_of_variants_loaded}of%{total_number_of_variants}Variants Loaded"
loading_variants: "Loading Variants"
tag_rules:
shipping_method_tagged_top: "Shipping methods tagged"
shipping_method_tagged_bottom: "are:"
@@ -2587,6 +2588,79 @@ en_CA:
signup_or_login: "Start By Signing Up (or logging in)"
have_an_account: "Already have an account?"
action_login: "Log in now."
inflections:
each:
one: "each"
other: "each"
bunch:
one: "bunch"
other: "bunches"
pack:
one: "pack"
other: "packs"
box:
one: "box"
other: "boxes"
bottle:
one: "bottle"
other: "bottles"
jar:
one: "jar"
other: "jars"
head:
one: "head"
other: "heads"
bag:
one: "bag"
other: "bags"
loaf:
one: "loaf"
other: "loaves"
single:
one: "single"
other: "singles"
tub:
one: "tub"
other: "tubs"
punnet:
one: "punnet"
other: "punnets"
packet:
one: "packet"
other: "packets"
item:
one: "item"
other: "items"
dozen:
one: "dozen"
other: "dozens"
unit:
one: "unit"
other: "units"
serve:
one: "serve"
other: "serves"
tray:
one: "tray"
other: "trays"
piece:
one: "piece"
other: "pieces"
pot:
one: "pot"
other: "pots"
bundle:
one: "bundle"
other: "bundles"
flask:
one: "flask"
other: "flasks"
basket:
one: "basket"
other: "baskets"
sack:
one: "sack"
other: "sacks"
producers:
signup:
start_free_profile: "Start with a free profile, and expand when you're ready!"
@@ -2829,6 +2903,8 @@ en_CA:
zipcode: Postal Code
weight: Weight (per kg)
error_user_destroy_with_orders: "Users with completed orders may not be deleted"
cannot_create_payment_without_payment_methods: "You cannot create a payment for an order without any payment methods defined."
please_define_payment_methods: "Please define some payment methods first."
options: "Options"
actions:
update: "Update"
@@ -2935,7 +3011,7 @@ en_CA:
email: "Customer E-Mail"
invoice:
issued_on: "Issued on"
tax_invoice: "TAX INVOICE"
tax_invoice: "Order Number"
code: "Code"
from: "From"
to: "To"

View File

@@ -1282,6 +1282,7 @@ en_FR:
saving_credit_card: Saving credit card...
card_has_been_removed: "Your card has been removed (number: %{number})"
card_could_not_be_removed: Sorry, the card could not be removed
invalid_credit_card: "Invalid credit card"
ie_warning_headline: "Your browser is out of date :-("
ie_warning_text: "For the best Open Food Network experience, we strongly recommend upgrading your browser:"
ie_warning_chrome: Download Chrome
@@ -2425,11 +2426,11 @@ en_FR:
description: Description
resolve: Resolve
exchange_products:
load_more_products: "Load More Products"
load_all_products: "Load All Products"
select_all_products: "Select All %{total_number_of_products} Products"
products_loaded: "%{num_of_products_loaded}of %{total_number_of_products} Products Loaded"
loading_products: "Loading Products"
load_more_variants: "Load All Variants"
load_all_variants: "Load All Variants"
select_all_variants: "Select All %{total_number_of_variants} Variants"
variants_loaded: "%{num_of_variants_loaded} of %{total_number_of_variants} Variants Loaded"
loading_variants: "Loading Variants"
tag_rules:
shipping_method_tagged_top: "Shipping methods tagged"
shipping_method_tagged_bottom: "are:"
@@ -2588,6 +2589,79 @@ en_FR:
signup_or_login: "Start By Signing Up (or logging in)"
have_an_account: "Already have an account?"
action_login: "Log in now."
inflections:
each:
one: "each"
other: "each"
bunch:
one: "bunch"
other: "bunches"
pack:
one: "pack"
other: "packs"
box:
one: "box"
other: "boxes"
bottle:
one: "bottle"
other: "bottles"
jar:
one: "jar"
other: "jars"
head:
one: "head"
other: "heads"
bag:
one: "bag"
other: "bags"
loaf:
one: "loaf"
other: "loaves"
single:
one: "single"
other: "singles"
tub:
one: "tub"
other: "tubs"
punnet:
one: "punnet"
other: "punnets"
packet:
one: "packet"
other: "packets"
item:
one: "item"
other: "items"
dozen:
one: "dozen"
other: "dozens"
unit:
one: "unit"
other: "units"
serve:
one: "serve"
other: "serves"
tray:
one: "tray"
other: "trays"
piece:
one: "piece"
other: "pieces"
pot:
one: "pot"
other: "pots"
bundle:
one: "bundle"
other: "bundles"
flask:
one: "flask"
other: "flasks"
basket:
one: "basket"
other: "baskets"
sack:
one: "sack"
other: "sacks"
producers:
signup:
start_free_profile: "Start with a free profile, and expand when you're ready!"

View File

@@ -1282,6 +1282,7 @@ en_GB:
saving_credit_card: Saving credit card...
card_has_been_removed: "Your card has been removed (number: %{number})"
card_could_not_be_removed: Sorry, the card could not be removed
invalid_credit_card: "Invalid credit card"
ie_warning_headline: "Your browser is out of date :-("
ie_warning_text: "For the best Open Food Network experience, we strongly recommend upgrading your browser:"
ie_warning_chrome: Download Chrome
@@ -2431,11 +2432,11 @@ en_GB:
description: Description
resolve: Resolve
exchange_products:
load_more_products: "Load More Products"
load_all_products: "Load All Products"
select_all_products: "Select All %{total_number_of_products} Products"
products_loaded: "%{num_of_products_loaded} of %{total_number_of_products} Products Loaded"
loading_products: "Loading Products"
load_more_variants: "Load More Variants"
load_all_variants: "Load All Variants"
select_all_variants: "Select All %{total_number_of_variants} Variants"
variants_loaded: "%{num_of_variants_loaded} of %{total_number_of_variants} Variants Loaded"
loading_variants: "Loading Variants"
tag_rules:
shipping_method_tagged_top: "Shipping methods tagged"
shipping_method_tagged_bottom: "are:"
@@ -2594,6 +2595,79 @@ en_GB:
signup_or_login: "Start By signing up (or logging in)"
have_an_account: "Already have an account?"
action_login: "Log in now."
inflections:
each:
one: "each"
other: "each"
bunch:
one: "bunch"
other: "bunches"
pack:
one: "pack"
other: "packs"
box:
one: "box"
other: "boxes"
bottle:
one: "bottle"
other: "bottles"
jar:
one: "jar"
other: "jars"
head:
one: "head"
other: "heads"
bag:
one: "bag"
other: "bags"
loaf:
one: "loaf"
other: "loaves"
single:
one: "single"
other: "singles"
tub:
one: "tub"
other: "tubs"
punnet:
one: "punnet"
other: "punnets"
packet:
one: "packet"
other: "packets"
item:
one: "item"
other: "items"
dozen:
one: "dozen"
other: "dozens"
unit:
one: "unit"
other: "units"
serve:
one: "serve"
other: "serves"
tray:
one: "tray"
other: "trays"
piece:
one: "piece"
other: "pieces"
pot:
one: "pot"
other: "pots"
bundle:
one: "bundle"
other: "bundles"
flask:
one: "flask"
other: "flasks"
basket:
one: "basket"
other: "baskets"
sack:
one: "sack"
other: "sacks"
producers:
signup:
start_free_profile: "Start with a free profile, and expand when you're ready!"

View File

@@ -1282,6 +1282,7 @@ en_NZ:
saving_credit_card: Saving credit card...
card_has_been_removed: "Your card has been removed (number: %{number})"
card_could_not_be_removed: Sorry, the card could not be removed
invalid_credit_card: "Invalid credit card"
ie_warning_headline: "Your browser is out of date :-("
ie_warning_text: "For the best Open Food Network experience, we strongly recommend upgrading your browser:"
ie_warning_chrome: Download Chrome
@@ -2425,11 +2426,11 @@ en_NZ:
description: Description
resolve: Resolve
exchange_products:
load_more_products: "Load More Products"
load_all_products: "Load All Products"
select_all_products: "Select All %{total_number_of_products} Products"
products_loaded: "%{num_of_products_loaded} of %{total_number_of_products} Products Loaded"
loading_products: "Loading Products"
load_more_variants: "Load More Variants"
load_all_variants: "Load All Variants"
select_all_variants: "Select All %{total_number_of_variants} Variants"
variants_loaded: "%{num_of_variants_loaded} of %{total_number_of_variants} Variants Loaded"
loading_variants: "Loading Variants"
tag_rules:
shipping_method_tagged_top: "Shipping methods tagged"
shipping_method_tagged_bottom: "are:"
@@ -2588,6 +2589,79 @@ en_NZ:
signup_or_login: "Start By Signing Up (or logging in)"
have_an_account: "Already have an account?"
action_login: "Log in now."
inflections:
each:
one: "each"
other: "each"
bunch:
one: "bunch"
other: "bunches"
pack:
one: "pack"
other: "packs"
box:
one: "box"
other: "boxes"
bottle:
one: "bottle"
other: "bottles"
jar:
one: "jar"
other: "jars"
head:
one: "head"
other: "heads"
bag:
one: "bag"
other: "bags"
loaf:
one: "loaf"
other: "loaves"
single:
one: "single"
other: "singles"
tub:
one: "tub"
other: "tubs"
punnet:
one: "punnet"
other: "punnets"
packet:
one: "packet"
other: "packets"
item:
one: "item"
other: "items"
dozen:
one: "dozen"
other: "dozens"
unit:
one: "unit"
other: "units"
serve:
one: "serve"
other: "serves"
tray:
one: "tray"
other: "trays"
piece:
one: "piece"
other: "pieces"
pot:
one: "pot"
other: "pots"
bundle:
one: "bundle"
other: "bundles"
flask:
one: "flask"
other: "flasks"
basket:
one: "basket"
other: "baskets"
sack:
one: "sack"
other: "sacks"
producers:
signup:
start_free_profile: "Start with a basic profile, and expand when you're ready!"

View File

@@ -1284,6 +1284,7 @@ fr:
saving_credit_card: Enregistrement de la carte de crédit...
card_has_been_removed: "Votre carte a été supprimée (numéro : %{number})"
card_could_not_be_removed: Désolée, la carte n'a pas pu être supprimée :-(
invalid_credit_card: "Cette carte de crédit n'est pas valide"
ie_warning_headline: "Votre navigateur n'est pas à jour :-("
ie_warning_text: "Pour une expérience optimale sur Open Food France, nous vous recommandons fortement de mettre à jour votre navigateur:"
ie_warning_chrome: Télécharger Chrome
@@ -2454,11 +2455,11 @@ fr:
description: Description
resolve: Résoudre
exchange_products:
load_more_products: "Voir plus de produits"
load_all_products: "Voir tous les produits"
select_all_products: "Sélectionner tous les %{total_number_of_products}produits"
products_loaded: "%{num_of_products_loaded}sur %{total_number_of_products}produits affichés"
loading_products: "Produits en cours de chargement"
load_more_variants: "Afficher plus de variantes"
load_all_variants: "Afficher toutes les variantes"
select_all_variants: "Sélectionnez toutes les %{total_number_of_variants} variantes"
variants_loaded: " %{num_of_variants_loaded}sur %{total_number_of_variants} variantes"
loading_variants: "Chargement des variantes"
tag_rules:
shipping_method_tagged_top: "Les méthodes de livraison taguées"
shipping_method_tagged_bottom: "sont:"
@@ -2618,6 +2619,79 @@ fr:
signup_or_login: "Commencez par vous inscrire (ou connexion)"
have_an_account: "Déjà inscrit?"
action_login: "Se connecter."
inflections:
each:
one: "chacun"
other: "chacun"
bunch:
one: "bouquet"
other: "bouquets"
pack:
one: "caisse"
other: "caisses"
box:
one: "boîte"
other: "boîtes"
bottle:
one: "bouteille"
other: "bouteilles"
jar:
one: "bocal"
other: "bocaux"
head:
one: "tête"
other: "têtes"
bag:
one: "sac"
other: "sacs"
loaf:
one: "miche"
other: "miches"
single:
one: "unité"
other: "unités"
tub:
one: "bac"
other: "bacs"
punnet:
one: "barquette"
other: "barquettes"
packet:
one: "paquet"
other: "paquets"
item:
one: "article"
other: "articles"
dozen:
one: "dizaine"
other: "dizaines"
unit:
one: "unité"
other: "unités"
serve:
one: "service"
other: "services"
tray:
one: "plateau"
other: "plateaux"
piece:
one: "pièce"
other: "pièces"
pot:
one: "pot"
other: "pots"
bundle:
one: "botte"
other: "bottes"
flask:
one: "flacon"
other: "flacons"
basket:
one: "panier"
other: "paniers"
sack:
one: "sachet"
other: "sachets"
producers:
signup:
start_free_profile: "Commencez par créer votre profil entreprise, et changez de formule quand vous êtes prêt !"

View File

@@ -2438,12 +2438,6 @@ fr_BE:
severity: Rigueur
description: Description
resolve: Résoudre
exchange_products:
load_more_products: "Charger plus de produits"
load_all_products: "Charger tous les produits"
select_all_products: "Sélectionner tout les produits %{total_number_of_products}"
products_loaded: "Chargés produits %{num_of_products_loaded}ou%{total_number_of_products}"
loading_products: "Chargement des produits"
tag_rules:
shipping_method_tagged_top: "Méthodes d'expédition étiquetées"
shipping_method_tagged_bottom: "sont:"

View File

@@ -1284,6 +1284,7 @@ fr_CA:
saving_credit_card: Enregistrement de la carte de crédit...
card_has_been_removed: "Votre carte a été supprimée (numéro : %{number})"
card_could_not_be_removed: Désolée, la carte n'a pas pu être supprimée :-(
invalid_credit_card: "Cette carte de crédit n'est pas valide"
ie_warning_headline: "Votre navigateur n'est pas à jour :-("
ie_warning_text: "Pour une expérience optimale sur Open Food Network, nous vous recommandons fortement de mettre à jour votre navigateur:"
ie_warning_chrome: Télécharger Chrome
@@ -2437,11 +2438,11 @@ fr_CA:
description: Description
resolve: Résoudre
exchange_products:
load_more_products: "Voir plus de produits"
load_all_products: "Voir tous les produits"
select_all_products: "Sélectionner tous les %{total_number_of_products} produits"
products_loaded: "%{num_of_products_loaded}sur %{total_number_of_products}produits affichés"
loading_products: "Produits en cours de chargement..."
load_more_variants: "Afficher plus de variantes"
load_all_variants: "Afficher toutes les variantes"
select_all_variants: "Sélectionnez toutes les%{total_number_of_variants}variantes"
variants_loaded: "%{num_of_variants_loaded}sur%{total_number_of_variants}variantes"
loading_variants: "Chargement des variantes"
tag_rules:
shipping_method_tagged_top: "Les méthodes de livraison taggées"
shipping_method_tagged_bottom: "sont:"
@@ -2601,6 +2602,79 @@ fr_CA:
signup_or_login: "Commencez par vous inscrire (ou vous connecter)"
have_an_account: "Déjà inscrit?"
action_login: "Se connecter."
inflections:
each:
one: "chacun"
other: "chacun"
bunch:
one: "bouquet"
other: "bouquets"
pack:
one: "caisse"
other: "caisses"
box:
one: "boîte"
other: "boîtes"
bottle:
one: "bouteille"
other: "bouteilles"
jar:
one: "bocal"
other: "bocaux"
head:
one: "tête"
other: "têtes"
bag:
one: "sac"
other: "sacs"
loaf:
one: "miche"
other: "miches"
single:
one: "unité"
other: "unités"
tub:
one: "bac"
other: "bacs"
punnet:
one: "barquette"
other: "barquettes"
packet:
one: "paquets"
other: "paquets"
item:
one: "article"
other: "articles"
dozen:
one: "dizaine"
other: "dizaines"
unit:
one: "unité"
other: "unités"
serve:
one: "service"
other: "services"
tray:
one: "plateau"
other: "plateaux"
piece:
one: "pièce"
other: "pièces"
pot:
one: "pots"
other: "pots"
bundle:
one: "botte"
other: "bottes"
flask:
one: "flacons"
other: "flacon"
basket:
one: "panier"
other: "paniers"
sack:
one: "sachet"
other: "sachets"
producers:
signup:
start_free_profile: "Commencez par créer votre profil entreprise, c'est gratuit, et changez de formule quand vous êtes prêt !"
@@ -2843,6 +2917,8 @@ fr_CA:
zipcode: Code postal
weight: Poids (au kg)
error_user_destroy_with_orders: "Les utilisateurs avec des commandes finalisées pourraient ne pas être supprimés"
cannot_create_payment_without_payment_methods: "Vous ne pouvez pas ajouter un paiement pour une commande sans avoir défini de méthode de paiement au préalable."
please_define_payment_methods: "Il faut que vous définissiez une méthode de paiement avant tout !"
options: "Options"
actions:
update: "Mettre à jour"

View File

@@ -1282,6 +1282,7 @@ nb:
saving_credit_card: Lagrer kredittkort ...
card_has_been_removed: "Ditt kort er fjernet (nummer: %{number})"
card_could_not_be_removed: Beklager, kortet kunne ikke fjernes
invalid_credit_card: "Ugyldig kort"
ie_warning_headline: "Din nettleser er for gammel :-("
ie_warning_text: "For den beste opplevelsen med Open Food Network anbefaler vi på det sterkeste å oppgradere nettleseren din:"
ie_warning_chrome: Last ned Chrome
@@ -2425,11 +2426,11 @@ nb:
description: Beskrivelse
resolve: Løse
exchange_products:
load_more_products: "Last inn flere produkter"
load_all_products: "Last inn alle produkter"
select_all_products: "Velg alle %{total_number_of_products} produkter"
products_loaded: "%{num_of_products_loaded} av %{total_number_of_products} produkter lastet"
loading_products: "Laster inn produkter"
load_more_variants: "Last inn flere varianter"
load_all_variants: "Last inn alle varianter"
select_all_variants: "Velg alle %{total_number_of_variants} varianter"
variants_loaded: "%{num_of_variants_loaded} av %{total_number_of_variants} Varianter lastet"
loading_variants: "Laster varianter"
tag_rules:
shipping_method_tagged_top: "Leveringsmetoder merket"
shipping_method_tagged_bottom: "er:"
@@ -2587,6 +2588,79 @@ nb:
signup_or_login: "Kom i gang ved å registrere deg (eller logge inn)"
have_an_account: "Har du allerede en konto?"
action_login: "Logg inn nå."
inflections:
each:
one: "Hver"
other: "hver"
bunch:
one: "bunke"
other: "bunker"
pack:
one: "pakke"
other: "pakker"
box:
one: "eske"
other: "esker"
bottle:
one: "flaske"
other: "flasker"
jar:
one: "krukke"
other: "krukker"
head:
one: "hode"
other: "hoder"
bag:
one: "pose"
other: "poser"
loaf:
one: "skive"
other: "skiver"
single:
one: "enkelt"
other: "enkle"
tub:
one: "kar"
other: "kar"
punnet:
one: "eske"
other: "esker"
packet:
one: "pakke"
other: "pakker"
item:
one: "stk"
other: "stk"
dozen:
one: "dusin"
other: "dusin"
unit:
one: "enhet"
other: "enheter"
serve:
one: "porsjon"
other: "porsjoner"
tray:
one: "brett"
other: "brett"
piece:
one: "stykke"
other: "stykker"
pot:
one: "gryte"
other: "gryter"
bundle:
one: "bunt"
other: "bunter"
flask:
one: "kolbe"
other: "kolber"
basket:
one: "kurv"
other: "kurver"
sack:
one: "sekk"
other: "sekker"
producers:
signup:
start_free_profile: "Start med en gratis profil, og utvid når du er klar!"

View File

@@ -702,6 +702,10 @@ pt_BR:
enable_subscriptions_false: "Desativado"
enable_subscriptions_true: "ativado"
shopfront_message: "Mensagem da vitrine da loja"
shopfront_message_placeholder: >
Uma mensagem opcional para dar as boas-vindas aos clientes e explicar
como comprar com você. Se o texto for inserido aqui, ele será exibido
em uma guia inicial quando os clientes chegarem à sua loja.
shopfront_message_link_tooltip: "Inserir / editar link"
shopfront_message_link_prompt: "Digite um URL para inserir"
shopfront_closed_message: "Mensagem de loja fechada"
@@ -1106,6 +1110,7 @@ pt_BR:
already_ordered:
cart: "Carrinho"
message_html: "Você já possui um pedido para esta compra. Verifique o %{cart} para ver os itens já encomendados. Você também pode cancelar itens enquanto o ciclo estiver aberto."
failed: "O checkout falhou. Informe-nos para que possamos processar seu pedido."
shops:
hubs:
show_closed_shops: "Mostrar lojas fechadas"
@@ -1276,6 +1281,7 @@ pt_BR:
saving_credit_card: Salvando cartão de crédito...
card_has_been_removed: "O seu cartão foi removido (número: %{number})"
card_could_not_be_removed: Desculpe, o cartão não pode ser removido
invalid_credit_card: "Cartão de crédito inválido"
ie_warning_headline: "Seu navegador está desatualizado :("
ie_warning_text: "Para a melhor experiência na Open Food Brasil, recomendamos que você atualize seu navegador:"
ie_warning_chrome: Baixar Chrome
@@ -1936,6 +1942,7 @@ pt_BR:
tax_category: "Categoria de taxa"
calculator: "Calculadora"
calculator_values: "Valores da calculadora"
calculator_settings_warning: "Se você estiver alterando o tipo de calculadora, salve primeiro antes de poder editar as configurações da calculadora."
flat_percent_per_item: "Percentual (por unidade)"
flat_rate_per_item: "Taxa fixa (por item)"
flat_rate_per_order: "Taxa fixa ( por pedido)"
@@ -2423,11 +2430,11 @@ pt_BR:
description: Descrição
resolve: Resolver
exchange_products:
load_more_products: "Carregar Mais Produtos"
load_all_products: "Carregar Todos os Produtos"
select_all_products: "Selecionar %{total_number_of_products}Produto(s)"
products_loaded: "%{num_of_products_loaded} de %{total_number_of_products}Produtos Carregados"
loading_products: "Carregando Produtos"
load_more_variants: "Carregar mais variantes"
load_all_variants: "Carregar todas as variantes"
select_all_variants: "Selecionar todas as %{total_number_of_variants} variantes"
variants_loaded: "%{num_of_variants_loaded} de %{total_number_of_variants} Variantes carregadas"
loading_variants: "Carregando variantes"
tag_rules:
shipping_method_tagged_top: "Métodos de envio selecionados"
shipping_method_tagged_bottom: "são:"
@@ -2828,6 +2835,8 @@ pt_BR:
zipcode: CEP
weight: Peso (por kg)
error_user_destroy_with_orders: "Usuários com pedidos concluídos não podem ser excluídos"
cannot_create_payment_without_payment_methods: "Você não pode criar um pagamento para um pedido sem métodos de pagamento definidos."
please_define_payment_methods: "Defina primeiro algum método de pagamento."
options: "Opções"
actions:
update: "Atualizar"

View File

@@ -176,7 +176,7 @@ tr:
title: ık Gıda Ağı
welcome_to: '''na Hoşgeldiniz'
site_meta_description: "Açık Gıda Ağı, farklı ülkelerdeki temiz gıda üreticileri ve yazılımcılar tarafından yeni bir gıda sistemi oluşturmak üzere tasarlandı. Üretici ve türeticilerin bir araya gelerek aracısız bir gıda düzeni ile her açıdan daha sağlıklı bir toplum yaratmaları için çözümler sunar. Toplum yararına çalışır ve tamamen şeffaftır."
search_by_name: İsme veya bölgeye göre arama yapın...
search_by_name: İsim veya konuma göre arama yapın...
producers_join: Yerel ve temiz üreticiler şimdi Açık Gıda Ağı'na katılabilirler.
charges_sales_tax: KDV Uyguluyor mu?
print_invoice: "Faturayı yazdır"
@@ -381,7 +381,7 @@ tr:
search_by_email: "E-posta / kod ile arama ..."
guest_label: 'Misafir Ödemesi'
destroy:
has_associated_orders: 'Silme başarısız oldu: müşterinin ilişkili siparişleri var'
has_associated_orders: 'Silme başarısız oldu: müşterinin bağlantılı siparişleri var'
contents:
edit:
title: İçerik
@@ -401,8 +401,8 @@ tr:
fee_type: "Ücret Türü"
name: "Ad"
tax_category: "Vergi Tipi"
calculator: "Hesaplayıcı"
calculator_values: "Hesaplayıcı Değerleri"
calculator: "Hesaplama"
calculator_values: "Hesaplama Değerleri"
search: "Arama"
name_placeholder: "örn. paketleme ücreti"
enterprise_groups:
@@ -420,7 +420,7 @@ tr:
display_as: Gösterme Şekli
category: Kategori
tax_category: Vergi Kategorisi
inherits_properties?: Özellikler kopyalanıyor mu?
inherits_properties?: Özellikler aktarılıyor mu?
available_on: Mevcut Olma Tarihi
av_on: "Mevcut Olma Tarihi"
import_date: Aktarıldı
@@ -433,7 +433,7 @@ tr:
search: "Ara"
properties:
property_name: "Özellik Adı"
inherited_property: "Kopyalanan Özellik"
inherited_property: "Aktarılan Özellik"
variants:
infinity: "Sonsuz"
to_order_tip: "Sipariş üzerine yapılan ürünlerin, belirlenmiş stok seviyeleri yoktur."
@@ -514,10 +514,10 @@ tr:
entries_with_errors: Öğeler hata içeriyor ve içe aktarılmayacak
products_to_create: Ürünler oluşturulacak
products_to_update: Ürünler güncellenecek
inventory_to_create: Stok kalemleri oluşturulacak
inventory_to_update: Stok kalemleri güncellenecek
inventory_to_create: Stok ürünleri oluşturulacak
inventory_to_update: Stok ürünleri güncellenecek
products_to_reset: Mevcut ürünlerin stokları sıfırlanacak
inventory_to_reset: Mevcut stok kalemleri sıfırlanacak
inventory_to_reset: Mevcut ürünlerinin stok seviyeleri sıfırlanacak
line: Satır
item_line: Öğe satırı
import_review:
@@ -529,10 +529,10 @@ tr:
final_results: Sonuçları içe aktarın
products_created: Oluşturulan ürünler
products_updated: Güncellenen ürünler
inventory_created: Stok kalemleri oluşturuldu
inventory_updated: Stok kalemleri güncellendi
inventory_created: Stok ürünleri oluşturuldu
inventory_updated: Stok ürünleri güncellendi
products_reset: Ürünlerin stok seviyeleri sıfırlandı
inventory_reset: Stok ürünlerinin seviyesi sıfırlandı
inventory_reset: Ürünlerin stok seviyeleri sıfırlandı
all_saved: "Tüm ürünler başarıyla kaydedildi"
some_saved: "Ürünler başarıyla kaydedildi"
save_errors: Yükleme Hatası
@@ -547,7 +547,7 @@ tr:
description: İşletmelerinizin stoklarını yönetmek için bu sayfayı kullanın. Burada yapılan değişiklikler 'Ürünler' sayfasındaki ayarları da günceller.
enable_reset?: Stok Sıfırlama etkinleştirilsin mi?
default_stock: "Varsayılan stok"
inherit?: Kopyala?
inherit?: Aktar?
add: Ekle
hide: Sakla
import_date: Aktarıldı
@@ -560,7 +560,7 @@ tr:
no_matching_hidden_products: Arama kriterlerinize uyan gizlenmiş ürün yok
no_new_products: Stoklara eklenecek yeni ürün yok
no_matching_new_products: Arama kriterlerinize uyan yeni ürün yok
inventory_powertip: Burası sizin ürün envanteriniz. Ürün eklemek için menüdeki 'Yeni Ürün' butonun tıklayın.
inventory_powertip: Burası sizin ürün envanteriniz, stok takip merkeziniz. Ürün eklemek için menüdeki 'Yeni Ürün' butonun tıklayın.
hidden_powertip: Bu ürünler stoklarınızda gizlendi ve tezgahlarınızda görünür olmayacak. Stoklarınıza ürün eklemek için 'Ekle' butonuna tıklayabilirsiniz.
new_powertip: Bu ürünler stoklarınıza eklenmeye hazır. Stoğunuza ürün eklemek için 'Ekle'yi veya tezgahınızda gizlemek için 'Gizle'yi tıklayın. İstediğiniz zaman fikrinizi değiştirebilirsiniz!
controls:
@@ -609,7 +609,7 @@ tr:
abn: VKN/TCKN
abn_placeholder: Örn. 12345678990
acn: Tic. Sicil No.
acn_placeholder: Örneğin. 530 123 45 67
acn_placeholder: Örn. 0530 123 45 67
display_invoice_logo: Faturalarda logoyu göster
invoice_text: Faturaların sonuna özelleştirilmiş metin ekle
contact:
@@ -636,14 +636,14 @@ tr:
promo_image_note3: Kapak resmi, bir işletmenin profil sayfasının üstünde görüntülenir.
inventory_settings:
text1: Stok seviyelerini ve fiyatları şuradan yönetebilirsiniz
inventory: Stoklar
inventory: Stok
text2: >
Stok sistemini kullanıyorsanız, tedarikçileriniz yeni bir ürün eklediğinde,
ürünün satış listenize eklenmeden önce Stok'larınıza eklenip eklenmemesi
ürünün satış listenize eklenmeden önce Stok listenize eklenip eklenmemesi
gerektiğini seçebilirsiniz. Eğer ürünlerinizi yönetmek için Stok sistemini
kullanmıyorsanız 'tavsiye edilen' seçenek ile devam etmeniz gerekir.
kullanmıyorsanız 'tavsiye edilen' seçeneği ile devam etmeniz gerekir.
preferred_product_selection_from_inventory_only_yes: Tezgahınıza yeni ürünler eklenebilir (önerilir)
preferred_product_selection_from_inventory_only_no: Yeni ürünler tezgahınıza eklemeden önce stoklara girilmelidir
preferred_product_selection_from_inventory_only_no: Yeni ürünler tezgahınıza eklemeden önce Stok listesine girilmelidir
payment_methods:
name: Ad
applies: Uygulanma?
@@ -700,7 +700,7 @@ tr:
enable_subscriptions_tip: "Üyelik işlevselliği etkinleştirilsin mi?"
enable_subscriptions_false: "Kapalı"
enable_subscriptions_true: "Etkin"
shopfront_message: "Mesajınız"
shopfront_message: "Tezgah Mesajınız"
shopfront_message_placeholder: >
Müşterilerinize merhaba diyebilir, tezgahınız ve alışveriş şartlarınız
ile ilgili bilgi verebilirsiniz. Yazdıklarınız, müşteriler tezgahınızı
@@ -793,7 +793,7 @@ tr:
profile_description_text: İnsanlar Açık Gıda Ağı üzerinden sizi bulabilir ve sizinle iletişim kurabilir. İşletmeniz haritada ve listelerde görünür olacak.
hub_shop: Türetici Pazarı
hub_shop_text: Başkalarının ürünlerini satın
hub_shop_description_text: İşletmeniz yerel gıda sisteminizin belkemiğidir. Diğer işletmelerin ürünlerini bir araya getirebilir, Açık Gıda Ağı'na kayıtlı tezgahınız üzerinden alıcılara ulaştırabilirsiniz.
hub_shop_description_text: İşletmeniz yerel gıda sisteminizin belkemiğidir. Diğer işletmelerin ürünlerini bir araya getirebilir, Açık Gıda Ağı'na kayıtlı pazar yeriniz üzerinden alıcılara ulaştırabilirsiniz.
choose_option: Lütfen yukarıdaki seçeneklerden birini seçin.
change_now: Değiştir
enterprise_user_index:
@@ -882,13 +882,13 @@ tr:
advanced_settings:
title: Gelişmiş Ayarlar
choose_product_tip: Gelen ve giden ürünleri sadece stokların %{inventory} 'i ile kısıtlayabilirsiniz.
preferred_product_selection_from_coordinator_inventory_only_here: Yalnızca Yönetici Envanteri
preferred_product_selection_from_coordinator_inventory_only_here: Yalnızca Koordinatör Stokları
preferred_product_selection_from_coordinator_inventory_only_all: Tüm Mevcut Ürünler
save_reload: Sayfayı Kaydet ve Yeniden Yükle
coordinator_fees:
add: Yönetici ücreti ekle
add: Koordinatör ücreti ekle
filters:
search_by_order_cycle_name: "Sipariş Dönemi adına göre ara ..."
search_by_order_cycle_name: "Sipariş Dönemi adına göre arayın ..."
involving: "İçeriyor"
any_enterprise: "Herhangi Bir İşletme"
any_schedule: "Herhangi Bir Takvim"
@@ -911,7 +911,7 @@ tr:
name_and_timing_form:
name: ad
orders_open: 'Siparişler şu zamanda açık:'
coordinator: yönetici
coordinator: Koordinatör
orders_close: Siparişler kapalı
row:
suppliers: tedarikçileri
@@ -989,7 +989,7 @@ tr:
customers:
name: Müşteriler
products_and_inventory:
name: Ürünler ve Stoklar
name: Ürünler ve Stok
users_and_enterprises:
name: Kullanıcılar ve İşletmeler
description: 'İşletme Hesabı Yönetimi '
@@ -1021,7 +1021,7 @@ tr:
just_a_few_more_steps: 'Başlamadan önce birkaç adım kaldı:'
enable_subscriptions: "Tezgahlarınızdan/pazarlarınızdan en az biri için üyelikleri etkinleştirin"
enable_subscriptions_step_1_html: 1. %{enterprises_link} sayfasına gidin, tezgahınızı bulun ve Yöneti tıklayın
enable_subscriptions_step_2: '''Vitrin Tercihleri'' altındaki Üyelikler seçeneğini etkinleştirin'
enable_subscriptions_step_2: '''Tezgah Tercihleri'' altındaki Üyelikler seçeneğini etkinleştirin'
set_up_shipping_and_payment_methods_html: '%{shipping_link} ve %{payment_link} yöntemlerini ayarlayın'
set_up_shipping_and_payment_methods_note_html: Yalnızca Nakit ve Şerit ödeme yöntemlerinin <br />'ü üyeliklerle kullanılabilir
ensure_at_least_one_customer_html: En az bir %{customer_link} bulunduğundan emin olun
@@ -1281,6 +1281,7 @@ tr:
saving_credit_card: Kredi kartı kaydediliyor ...
card_has_been_removed: "Kartınız kaldırıldı (sayı: %{number})"
card_could_not_be_removed: Maalesef kart kaldırılamadı
invalid_credit_card: "Geçersiz kredi kartı"
ie_warning_headline: "Tarayıcınız güncel değil :-("
ie_warning_text: "En iyi Açık Gıda Ağı deneyimi için tarayıcınızı güncellemenizi önemle öneririz:"
ie_warning_chrome: Chrome'u indirin
@@ -1293,13 +1294,13 @@ tr:
desc_part_1: "Çerezler, bazı web sitelerini ziyaret ettiğinizde bilgisayarınızda depolanan çok küçük metin dosyalarıdır."
desc_part_2: "AGA'da gizliliğinize tamamen saygılıyız. Yalnızca size gıda satma/satın alma hizmetini sunmak için gerekli olan çerezleri kullanıyoruz. Verilerinizin hiçbirini satmıyoruz. Gelecekte, ekosistem için yararlı olabilecek yeni müşterek hizmetleri oluşturmak için bazı verilerinizi paylaşmanızı önerebiliriz (yerel gıda sistemleri için lojistik hizmetler gibi) ama henüz o seviyede değiliz ve bunu zaten sizin izniniz olmadan yapmayacağız :-)"
desc_part_3: "Platforma 'Giriş' yaptığınızda kim olduğunuzu hatırlamak veya giriş yapmamış olsanız bile sepetinize koyduğunuz ürünleri hatırlayabilmek için çerezleri kullanırız. “Çerezleri kabul et” butonuna tuşlamadan gezinmeye devam ederseniz, web sitesinin çalışması için gerekli olan çerezleri saklamak için bize izin verdiğinizi varsayıyoruz. İşte kullandığımız çerezlerin listesi!"
essential_cookies: "Temel Çerezler"
essential_cookies: "Kullanılması Zorunlu Olan Çerezler"
essential_cookies_desc: "Web sitemizin çalışması için aşağıdaki çerezler kesinlikle gereklidir."
essential_cookies_note: "Çerezlerin çoğu yalnızca benzersiz bir tanımlayıcı içerir, ancak başka hiçbir veri içermez, bu nedenle örneğin e-posta adresiniz ve şifreniz hiçbir zaman bunlarda bulunmaz ve hiçbir zaman açıklanmaz."
cookie_domain: "Olarak ayarla:"
cookie_session_desc: "Web sitesinin sayfa ziyaretleri arasındaki kullanıcıları hatırlamasına, örneğin sepetinizdeki öğeleri hatırlamasına izin vermek için kullanılır."
cookie_consent_desc: "Çerezleri depolamak için kullanıcı onayının durumunu korumak amacıyla kullanılır"
cookie_remember_me_desc: "Kullanıcı web sitesinden kendisini hatırlamasını isterse kullanılır. Bu çerez 12 gün sonra otomatik olarak silinir. Kullanıcı olarak bu çerezin silinmesini istiyorsanız, yalnızca çıkış yapmanız gerekir. Bu çerezin bilgisayarınıza yüklenmesini istemiyorsanız, giriş yaparken “beni hatırla” onay kutusunu işaretlememelisiniz."
cookie_remember_me_desc: "Kullanıcı web sitesinden kendisini hatırlamasını isterse kullanılır. Bu çerez 12 gün sonra otomatik olarak silinir. Kullanıcı olarak bu çerezin silinmesini istiyorsanız, hesabınızdan çıkış yapmanız yeterli. Bu çerezin bilgisayarınıza yüklenmesini istemiyorsanız, giriş yaparken “beni hatırla” onay kutusunu işaretlememelisiniz."
cookie_openstreemap_desc: "Sevecen açık kaynak harita sağlayıcımız (OpenStreetMap) tarafından, belirli bir süre içinde çok fazla istek almamasını ve hizmetlerinin kötüye kullanılmasını önlemek için kullanılır."
cookie_stripe_desc: "Sahtekarlık tespiti için ödeme işlemcimiz Stripe tarafından toplanan veriler https://stripe.com/cookies-policy/legal. Tüm mağazalar Stripe'ı ödeme yöntemi olarak kullanmaz, ancak dolandırıcılığın tüm sayfalara uygulanmasını önlemek iyi bir yöntemdir. Stripe muhtemelen sayfalarımızdan hangilerinin genellikle API'leriyle etkileşime girdiğini gösteren bir resim oluşturur ve daha sonra olağandışı bir şeyi işaretler. Dolayısıyla, Stripe çerezinin ayarlanması, kullanıcıya ödeme yönteminin sağlanmasından daha geniş bir işleve sahiptir. Kaldırılması hizmetin güvenliğini etkileyebilir. Stripe hakkında daha fazla bilgi edinebilir ve gizlilik politikasını https://stripe.com/privacy adresinde okuyabilirsiniz."
statistics_cookies: "İstatistik Çerezleri"
@@ -1323,13 +1324,13 @@ tr:
disabling_cookies_safari_link: "https://www.apple.com/legal/privacy/en-ww/cookies/"
disabling_cookies_note: "Ancak, Açık Gıda Ağı tarafından kullanılan temel çerezleri silerseniz veya değiştirirseniz, web sitesinin çalışmadığını, örneğin ödeme yapmak için sepetinize hiçbir şey ekleyemeyeceğinizi unutmayın."
cookies_banner:
cookies_usage: "Bu site, gezinmenizi sürtünmesiz ve güvenli hale getirmek ve sunduğumuz özellikleri iyileştirmek için nasıl kullandığınızı anlamamıza yardımcı olmak için çerezleri kullanır."
cookies_usage: "Bu site, gezinmenizi sorunsuz ve güvenli hale getirmek ve sunduğumuz özellikleri iyileştirmek için nasıl kullandığınızı anlamamıza yardımcı olmak için çerezleri kullanır."
cookies_definition: "Çerezler, bazı web sitelerini ziyaret ettiğinizde bilgisayarınızda depolanan çok küçük metin dosyalarıdır."
cookies_desc: "Yalnızca size çevrimiçi yiyecek satma / satın alma hizmetini sunmak için gerekli olan çerezleri kullanıyoruz. Verilerinizin hiçbirini satmıyoruz. Hizmete giriş yaptığınızda kim olduğunuzu hatırlamak veya giriş yapmamış olsanız bile sepetinize koyduğunuz öğeleri hatırlayabilmek için çerezleri kullanırız. Tıklamadan web sitesinde gezinmeye devam ederseniz “Çerezleri kabul et”, web sitesinin çalışması için gerekli olan çerezleri saklamak için bize izin verdiğinizi varsayıyoruz."
cookies_policy_link_desc: "Daha fazla bilgi edinmek istiyorsanız,"
cookies_policy_link: "çerezler politikası"
cookies_accept_button: "Çerezleri kabul et"
home_shop: Şimdi alışveriş yap
home_shop: Şimdi Alışveriş Yap
brandstory_headline: "Bağımsız, adil ve temiz gıda ..."
brandstory_intro: "Bazen sistemi düzeltmenin en iyi yolu yeni bir sistem yaratmaktır…"
brandstory_part1: "Açık Gıda Ağı, farklı ülkelerdeki temiz gıda üreticileri ve yazılımcılar tarafından yeni bir gıda sistemi oluşturmak üzere tasarlandı. Üretici ve türeticilerin bir araya gelerek aracısız bir gıda düzeni ile her açıdan daha sağlıklı bir toplum yaratmaları için çözümler sunar. Toplum yararına çalışır ve tamamen şeffaftır."
@@ -1396,7 +1397,7 @@ tr:
order_includes_tax: (vergi dahil)
order_payment_paypal_successful: PayPal ile ödemeniz başarıyla işlendi.
order_hub_info: Pazar Bilgisi
order_back_to_store: Alışverişe Geri Dön
order_back_to_store: Siteye Geri Dön
order_back_to_cart: Sepete geri dön
bom_tip: "Birden çok siparişteki ürün miktarlarını değiştirmek için bu sayfayı kullanın. Ürünler gerektiğinde tüm siparişlerden tamamen kaldırılabilir."
unsaved_changes_warning: "Kaydedilmemiş değişiklikler var ve devam ederseniz kaybolacak."
@@ -1496,7 +1497,7 @@ tr:
enterprises_choose: "Siparişinizi ne zaman istediğinizi seçin:"
maps_open: "Açık"
maps_closed: "Kapalı"
hubs_buy: "Alışveriş ürünleri:"
hubs_buy: "Neler Bulabilirsiniz:"
hubs_shopping_here: "Alışveriş noktası"
hubs_orders_closed: "Siparişler kapalı"
hubs_profile_only: "Yalnızca profil"
@@ -1532,7 +1533,7 @@ tr:
products_update_error_data: "Geçersiz veriler nedeniyle kaydetme başarısız oldu:"
products_changes_saved: "Değişiklikler kaydedildi."
search_no_results_html: "Üzgünüz, %{query} için sonuç bulunamadı. Başka bir arama yapmak ister misiniz?"
components_profiles_popover: "Açık Gıda Ağında bir tezgahı olmayan ancak başka bir sitede kendi satış siteleri olan hesaplar"
components_profiles_popover: "Açık Gıda Ağında bir vitrini olmayan ancak başka bir sitede kendi satış siteleri olan hesaplar"
components_profiles_show: "Profilleri göster"
components_filters_nofilters: "Filtresiz"
components_filters_clearfilters: "Tüm filtreleri temizle"
@@ -1790,7 +1791,7 @@ tr:
yes_producer: "Evet, üreticiyim"
no_producer: "Hayır, üretici değilim"
producer_field_error: "Lütfen birini seçin. Üretici misiniz?"
yes_producer_help: "Siz de birşeyler yetiştiriyor, büyütüyor, sağıyor, hasat ediyor, pişiriyor kurutuyor veya hazırlıyorsanız, siz de bir üreticisiniz."
yes_producer_help: "Siz de birşeyler yetiştiriyor, büyütüyor, sağıyor, hasat ediyor, pişiriyor kurutuyor veya hazırlıyorsanız, üreticisiniz demektir."
no_producer_help: "Üretici değilseniz muhtemelen gıdaya ulaşım sağlayan, dağıtım veya satış yapan bir grup ya da işletmesiniz. Bir dükkan, kooperatif, gıda topluluğu, restaurant veya toptancı bile olabilirsiniz. "
create_profile: "Profil oluştur"
about:
@@ -1805,9 +1806,9 @@ tr:
enterprise_long_desc_placeholder: "Bu, işletmenizin hikayesini insanlara anlatmak için harika bir fırsat! - İnsanlara kendinizden bahsedin. Açıklamanızı 600 karakter veya 150 kelimenin altında tutmanızı öneririz."
enterprise_long_desc_length: "%{num} karakter / 600'e kadar önerilir"
enterprise_abn: "VKN/TCKN"
enterprise_abn_placeholder: "Örneğin. 99123456879"
enterprise_abn_placeholder: "Örn. 123 456 7890"
enterprise_acn: "Tic. Sicil No."
enterprise_acn_placeholder: "Örneğin. 123 456 789"
enterprise_acn_placeholder: "Örn. 123 456 789"
enterprise_tax_required: "Bir seçim yapmanız gerekiyor."
images:
title: "Görüntüler"
@@ -1939,9 +1940,9 @@ tr:
delivery_method: Teslimat Yöntemi
fee_type: "Ücret Türü"
tax_category: "Vergi Kategorisi"
calculator: "Hesaplayıcı"
calculator_values: "Hesaplayıcı Değerleri"
calculator_settings_warning: "Hesaplayıcı türünü değiştiriyorsanız, ayarları düzenlemeden önce kaydetmeniz gerekir"
calculator: "Hesaplama"
calculator_values: "Hesaplama Değerleri"
calculator_settings_warning: "Hesaplama türünü değiştiriyorsanız, ayarları düzenlemeden önce kaydetmeniz gerekir"
flat_percent_per_item: "Sabit Yüzde (ürün başına)"
flat_rate_per_item: "Sabit Ücret (ürün başına)"
flat_rate_per_order: "Sabit Ücret (sipariş Başına) "
@@ -2371,7 +2372,7 @@ tr:
gerek yoktur.
profile_only_text3: >
Ürünlerinizi Açık Gıda Ağı'na ekleyin. Böylece üretici & türetici pazarları
gibi diğer hesaplar ürünlerinizi kendi stoklarına ekleyip satışa sunabilsinler.
gibi diğer hesaplar ürünlerinizi kendi listelerine ekleyip satışa sunabilsinler.
producer_shop: Üretici Tezgahı
producer_shop_text1: >
ık Gıda Ağı üzerindeki tezgahınız aracılığıyla ürünlerinizi alıcılara
@@ -2401,10 +2402,9 @@ tr:
enterprise_producer:
producer: Üretici
producer_text1: >
Dürüst ve bilinçli üreticiler, insanlara sağlıklı ve lezzetli yiyecek
ve içecekler sağlar. Siz de tamamen doğal yollarla bir şeyler yettiriyor,
büyütüyor, pişiriyor, sağıyor veya mayalıyorsanız, bu üreticilerden
birisiniz demektir.
Dürüst ve bilinçli üreticiler, insanlara sağlıklı gıdalar sağlar. Siz
de birşeyler yetiştiriyor, büyütüyor, sağıyor, hasat ediyor, pişiriyor
kurutuyor veya hazırlıyorsanız, üreticisiniz demektir.
producer_text2: >
Üreticiler sistem üzerinde farklı şekillerde aktif olarak da hem kendilerine
hem de diğer işletmelere daha faydalı olabilirler. Çevrelerindeki üreticilerin
@@ -2421,18 +2421,18 @@ tr:
producer_desc: Gıda üreticileri
producer_example: 'Örn: ÇİFTÇİLER, FIRINLAR, ÜRETİM KOOPERATİFLERİ vs.'
non_producer_desc: Diğer tüm gıda işletmeleri
non_producer_example: 'Örn: Dükkanlar, Gıda Kooperatifleri, Gıda Toplulukları vs.'
non_producer_example: 'Örn: Manavlar, Gıda Kooperatifleri, Gıda Toplulukları vs.'
enterprise_status:
status_title: "%{name} kuruldu ve başlamaya hazır!"
severity: şiddet
severity: Şiddet
description: ıklama
resolve: çözmek
resolve: Çözüm
exchange_products:
load_more_products: "Daha fazla ürün yükle"
load_all_products: "Tüm Ürünleri Yükle"
select_all_products: "Tümünü Seç %{total_number_of_products} Ürün"
products_loaded: " %{total_number_of_products}üründen %{num_of_products_loaded} ürün yüklendi"
loading_products: "Ürünler Yükleniyor"
load_more_variants: "Daha Fazla Varyant Yükle"
load_all_variants: "Tüm Varyantları Yükle"
select_all_variants: "Tüm %{total_number_of_variants} Varyantı Seç"
variants_loaded: "%{total_number_of_variants} Varyanttan %{num_of_variants_loaded} Tanesi Yüklendi"
loading_variants: "Varyantlar Yükleniyor"
tag_rules:
shipping_method_tagged_top: "Teslimat yöntemleri etiketlendi"
shipping_method_tagged_bottom: "şunlardır:"
@@ -2446,7 +2446,7 @@ tr:
select_rule_type: "Bir kural türü seçin:"
add_rule: "Kural Ekle"
enterprise_fees:
inherit_from_product: "Üründen Kopyala"
inherit_from_product: "Üründen Aktar"
orders:
index:
per_page: "sayfa başına %{results}"
@@ -2469,7 +2469,7 @@ tr:
pending: "Bekliyor"
resumed: "devam ettirildi"
returned: "iade"
skrill: "Skrill"
skrill: "skrill"
shipment_states:
backorder: "bekleyen sipariş"
partial: "kısmi"
@@ -2505,7 +2505,7 @@ tr:
updated_schedule: "Takvim güncellendi"
deleted_schedule: "Takvim silindi"
name_required_error: "Lütfen bu takvim için bir ad girin"
no_order_cycles_error: "Lütfen en az bir sipariş döngüsü seçin (sürükle ve bırak)"
no_order_cycles_error: "Lütfen en az bir sipariş dönemi seçin (sürükle ve bırak)"
available: "Mevcut"
selected: "Seçildi"
customers:
@@ -2517,10 +2517,10 @@ tr:
subscriptions:
error_saving: "Üyelik kaydedilirken hata oluştu"
new:
please_select_a_shop: "Lütfen bir dükkan seçin"
please_select_a_shop: "Lütfen bir pazar seçin"
insufficient_stock: "Yetersiz stok, sadece %{on_hand} kaldı"
out_of_stock:
reduced_stock_available: İndirgenmiş stok mevcut
reduced_stock_available: Azaltılmış stok mevcut
out_of_stock_text: >
Siz alışveriş yaparken sepetinizdeki ürünlerden bir veya birkaç tanesinin
stok seviyesi düşürüldü. Değişiklikler:
@@ -2534,7 +2534,7 @@ tr:
use_producer_settings: "Üretici stoklarını kullan"
'yes': "Evet"
'no': "Hayır"
inventory_products: "Envanter Ürünleri"
inventory_products: "Stok Ürünleri"
hidden_products: "Gizli Ürünler"
new_products: "Yeni ürünler"
reset_stock_levels: Stok Seviyelerini Varsayılanlara Sıfırla
@@ -2591,6 +2591,73 @@ tr:
signup_or_login: "Kaydolarak Başlayın (veya giriş yapın)"
have_an_account: "Zaten hesabınız var mı?"
action_login: "Şimdi giriş yapın."
inflections:
each:
one: "her biri"
other: "her biri"
bunch:
one: "Demet"
other: "demet"
pack:
one: "pack"
other: "paket"
box:
one: "Kutu"
other: "koli"
bottle:
one: "şişe"
other: "şişe"
jar:
one: "kavanoz"
other: "kavanoz"
head:
one: "kafa"
other: "baş"
bag:
one: "sırt çantası"
other: "çanta"
loaf:
one: "somun"
other: "somun"
single:
one: "tek"
other: "tane"
tub:
one: "küvet"
other: "fıçı"
punnet:
one: "meyve sepeti"
other: "meyve sepeti"
packet:
one: "paket"
other: "paket"
item:
one: "madde"
other: "Ürün"
dozen:
one: "düzine"
other: "deste"
unit:
one: "birim"
other: "birimler"
serve:
one: "servis"
other: "porsiyon"
piece:
one: "parça"
other: "parça"
bundle:
one: "demeti"
other: "demet"
flask:
one: "şişe"
other: "cep şişesi"
basket:
one: "sepet"
other: "sepet"
sack:
one: "çuval"
other: "çuval"
producers:
signup:
start_free_profile: "Ücretsiz bir profille başlayın ve hazır olduğunuzda devam edin!"
@@ -2608,7 +2675,7 @@ tr:
fee_placements:
supplier: "Gelen"
distributor: "Giden"
coordinator: "koordinatör"
coordinator: "Koordinatör"
tax_category_name:
shipping_instance_rate: "Platform Hızı"
formats:
@@ -2797,7 +2864,7 @@ tr:
description: "Açıklama"
type: "tür"
default: "varsayılan"
calculator: "Hesaplayıcı"
calculator: "Hesaplama"
zone: "bölge"
display: "Görüntüle"
environment: "çevre"
@@ -2844,7 +2911,7 @@ tr:
layouts:
admin:
header:
store: mağaza
store: Ana Site
admin:
tab:
dashboard: "Gösterge Paneli"
@@ -2854,7 +2921,7 @@ tr:
products: "Ürünler"
option_types: "Seçenek Türleri"
properties: "Özellikler"
variant_overrides: "Envanter"
variant_overrides: "Stok"
reports: "Raporlar"
configuration: "Yapılandırma"
users: "Kullanıcılar"
@@ -2866,7 +2933,7 @@ tr:
groups: "Gruplar"
product_properties:
index:
inherits_properties_checkbox_hint: "Özellikler i%{supplier}'den kopyalanacak mı? (yukarıda geçersiz kılınmadıkça)"
inherits_properties_checkbox_hint: "Özellikler %{supplier}'den aktarılsın mı? (yukarıda geçersiz kılınmadıkça)"
add_product_properties: "Ürün Özelliği Ekle"
select_from_prototype: "Prototipten Seç"
properties:
@@ -2976,7 +3043,7 @@ tr:
name: "ad"
products_distributor: "Dağıtımcı"
zone: "bölge"
calculator: "Hesaplayıcı"
calculator: "Hesaplama"
display: "Görüntüle"
both: "Her ikisi de"
front_end: "ön yüz"
@@ -3050,7 +3117,7 @@ tr:
display_as: Gösterme Şekli
category: Kategori
tax_category: Vergi Kategorisi
inherits_properties?: Özellikler kopyalanır mı?
inherits_properties?: Özellikler aktarılıyor mu?
available_on: Şu Tarihte Hazır
av_on: "Şu tarihte hazır"
import_date: "İçe Aktarım Tarihi"
@@ -3128,37 +3195,37 @@ tr:
general_settings:
edit:
legal_settings: "Yasal Ayarlar"
cookies_consent_banner_toggle: "Ekran çerezleri onay başlığı"
privacy_policy_url: "Gizlilik Politikası URL&#39;si"
cookies_consent_banner_toggle: "Çerezler onay başlığını göster"
privacy_policy_url: "Gizlilik Politikası URLsi"
enterprises_require_tos: "İşletmeler Hizmet Şartlarını kabul etmelidir"
cookies_policy_matomo_section: "Çerez politikası sayfasında Matomo bölümünü görüntüle"
cookies_policy_ga_section: "Çerez politikası sayfasında Google Analytics bölümünü görüntüle"
footer_tos_url: "Hizmet Şartları URL&#39;si"
footer_tos_url: "Hizmet Şartları URLsi"
checkout:
payment:
stripe:
choose_one: Birini seç
enter_new_card: Yeni bir kart için ayrıntıları girin
choose_one: Birini seçin
enter_new_card: Yeni bir kart için bilgileri girin
used_saved_card: "Kayıtlı bir kart kullanın:"
or_enter_new_card: "Veya yeni bir kart için ayrıntıları girin:"
or_enter_new_card: "Veya yeni bir kart için bilgileri girin:"
remember_this_card: Bu kartı hatırlıyor musunuz?
date_picker:
format: '% Y-% m-%d'
js_format: 'yy-aa-'
format: '% Y-% A-%d'
js_format: 'yy-aa-gg'
orders:
error_flash_for_unavailable_items: "Sepetinizdeki bir öğe kullanılamıyor."
error_flash_for_unavailable_items: "Sepetinizdeki bir ürün mevcut değil olarak güncellendi."
edit:
login_to_view_order: "Siparişinizi görmek için lütfen giriş yapın."
bought:
item: "Bu sipariş döngüsünde zaten sipariş verildi"
item: "Bu sipariş döneminde zaten sipariş verildi"
line_item:
insufficient_stock: "Yetersiz stok, sadece %{on_hand} kaldı"
out_of_stock: "Stoklar tükendi"
unavailable_item: "Şu anda kullanılamıyor"
unavailable_item: "Şu anda mevcut değil"
shipment_states:
backorder: bekleyen sipariş
partial: kısmi
pending: Bekliyor
pending: bekliyor
ready: hazır
shipped: gönderildi
payment_states:
@@ -3197,7 +3264,7 @@ tr:
pending: bekliyor
resumed: devam edildi
returned: iade edildi
skrill: Skrill
skrill: skrill
subscription_state:
active: aktif
pending: bekliyor
@@ -3227,33 +3294,33 @@ tr:
settings: Hesap ayarları
unconfirmed_email: "Bekleyen e-posta onayı: %{unconfirmed_email}. Yeni e-posta onaylandıktan sonra e-posta adresiniz güncellenecektir."
orders:
open_orders: ık siparişler
open_orders: ık Siparişler
past_orders: Geçmiş Siparişler
transactions:
transaction_history: işlem geçmişi
transaction_history: İşlem Geçmişi
open_orders:
order: Sipariş
shop: Dükkan
changes_allowed_until: Kadar İzin Verilen Değişiklikler
items: Öğeler
shop: Tezgah
changes_allowed_until: Değişiklikler Şu Zamana Kadar İzin Verildi
items: Ürünler
total: Toplam
edit: Düzenle
cancel: İptal etmek
cancel: İptal et
closed: Kapalı
until: A kadar
until: Şu zamana kadar
past_orders:
order: Sipariş
shop: Dükkan
completed_at: Bitiş Tarihi
items: Öğeler
completed_at: Tamamlanma Tarihi
items: Ürünler
total: Toplam
paid?: Ücretli?
view: rünüm
paid?: Ödendi?
view: ster
saved_cards:
default?: Varsayılan?
delete?: Sil?
cards:
authorised_shops: Yetkili Mağazalar
authorised_shops: Yetkili Pazarlar
authorised_shops_popover: Sahip olabileceğiniz tüm üyelikler (mesela tekrarlayan siparişleriniz) için varsayılan kredi kartınızdan işlem yapmasına izin verilen işletmelerin listesidir. Kart bilgileriniz güvende tutulacak ve işletme sahipleriyle paylaşılmayacak. Ödeme alındığında her zaman bilgilendirileceksiniz.
saved_cards_popover: Bu, daha sonra kullanmak üzere kaydetmeyi seçtiğiniz sepetlerin listesidir. Bir siparişin ödemesi tamamlandığında 'varsayılan'ınız otomatik olarak seçilir ve izin verdiğiniz satıcılar tarafından ücretlendirilebilir (sağa bakın).
authorised_shops:
@@ -3267,13 +3334,13 @@ tr:
invalid_resource: "Geçersiz kaynak. Lütfen hataları düzeltin ve tekrar deneyin."
resource_not_found: "Aradığınız kaynak bulunamadı."
access: "API Erişimi"
key: "anahtar"
clear_key: "Temizle tuşu"
key: "Anahtar"
clear_key: "Anahtarı temizle"
regenerate_key: "Anahtarı Yeniden Oluştur"
no_key: "Anahtar yok"
generate_key: "API anahtarı oluştur"
key_generated: "Anahtar üretildi"
key_cleared: "Anahtar silindi"
key_generated: "Anahtar oluşturuldu"
key_cleared: "Anahtar temizlendi"
shipment:
cannot_ready: "Gönderim hazırlanamıyor."
invalid_taxonomy_id: "Geçersiz sınıflandırma kimliği."

View File

@@ -83,6 +83,8 @@ Spree::Core::Engine.routes.draw do
get '/variants/search', :to => "variants#search", :as => :search_variants
resources :properties
resources :orders do
member do
put :fire
@@ -110,8 +112,16 @@ Spree::Core::Engine.routes.draw do
end
resource :customer, :controller => "orders/customer_details"
resources :return_authorizations do
member do
put :fire
end
end
end
resources :reports
resources :users do
member do
put :generate_api_key
@@ -126,6 +136,7 @@ Spree::Core::Engine.routes.draw do
end
resource :image_settings
resources :trackers
resources :zones
resources :countries do
@@ -152,6 +163,10 @@ Spree::Core::Engine.routes.draw do
resources :tax_rates
resource :tax_settings
resources :tax_categories
resources :shipping_methods
resources :shipping_categories
resources :payment_methods
end
resources :orders do

View File

@@ -15,9 +15,9 @@ module OpenFoodNetwork
end
def stripe_configuration_incomplete?(payment_method)
return true if payment_method.preferred_enterprise_id.zero?
payment_method.stripe_account_id.blank?
payment_method.preferred_enterprise_id.nil? ||
payment_method.preferred_enterprise_id.zero? ||
payment_method.stripe_account_id.blank?
end
end
end

View File

@@ -0,0 +1,65 @@
# frozen_string_literal: true
module OpenFoodNetwork
# Pluralize or singularize words.
#
# We store some inflection data in locales and use a reverse lookup of a word
# to find the plural or singular of the same word.
#
# Here is one example with a French user:
#
# - We have a product with the variant unit name "bouquet".
# - The I18n.locale is set to :fr.
# - The French locale contains:
# bunch:
# one: "bouquet"
# other: "bouquets"
# - We create a table containing:
# "bouquet" => "bunch"
# "bouquets" => "bunch"
# - Looking up "bouquet" gives us the I18n key "bunch".
# - We find the right plural by calling I18n:
#
# I18n.t("inflections.bunch", count: 2, default: "bouquet")
#
# - This returns the correct plural "bouquets".
# - It returns the original "bouquet" if the word is missing from the locale.
module I18nInflections
# Make this a singleton to cache lookup tables.
extend self
def pluralize(word, count)
return word if count.nil?
key = i18n_key(word)
return word unless key
I18n.t(key, scope: "inflections", count: count, default: word)
end
private
def i18n_key(word)
@lookup ||= {}
# The user may switch the locale. `I18n.t` is always using the current
# locale and we need a lookup table for each of them.
unless @lookup.key?(I18n.locale)
@lookup[I18n.locale] = build_i18n_key_lookup
end
@lookup[I18n.locale][word.downcase]
end
def build_i18n_key_lookup
lookup = {}
I18n.t("inflections")&.each do |key, translations|
translations.values.each do |translation|
lookup[translation.downcase] = key
end
end
lookup
end
end
end

View File

@@ -1,3 +1,7 @@
# frozen_string_literal: true
require "open_food_network/i18n_inflections"
module OpenFoodNetwork
class OptionValueNamer
def initialize(variant = nil)
@@ -38,8 +42,7 @@ module OpenFoodNetwork
else
value = @variant.unit_value
unit_name = @variant.product.variant_unit_name
unit_name = unit_name.pluralize if value > 1
unit_name = pluralize(@variant.product.variant_unit_name, value)
end
value = value.to_i if value == value.to_i
@@ -72,5 +75,9 @@ module OpenFoodNetwork
unit
end
def pluralize(unit_name, count)
I18nInflections.pluralize(unit_name, count)
end
end
end

View File

@@ -203,6 +203,16 @@ feature '
expect(p.reload.property('fooprop')).to be_nil
end
scenario "loading new image page", js: true do
product = create(:simple_product, supplier: @supplier2)
visit spree.admin_product_images_path(product)
expect(page).to have_selector ".no-objects-found"
page.find('a#new_image_link').click
expect(page).to have_selector "#image_attachment"
end
scenario "deleting product images", js: true do
product = create(:simple_product, supplier: @supplier2)
image = File.open(File.expand_path('../../../app/assets/images/logo-white.png', __dir__))

View File

@@ -710,13 +710,22 @@ describe "AdminProductEditCtrl", ->
$httpBackend.flush()
expect($scope.displayFailure).toHaveBeenCalled()
it "shows an alert with error information when post returns 400 with an errors array", ->
spyOn(window, "alert")
$scope.products = "updated list of products"
$httpBackend.expectPOST("/admin/products/bulk_update").respond 400, { "errors": ["an error"] }
$scope.updateProducts "updated list of products"
$httpBackend.flush()
expect(window.alert).toHaveBeenCalledWith("Saving failed with the following error(s):\nan error\n")
describe "displaying the error information when post returns 400", ->
beforeEach ->
spyOn $scope, "displayFailure"
$scope.products = "updated list of products"
it "displays errors in an array", ->
$httpBackend.expectPOST("/admin/products/bulk_update").respond 400, { "errors": ["an error"] }
$scope.updateProducts "updated list of products"
$httpBackend.flush()
expect($scope.displayFailure).toHaveBeenCalledWith("Saving failed with the following error(s):\nan error\n")
it "displays errors in a hash", ->
$httpBackend.expectPOST("/admin/products/bulk_update").respond 400, { "errors": { "base": ["a basic error"] } }
$scope.updateProducts "updated list of products"
$httpBackend.flush()
expect($scope.displayFailure).toHaveBeenCalledWith("Saving failed with the following error(s):\na basic error\n")
describe "adding variants", ->

View File

@@ -0,0 +1,26 @@
describe "OptionValueNamer", ->
subject = null
beforeEach ->
module('admin.products')
inject (_OptionValueNamer_) ->
subject = new _OptionValueNamer_
describe "pluralize a variant unit name", ->
it "returns the same word if no plural is known", ->
expect(subject.pluralize("foo", 2)).toEqual "foo"
it "returns the same word if we omit the quantity", ->
expect(subject.pluralize("loaf")).toEqual "loaf"
it "finds the plural of a word", ->
expect(subject.pluralize("loaf", 2)).toEqual "loaves"
it "finds the singular of a word", ->
expect(subject.pluralize("loaves", 1)).toEqual "loaf"
it "finds the zero form of a word", ->
expect(subject.pluralize("loaf", 0)).toEqual "loaves"
it "ignores upper case", ->
expect(subject.pluralize("Loaf", 2)).toEqual "loaves"

View File

@@ -0,0 +1,20 @@
describe "ErrorsParser service", ->
errorsParser = null
beforeEach ->
module('admin.utils')
inject (ErrorsParser) ->
errorsParser = ErrorsParser
describe "toString", ->
it "returns empty string for nil errors", ->
expect(errorsParser.toString(null)).toEqual ""
it "returns the elements in the array if an array is provided", ->
expect(errorsParser.toString(["1", "2"])).toEqual "1\n2\n"
it "returns the elements in the hash if a hash is provided", ->
expect(errorsParser.toString({ "keyname": ["1", "2"] })).toEqual "1\n2\n"
it "returns all elements in all hash keys provided", ->
expect(errorsParser.toString({ "keyname1": ["1", "2"], "keyname2": ["3", "4"] })).toEqual "1\n2\n3\n4\n"

View File

@@ -0,0 +1,40 @@
# frozen_string_literal: true
require 'spec_helper'
require 'open_food_network/i18n_inflections'
describe OpenFoodNetwork::I18nInflections do
let(:subject) { described_class }
it "returns the same word if no plural is known" do
expect(subject.pluralize("foo", 2)).to eq "foo"
end
it "finds the plural of a word" do
expect(subject.pluralize("bunch", 2)).to eq "bunches"
end
it "finds the singular of a word" do
expect(subject.pluralize("bunch", 1)).to eq "bunch"
end
it "ignores upper case" do
expect(subject.pluralize("Bunch", 2)).to eq "bunches"
end
it "switches locales" do
skip "French plurals not available yet"
I18n.with_locale(:fr) do
expect(subject.pluralize("bouquet", 2)).to eq "bouquets"
end
end
it "builds the lookup table once" do
# Cache the table:
subject.pluralize("bunch", 2)
# Expect only one call for the plural:
expect(I18n).to receive(:t).once.and_call_original
subject.pluralize("bunch", 2)
end
end