mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-13 23:37:47 +00:00
Internationalisation of Javascript views
This commit is contained in:
@@ -15,5 +15,5 @@ $(document).ready ->
|
||||
|
||||
$('td.cart-adjustments a').click ->
|
||||
$('.cart_adjustment').toggle()
|
||||
$(this).html('Item Handling Fees (included in item totals)')
|
||||
$(this).html(t('item_handling_fees'))
|
||||
false
|
||||
|
||||
@@ -7,6 +7,6 @@ Darkswarm.controller "ForgotCtrl", ($scope, $http, $location, AuthenticationServ
|
||||
$http.post("/user/spree_user/password", {spree_user: $scope.spree_user}).success (data)->
|
||||
$scope.sent = true
|
||||
.error (data) ->
|
||||
$scope.errors = "Email address not found"
|
||||
$scope.errors = t 'email_not_found'
|
||||
else
|
||||
$scope.errors = "You must provide an email address"
|
||||
$scope.errors = t 'email_required'
|
||||
|
||||
@@ -2,7 +2,7 @@ Darkswarm.controller "LoginCtrl", ($scope, $http, $window, AuthenticationService
|
||||
$scope.path = "/login"
|
||||
|
||||
$scope.submit = ->
|
||||
Loading.message = "Hold on a moment, we're logging you in"
|
||||
Loading.message = t 'logging_in'
|
||||
$http.post("/user/spree_user/sign_in", {spree_user: $scope.spree_user}).success (data)->
|
||||
if Redirections.after_login
|
||||
$window.location.href = $window.location.origin + Redirections.after_login
|
||||
|
||||
@@ -3,18 +3,18 @@ Darkswarm.controller "PaymentCtrl", ($scope, $timeout) ->
|
||||
$scope.name = "payment"
|
||||
|
||||
$scope.months = [
|
||||
{key: "January", value: "1"},
|
||||
{key: "February", value: "2"},
|
||||
{key: "March", value: "3"},
|
||||
{key: "April", value: "4"},
|
||||
{key: "May", value: "5"},
|
||||
{key: "June", value: "6"},
|
||||
{key: "July", value: "7"},
|
||||
{key: "August", value: "8"},
|
||||
{key: "September", value: "9"},
|
||||
{key: "October", value: "10"},
|
||||
{key: "November", value: "11"},
|
||||
{key: "December", value: "12"},
|
||||
{key: t("january"), value: "1"},
|
||||
{key: t("february"), value: "2"},
|
||||
{key: t("march"), value: "3"},
|
||||
{key: t("april"), value: "4"},
|
||||
{key: t("may"), value: "5"},
|
||||
{key: t("june"), value: "6"},
|
||||
{key: t("july"), value: "7"},
|
||||
{key: t("august"), value: "8"},
|
||||
{key: t("september"), value: "9"},
|
||||
{key: t("october"), value: "10"},
|
||||
{key: t("november"), value: "11"},
|
||||
{key: t("december"), value: "12"},
|
||||
]
|
||||
|
||||
$scope.years = [moment().year()..(moment().year()+15)]
|
||||
|
||||
@@ -10,7 +10,7 @@ Darkswarm.directive "ofnChangeHub", (CurrentHub, Cart) ->
|
||||
|
||||
if cart_will_need_emptying()
|
||||
elm.bind 'click', (ev)->
|
||||
if confirm "Are you sure? This will change your selected hub and remove any items in your shopping cart."
|
||||
if confirm t('confirm_hub_change')
|
||||
Cart.clear()
|
||||
else
|
||||
ev.preventDefault()
|
||||
|
||||
@@ -12,7 +12,7 @@ Darkswarm.directive "ofnChangeOrderCycle", (OrderCycle, Cart, storage) ->
|
||||
|
||||
elm.bind 'change', (ev)->
|
||||
if cart_needs_emptying()
|
||||
if confirm "Are you sure? This will change your selected order cycle and remove any items in your shopping cart."
|
||||
if confirm t('confirm_oc_change')
|
||||
Cart.clear()
|
||||
scope.changeOrderCycle()
|
||||
else
|
||||
|
||||
@@ -3,7 +3,7 @@ Darkswarm.directive 'mapSearch', ($timeout)->
|
||||
restrict: 'E'
|
||||
require: '^googleMap'
|
||||
replace: true
|
||||
template: '<input id="pac-input" placeholder="Type in a location..."></input>'
|
||||
template: '<input id="pac-input" placeholder="' + t('location_placeholder') + '"></input>'
|
||||
link: (scope, elem, attrs, ctrl)->
|
||||
$timeout =>
|
||||
map = ctrl.getMap()
|
||||
|
||||
@@ -9,5 +9,5 @@ Darkswarm.directive "ofnRegistrationLimitModal", (Navigation, $modal, Loading) -
|
||||
scope.modalInstance.result.then scope.close, scope.close
|
||||
|
||||
scope.close = ->
|
||||
Loading.message = "Taking you back to the home page"
|
||||
Loading.message = t 'going_back_to_home_page'
|
||||
Navigation.go "/"
|
||||
|
||||
@@ -5,6 +5,6 @@ Darkswarm.filter "date_in_words", ->
|
||||
Darkswarm.filter "sensible_timeframe", (date_in_wordsFilter)->
|
||||
(date) ->
|
||||
if moment().add('days', 2) < moment(date)
|
||||
"Orders open"
|
||||
t 'orders_open'
|
||||
else
|
||||
"Closing #{date_in_wordsFilter(date)}"
|
||||
t('closing') + date_in_wordsFilter(date)
|
||||
|
||||
15
app/assets/javascripts/darkswarm/i18n.js.coffee
Normal file
15
app/assets/javascripts/darkswarm/i18n.js.coffee
Normal file
@@ -0,0 +1,15 @@
|
||||
# Declares the translation function t.
|
||||
# You can use t('login') in Javascript.
|
||||
window.t = (key, options = {}) ->
|
||||
if I18n == undefined
|
||||
console.log 'The I18n object is undefined. Cannot translate text.'
|
||||
return key
|
||||
text = I18n[key]
|
||||
return key if text == undefined
|
||||
text = text.split("%{#{name}}").join(value) for name, value of options
|
||||
text
|
||||
|
||||
# Provides the translation function t on all scopes.
|
||||
# You can write {{t('login')}} in all templates.
|
||||
window.Darkswarm.run ($rootScope) ->
|
||||
$rootScope.t = t
|
||||
@@ -32,10 +32,10 @@ window.FieldsetMixin = ($scope)->
|
||||
errors = for error, invalid of $scope.error(path)
|
||||
if invalid
|
||||
switch error
|
||||
when "required" then "can't be blank"
|
||||
when "number" then "must be number"
|
||||
when "email" then "must be email address"
|
||||
when "required" then t('error_required')
|
||||
when "number" then t('error_number')
|
||||
when "email" then t('error_email')
|
||||
|
||||
#server_errors = $scope.Order.errors[path.replace('order.', '')]
|
||||
#errors.push server_errors if server_errors?
|
||||
(errors.filter (error) -> error?).join ", "
|
||||
(errors.filter (error) -> error?).join ", "
|
||||
|
||||
@@ -28,6 +28,6 @@ Darkswarm.factory "AuthenticationService", (Navigation, $modal, $location, Redir
|
||||
if location.pathname in ["/", "/checkout"]
|
||||
Navigation.navigate "/"
|
||||
else
|
||||
Loading.message = "Taking you back to the home page"
|
||||
Loading.message = t 'going_back_to_home_page'
|
||||
location.hash = ""
|
||||
location.pathname = "/"
|
||||
|
||||
@@ -44,7 +44,7 @@ Darkswarm.factory 'Cart', (CurrentOrder, Variants, $timeout, $http, storage)->
|
||||
unsaved: =>
|
||||
@dirty = true
|
||||
$(window).bind "beforeunload", ->
|
||||
"Your order hasn't been saved yet. Give us a few seconds to finish!"
|
||||
t 'order_not_saved_yet'
|
||||
|
||||
line_items_present: =>
|
||||
@line_items.filter (li)->
|
||||
|
||||
@@ -6,7 +6,7 @@ Darkswarm.factory 'Checkout', (CurrentOrder, ShippingMethods, PaymentMethods, $h
|
||||
ship_address_same_as_billing: true
|
||||
|
||||
submit: ->
|
||||
Loading.message = "Submitting your order: please wait"
|
||||
Loading.message = t 'submitting_order'
|
||||
$http.put('/checkout', {order: @preprocess()}).success (data, status)=>
|
||||
Navigation.go data.path
|
||||
.error (response, status)=>
|
||||
|
||||
@@ -11,7 +11,7 @@ Darkswarm.factory "EnterpriseRegistrationService", ($http, RegistrationService,
|
||||
@enterprise[key] = value
|
||||
|
||||
create: =>
|
||||
Loading.message = "Creating " + @enterprise.name
|
||||
Loading.message = t('creating') + " " + @enterprise.name
|
||||
$http(
|
||||
method: "POST"
|
||||
url: "/api/enterprises"
|
||||
@@ -28,14 +28,13 @@ Darkswarm.factory "EnterpriseRegistrationService", ($http, RegistrationService,
|
||||
Loading.clear()
|
||||
if data?.errors?
|
||||
errors = ("#{k.capitalize()} #{v[0]}" for k, v of data.errors when v.length > 0)
|
||||
alert "Failed to create your enterprise.\n" + errors.join('\n')
|
||||
alert t('failed_to_create_enterprise') + "\n" + errors.join('\n')
|
||||
else
|
||||
alert('Failed to create your enterprise.\nPlease ensure all fields are completely filled out.')
|
||||
alert(t('failed_to_create_enterprise_unknown'))
|
||||
)
|
||||
# RegistrationService.select('about')
|
||||
|
||||
update: (step) =>
|
||||
Loading.message = "Updating " + @enterprise.name
|
||||
Loading.message = t('updating') + " " + @enterprise.name
|
||||
$http(
|
||||
method: "PUT"
|
||||
url: "/api/enterprises/#{@enterprise.id}"
|
||||
@@ -48,9 +47,8 @@ Darkswarm.factory "EnterpriseRegistrationService", ($http, RegistrationService,
|
||||
RegistrationService.select(step)
|
||||
).error((data) ->
|
||||
Loading.clear()
|
||||
alert('Failed to update your enterprise.\nPlease ensure all fields are completely filled out.')
|
||||
alert(t('failed_to_create_enterprise_unknown'))
|
||||
)
|
||||
# RegistrationService.select(step)
|
||||
|
||||
prepare: =>
|
||||
enterprise = {}
|
||||
|
||||
@@ -16,11 +16,11 @@ Darkswarm.factory "FilterSelectorsService", ->
|
||||
filterText: (active)=>
|
||||
total = @totalActive()
|
||||
if total == 0
|
||||
if active then "Hide filters" else "Filter by"
|
||||
if active then t('hide_filters') else t('filter_by')
|
||||
else if total == 1
|
||||
"1 filter applied"
|
||||
t 'one_filter_applied'
|
||||
else
|
||||
"#{@totalActive()} filters applied"
|
||||
@totalActive() + t('x_filters_applied')
|
||||
|
||||
clearAll: =>
|
||||
for selector in @selectors
|
||||
|
||||
@@ -19,5 +19,5 @@ angular.module('Darkswarm').factory "RegistrationService", (Navigation, $modal,
|
||||
@current_step
|
||||
|
||||
close: ->
|
||||
Loading.message = "Taking you back to the home page"
|
||||
Loading.message = t 'going_back_to_home_page'
|
||||
Navigation.go "/"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
%tab#forgot{"ng-controller" => "ForgotCtrl",
|
||||
heading: "Forgot Password?",
|
||||
heading: "{{t('forgot_password')}}",
|
||||
active: "active(path)",
|
||||
select: "select(path)"}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
.row
|
||||
.large-12.columns
|
||||
.alert-box.success.radius{"ng-show" => "sent"}
|
||||
An email with instructions on resetting your password has been sent!
|
||||
{{t('password_reset_sent')}}
|
||||
|
||||
%div{"ng-show" => "!sent"}
|
||||
.alert-box.alert{"ng-show" => "errors != null"}
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
.row
|
||||
.large-12.columns
|
||||
%label{for: "email"} Your email
|
||||
%label{for: "email"} {{t('signup_email')}}
|
||||
%input.title.input-text{name: "email",
|
||||
type: "email",
|
||||
id: "email",
|
||||
@@ -27,4 +27,4 @@
|
||||
%input.button.primary{name: "commit",
|
||||
tabindex: "3",
|
||||
type: "submit",
|
||||
value: "Reset password"}
|
||||
value: "{{t('reset_password')}}"}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
%tab#login-content{"ng-controller" => "LoginCtrl",
|
||||
heading: "Log in",
|
||||
heading: "{{t('label_login')}}",
|
||||
active: "active(path)",
|
||||
select: "select(path)"}
|
||||
%form{"ng-submit" => "submit()"}
|
||||
@@ -9,7 +9,7 @@
|
||||
{{ errors }}
|
||||
.row
|
||||
.large-12.columns
|
||||
%label{for: "email"} Email
|
||||
%label{for: "email"} {{t('email')}}
|
||||
%input.title.input-text{name: "email",
|
||||
type: "email",
|
||||
id: "email",
|
||||
@@ -17,7 +17,7 @@
|
||||
"ng-model" => "spree_user.email"}
|
||||
.row
|
||||
.large-12.columns
|
||||
%label{for: "password"} Password
|
||||
%label{for: "password"} {{t('password')}}
|
||||
%input.title.input-text{name: "password",
|
||||
type: "password",
|
||||
id: "password",
|
||||
@@ -31,10 +31,10 @@
|
||||
id: "remember_me",
|
||||
value: "1",
|
||||
"ng-model" => "spree_user.remember_me"}
|
||||
%label{for: "remember_me"} Remember Me
|
||||
%label{for: "remember_me"} {{t('remember_me')}}
|
||||
.row
|
||||
.large-12.columns
|
||||
%input.button.primary{name: "commit",
|
||||
tabindex: "3",
|
||||
type: "submit",
|
||||
value: "Log in"}
|
||||
value: "{{t('label_login')}}"}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%div.contact-container{bindonce: true}
|
||||
%div.modal-centered{"bo-if" => "enterprise.email || enterprise.website || enterprise.phone"}
|
||||
%p.modal-header Contact
|
||||
%p.modal-header {{t('contact')}}
|
||||
%p{"bo-if" => "enterprise.phone", "bo-text" => "enterprise.phone"}
|
||||
|
||||
%p.word-wrap{"ng-if" => "enterprise.email"}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/ TODO: Rob add logic for taxons and properties too:
|
||||
/ %div{"ng-if" => "enterprise.long_description.length > 0 || enterprise.logo"}
|
||||
%div
|
||||
%p.modal-header About
|
||||
%p.modal-header {{t('label_about')}}
|
||||
/ TODO: Rob - add in taxons and properties and property pop-overs
|
||||
|
||||
-# TODO: Add producer taxons and properties here
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
%div.modal-centered{bindonce: true, "bo-if" => "enterprise.twitter || enterprise.facebook || enterprise.linkedin || enterprise.instagram"}
|
||||
%p.modal-header Follow
|
||||
%p.modal-header {{t('follow')}}
|
||||
.follow-icons
|
||||
%span{"bo-if" => "enterprise.twitter"}
|
||||
%a{"bo-href-i" => "http://twitter.com/{{enterprise.twitter}}", target: "_blank"}
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
.cta-container.small-12.columns
|
||||
.row
|
||||
.small-4.columns
|
||||
%label{"active-table-hub-link" => "enterprise", change: "Change shop to:", shop: "Shop now at:"}
|
||||
%label{"active-table-hub-link" => "enterprise", change: "{{t('change_shop')}}", shop: "{{t('shop_at')}}"}
|
||||
.small-8.columns.right
|
||||
%label.right{"bo-if" => "enterprise.pickup || enterprise.delivery"}
|
||||
Delivery options:
|
||||
{{t('hubs_delivery_options')}}:
|
||||
%span{"bo-if" => "enterprise.pickup"}
|
||||
%i.ofn-i_038-takeaway
|
||||
Pickup
|
||||
{{t('hubs_pickup')}}
|
||||
%span{"bo-if" => "enterprise.delivery"}
|
||||
%i.ofn-i_039-delivery
|
||||
Delivery
|
||||
{{t('hubs_delivery')}}
|
||||
.row
|
||||
.columns.small-12
|
||||
%a.cta-hub{"bo-href" => "enterprise.path",
|
||||
|
||||
@@ -6,10 +6,7 @@
|
||||
.row
|
||||
.columns.small-12.fat
|
||||
%div{"bo-if" => "enterprise.name"}
|
||||
%label
|
||||
Shop for
|
||||
%span.turquoise{"bo-text" => "enterprise.name"}
|
||||
products at:
|
||||
%label{"bo-html" => "t('shop_for_products_html', {enterprise: enterprise.name})"}
|
||||
%div.show-for-medium-up{"bo-if" => "!enterprise.name"}
|
||||
|
||||
.row.cta-container
|
||||
|
||||
@@ -4,35 +4,35 @@
|
||||
.collapsed{"ng-show" => "!expanded"}
|
||||
%price-percentage{percentage: 'variant.basePricePercentage'}
|
||||
%a{"ng-click" => "expanded = !expanded"}
|
||||
Full price breakdown
|
||||
{{t('price_breakdown')}}
|
||||
%i.ofn-i_005-caret-down
|
||||
|
||||
.expanded{"ng-show" => "expanded"}
|
||||
%ul
|
||||
%li.cost
|
||||
.right {{ variant.price | localizeCurrency }}
|
||||
Item cost
|
||||
{{t('item_cost')}}
|
||||
%li.admin-fee{"bo-if" => "variant.fees.admin"}
|
||||
.right {{ variant.fees.admin | localizeCurrency }}
|
||||
Admin fee
|
||||
{{t('admin_fee')}}
|
||||
%li.sales-fee{"bo-if" => "variant.fees.sales"}
|
||||
.right {{ variant.fees.sales | localizeCurrency }}
|
||||
Sales fee
|
||||
{{t('sales_fee')}}
|
||||
%li.packing-fee{"bo-if" => "variant.fees.packing"}
|
||||
.right {{ variant.fees.packing | localizeCurrency }}
|
||||
Packing fee
|
||||
{{t('packing_fee')}}
|
||||
%li.transport-fee{"bo-if" => "variant.fees.transport"}
|
||||
.right {{ variant.fees.transport | localizeCurrency }}
|
||||
Transport fee
|
||||
{{t('transport_fee')}}
|
||||
%li.fundraising-fee{"bo-if" => "variant.fees.fundraising"}
|
||||
.right {{ variant.fees.fundraising | localizeCurrency }}
|
||||
Fundraising fee
|
||||
{{t('fundraising_fee')}}
|
||||
%li.total
|
||||
%strong
|
||||
.right = {{ variant.price_with_fees | localizeCurrency }}
|
||||
|
||||
|
||||
%a{"ng-click" => "expanded = !expanded"}
|
||||
Price graph
|
||||
{{t('price_graph')}}
|
||||
%i.ofn-i_006-caret-up
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
.progress
|
||||
.right Fees
|
||||
.right {{t('fees')}}
|
||||
.meter
|
||||
Item cost
|
||||
{{t('item_cost')}}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
.columns.small-12.large-6.product-header
|
||||
%h3{"bo-text" => "product.name"}
|
||||
%span
|
||||
%em from
|
||||
%em {{t('products_from')}}
|
||||
%span{"bo-text" => "enterprise.name"}
|
||||
|
||||
%br
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2 Nice one!
|
||||
%h2 {{t('enterprise_about_headline')}}
|
||||
%h5
|
||||
Now let's flesh out the details about
|
||||
{{t('enterprise_about_message')}}
|
||||
%span{ ng: { class: "{brick: !enterprise.is_primary_producer, turquoise: enterprise.is_primary_producer}" } }
|
||||
{{ enterprise.name }}
|
||||
|
||||
@@ -13,45 +13,45 @@
|
||||
.row
|
||||
.small-12.columns
|
||||
.alert-box.info{ "ofn-inline-alert" => true, ng: { show: "visible" } }
|
||||
%h6 Success! {{ enterprise.name }} added to the Open Food Network
|
||||
%span If you exit this wizard at any stage, you need to click the confirmation link in the email you have received. This will take you to your admin interface where you can continue setting up your profile.
|
||||
%h6 {{t('enterprise_success', {enterprise: enterprise.name})}}
|
||||
%span {{t('enterprise_registration_exit_message')}}
|
||||
%a.close{ ng: { click: "close()" } } ×
|
||||
|
||||
.small-12.large-8.columns
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_description' } Short Description:
|
||||
%input.chunky{ id: 'enterprise_description', placeholder: "A short sentence describing your enterprise", ng: { model: 'enterprise.description' } }
|
||||
%label{ for: 'enterprise_description' } {{t('enterprise_description')}}:
|
||||
%input.chunky{ id: 'enterprise_description', placeholder: "{{t('enterprise_description_placeholder')}}", ng: { model: 'enterprise.description' } }
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_long_desc' } Long Description:
|
||||
%textarea.chunky{ id: 'enterprise_long_desc', rows: 6, placeholder: "This is your opportunity to tell the story of your enterprise - what makes you different and wonderful? We'd suggest keeping your description to under 600 characters or 150 words.", ng: { model: 'enterprise.long_description' } }
|
||||
%small {{ enterprise.long_description.length }} characters / up to 600 recommended
|
||||
%label{ for: 'enterprise_long_desc' } {{t('enterprise_long_desc')}}:
|
||||
%textarea.chunky{ id: 'enterprise_long_desc', rows: 6, placeholder: "{{t('enterprise_long_desc_placeholder')}}", ng: { model: 'enterprise.long_description' } }
|
||||
%small {{t('enterprise_long_desc_length', {num: enterprise.long_description.length})}}
|
||||
.small-12.large-4.columns
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_abn' } ABN:
|
||||
%input.chunky{ id: 'enterprise_abn', placeholder: "eg. 99 123 456 789", ng: { model: 'enterprise.abn' } }
|
||||
%label{ for: 'enterprise_abn' } {{t('enterprise_abn')}}:
|
||||
%input.chunky{ id: 'enterprise_abn', placeholder: "{{t('enterprise_abn_placeholder')}}", ng: { model: 'enterprise.abn' } }
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_acn' } ACN:
|
||||
%input.chunky{ id: 'enterprise_acn', placeholder: "eg. 123 456 789", ng: { model: 'enterprise.acn' } }
|
||||
%label{ for: 'enterprise_acn' } {{t('enterprise_acn')}}:
|
||||
%input.chunky{ id: 'enterprise_acn', placeholder: "{{t('enterprise_acn_placeholder')}}", ng: { model: 'enterprise.acn' } }
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_charges_sales_tax' }= t(:charges_sales_tax)
|
||||
%input{ id: 'enterprise_charges_sales_tax_true', type: 'radio', name: 'charges_sales_tax', value: 'true', required: true, ng: { model: 'enterprise.charges_sales_tax' } }
|
||||
%label{ for: 'enterprise_charges_sales_tax_true' } Yes
|
||||
%label{ for: 'enterprise_charges_sales_tax_true' } {{t('yes')}}
|
||||
%input{ id: 'enterprise_charges_sales_tax_false', type: 'radio', name: 'charges_sales_tax', value: 'false', required: true, ng: { model: 'enterprise.charges_sales_tax' } }
|
||||
%label{ for: 'enterprise_charges_sales_tax_false' } No
|
||||
%label{ for: 'enterprise_charges_sales_tax_false' } {{t('no')}}
|
||||
%span.error.small-12.columns{ ng: { show: "about.charges_sales_tax.$error.required && submitted" } }
|
||||
You need to make a selection.
|
||||
{{t('enterprise_tax_required')}}
|
||||
|
||||
.row.buttons.pad-top
|
||||
.small-12.columns
|
||||
%input.button.primary.right{ type: "submit", value: "Continue" }
|
||||
%input.button.primary.right{ type: "submit", value: "{{t('continue')}}" }
|
||||
|
||||
|
||||
@@ -3,28 +3,28 @@
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2 Greetings!
|
||||
%h2 {{t('registration_greeting')}}
|
||||
%h5
|
||||
Who is responsible for managing {{ enterprise.name }}?
|
||||
{{t('who_is_managing_enterprise', {enterprise: enterprise.name})}}
|
||||
|
||||
%form{ name: 'contact', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "selectIfValid('type',contact)" } }
|
||||
.row.content
|
||||
.small-12.medium-12.large-7.columns
|
||||
.row
|
||||
.small-12.columns.field
|
||||
%label{ for: 'enterprise_contact' } Primary Contact:
|
||||
%label{ for: 'enterprise_contact' } {{t('enterprise_contact')}}:
|
||||
%input.chunky.small-12.columns{ id: 'enterprise_contact', name: 'contact', required: true, placeholder: "Contact Name", ng: { model: 'enterprise.contact' } }
|
||||
%span.error.small-12.columns{ ng: { show: "contact.contact.$error.required && submitted" } }
|
||||
You need to enter a primary contact.
|
||||
{{t('enterprise_contact_required')}}
|
||||
.row
|
||||
.small-12.columns.field
|
||||
%label{ for: 'enterprise_email' } Email address:
|
||||
%label{ for: 'enterprise_email' } {{t('enterprise_email')}}:
|
||||
%input.chunky.small-12.columns{ id: 'enterprise_email', name: 'email', type: 'email', required: true, placeholder: "eg. charlie@thefarm.com", ng: { model: 'enterprise.email' } }
|
||||
%span.error.small-12.columns{ ng: { show: "(contact.email.$error.email || contact.email.$error.required) && submitted" } }
|
||||
You need to enter valid email address.
|
||||
{{t('enterprise_email_required')}}
|
||||
.row
|
||||
.small-12.columns.field
|
||||
%label{ for: 'enterprise_phone' } Phone number:
|
||||
%label{ for: 'enterprise_phone' } {{t('enterprise_phone')}}:
|
||||
%input.chunky.small-12.columns{ id: 'enterprise_phone', name: 'phone', placeholder: "eg. (03) 1234 5678", ng: { model: 'enterprise.phone' } }
|
||||
.small-12.medium-12.large-5.hide-for-small-only
|
||||
/ %h6
|
||||
@@ -43,5 +43,5 @@
|
||||
|
||||
.row.buttons
|
||||
.small-12.columns
|
||||
%input.button.secondary{ type: "button", value: "Back", ng: { click: "select('details')" } }
|
||||
%input.button.primary.right{ type: "submit", value: "Continue" }
|
||||
%input.button.secondary{ type: "button", value: "{{t('back')}}", ng: { click: "select('details')" } }
|
||||
%input.button.primary.right{ type: "submit", value: "{{t('continue')}}" }
|
||||
|
||||
@@ -3,75 +3,62 @@
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2 Let's Get Started
|
||||
%h5{ bo: { if: "enterprise.type != 'own'" } } Woot! First we need to know a little bit about your enterprise:
|
||||
%h5{ bo: { if: "enterprise.type == 'own'" } } Woot! First we need to know a little bit about your farm:
|
||||
%h2 {{t('registration_detail_headline')}}
|
||||
%h5{ bo: { if: "enterprise.type != 'own'" } } {{t('registration_detail_enterprise')}}
|
||||
%h5{ bo: { if: "enterprise.type == 'own'" } } {{t('registration_detail_producer')}}
|
||||
|
||||
%form{ name: 'details', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "selectIfValid('contact',details)" } }
|
||||
|
||||
.row
|
||||
.small-12.medium-9.large-12.columns.end
|
||||
.field
|
||||
%label{ for: 'enterprise_name', bo: { if: "enterprise.type != 'own'" } } Enterprise Name:
|
||||
%label{ for: 'enterprise_name', bo: { if: "enterprise.type == 'own'" } } Farm Name:
|
||||
%input.chunky{ id: 'enterprise_name', name: 'name', placeholder: "e.g. Charlie's Awesome Farm", required: true, ng: { model: 'enterprise.name' } }
|
||||
%label{ for: 'enterprise_name', bo: { if: "enterprise.type != 'own'" } } {{t('registration_detail_name_enterprise')}}
|
||||
%label{ for: 'enterprise_name', bo: { if: "enterprise.type == 'own'" } } {{t('registration_detail_name_producer')}}
|
||||
%input.chunky{ id: 'enterprise_name', name: 'name', placeholder: "{{t('registration_detail_name_placeholder')}}", required: true, ng: { model: 'enterprise.name' } }
|
||||
%span.error{ ng: { show: "details.name.$error.required && submitted" } }
|
||||
Please choose a unique name for your enterprise
|
||||
{{t('registration_detail_name_error')}}
|
||||
|
||||
.row
|
||||
.small-12.medium-9.large-6.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_address' } Address line 1:
|
||||
%input.chunky{ id: 'enterprise_address', name: 'address1', required: true, placeholder: "e.g. 123 Cranberry Drive", required: true, ng: { model: 'enterprise.address.address1' } }
|
||||
%label{ for: 'enterprise_address' } {{t('registration_detail_address1')}}
|
||||
%input.chunky{ id: 'enterprise_address', name: 'address1', required: true, placeholder: "{{t('registration_detail_address1_placeholder')}}", required: true, ng: { model: 'enterprise.address.address1' } }
|
||||
%span.error{ ng: { show: "details.address1.$error.required && submitted" } }
|
||||
Please enter an address
|
||||
{{t('registration_detail_address1_error')}}
|
||||
.field
|
||||
%label{ for: 'enterprise_address2' } Address line 2:
|
||||
%label{ for: 'enterprise_address2' } {{t('registration_detail_address2')}}
|
||||
%input.chunky{ id: 'enterprise_address2', name: 'address2', required: false, placeholder: "", required: false, ng: { model: 'enterprise.address.address2' } }
|
||||
|
||||
.small-12.medium-9.large-6.columns.end
|
||||
.row
|
||||
.small-12.medium-8.large-8.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_city' } Suburb:
|
||||
%input.chunky{ id: 'enterprise_city', name: 'city', required: true, placeholder: "e.g. Northcote", ng: { model: 'enterprise.address.city' } }
|
||||
%label{ for: 'enterprise_city' } {{t('registration_detail_suburb')}}
|
||||
%input.chunky{ id: 'enterprise_city', name: 'city', required: true, placeholder: "{{t('registration_detail_suburb_placeholder')}}", ng: { model: 'enterprise.address.city' } }
|
||||
%span.error{ ng: { show: "details.city.$error.required && submitted" } }
|
||||
Please enter a suburb
|
||||
{{t('registration_detail_suburb_error')}}
|
||||
.small-12.medium-4.large-4.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_zipcode' } Postcode:
|
||||
%input.chunky{ id: 'enterprise_zipcode', name: 'zipcode', required: true, placeholder: "e.g. 3070", ng: { model: 'enterprise.address.zipcode' } }
|
||||
%label{ for: 'enterprise_zipcode' } {{t('registration_detail_postcode')}}
|
||||
%input.chunky{ id: 'enterprise_zipcode', name: 'zipcode', required: true, placeholder: "{{t('registration_detail_postcode_placeholder')}}", ng: { model: 'enterprise.address.zipcode' } }
|
||||
%span.error{ ng: { show: "details.zipcode.$error.required && submitted" } }
|
||||
Postcode required
|
||||
{{t('registration_detail_postcode_error')}}
|
||||
.row
|
||||
.small-12.medium-4.large-4.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_state' } State:
|
||||
%label{ for: 'enterprise_state' } {{t('registration_detail_state')}}
|
||||
%select.chunky{ id: 'enterprise_state', name: 'state', ng: { model: 'enterprise.address.state_id', options: 's.id as s.abbr for s in enterprise.country.states', show: 'countryHasStates()', required: 'countryHasStates()' } }
|
||||
%span.error{ ng: { show: "details.state.$error.required && submitted" } }
|
||||
State required
|
||||
{{t('registration_detail_state_error')}}
|
||||
.small-12.medium-8.large-8.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_country' } Country:
|
||||
%label{ for: 'enterprise_country' } {{t('registration_detail_country')}}
|
||||
%select.chunky{ id: 'enterprise_country', name: 'country', required: true, ng: { model: 'enterprise.country', options: 'c as c.name for c in countries' } }
|
||||
%span.error{ ng: { show: "details.country.$error.required && submitted" } }
|
||||
Please select a country
|
||||
/ .small-12.medium-12.large-5.hide-for-small-only
|
||||
/ %h6
|
||||
/ Location display
|
||||
/ %i.ofn-i_013-help.has-tip{ 'data-tooltip' => true, title: "Choose how you want to display your enterprise's address on the Open Food Network. By default, full location is shown everywhere including street name and number."}
|
||||
/ .row
|
||||
/ .small-12.columns
|
||||
/ %label.indent-checkbox
|
||||
/ %input{ type: 'checkbox', id: 'enterpise_suburb_only', ng: { model: 'enterprise.suburb_only' } }
|
||||
/ Hide my street name and street number from the public (ie. only show the suburb)
|
||||
/ .small-12.columns
|
||||
/ %label.indent-checkbox
|
||||
/ %input{ type: 'checkbox', id: 'enterprise_on_map', ng: { model: 'enterprise.on_map' } }
|
||||
/ Blur my location on the map (show an approximate, not exact pin)
|
||||
{{t('registration_detail_country_error')}}
|
||||
|
||||
|
||||
.row.buttons
|
||||
.small-12.columns
|
||||
%hr
|
||||
%input.button.primary.right{ type: "submit", value: "Continue" }
|
||||
%input.button.primary.right{ type: "submit", value: "{{t('continue')}}" }
|
||||
|
||||
@@ -2,23 +2,16 @@
|
||||
.row
|
||||
.small-12.columns.pad-top
|
||||
%header
|
||||
%h2 Finished!
|
||||
%h2 {{t('registration_finished_headline')}}
|
||||
.panel.callout
|
||||
%p
|
||||
Thanks for filling out the details for
|
||||
%span{ ng: { class: "{brick: !enterprise.is_primary_producer, turquoise: enterprise.is_primary_producer}" } }
|
||||
{{ enterprise.name }}
|
||||
%p You can change or update your enterprise at any stage by logging into Open Food Network and going to Admin.
|
||||
{{t('registration_finished_thanks', {enterprise: enterprise.name})}}
|
||||
%p {{t('registration_finished_login')}}
|
||||
.row
|
||||
.small-12.columns.text-center
|
||||
%h4
|
||||
Activate
|
||||
%span{ ng: { class: "{brick: !enterprise.is_primary_producer, turquoise: enterprise.is_primary_producer}" } }
|
||||
{{ enterprise.name }}
|
||||
{{t('registration_finished_activate', {enterprise: enterprise.name})}}
|
||||
|
||||
%p
|
||||
We've sent a confirmation email to
|
||||
%strong {{ enterprise.email }} if it hasn't been activated before.
|
||||
%br Please follow the instructions there to make your enterprise visible on the Open Food Network.
|
||||
%p{ "ng-bind-html" => "t('registration_finished_activate_instruction_html', {email: enterprise.email})"}
|
||||
|
||||
%a.button.primary{ type: "button", href: "/" } Open Food Network home >
|
||||
%a.button.primary{ type: "button", href: "/" } {{t('registration_finished_action')}} >
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2 Thanks!
|
||||
%h5 Let's upload some pretty pictures so your profile looks great! :)
|
||||
%h2 {{t('registration_images_headline')}}
|
||||
%h5 {{t('registration_images_description')}}
|
||||
|
||||
%form{ name: 'images', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "select('social')" } }
|
||||
.row{ ng: { repeat: 'image_step in imageSteps', show: "imageStep == image_step" } }
|
||||
@@ -18,5 +18,5 @@
|
||||
|
||||
.row.buttons.pad-top{ ng: { if: "imageStep == 'promo'" } }
|
||||
.small-12.columns
|
||||
%input.button.secondary{ type: "button", value: "Back", ng: { click: "imageSelect('logo')" } }
|
||||
%input.button.primary.right{ type: "submit", value: "Continue" }
|
||||
%input.button.secondary{ type: "button", value: "{{t('back')}}", ng: { click: "imageSelect('logo')" } }
|
||||
%input.button.primary.right{ type: "submit", value: "{{t('continue')}}" }
|
||||
|
||||
@@ -4,42 +4,42 @@
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%h4
|
||||
Step 1. Select Logo Image
|
||||
{{t('select_logo')}}
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%span.small
|
||||
Tip: Square images will work best, preferably at least 300×300px
|
||||
{{t('logo_tip')}}
|
||||
.row.pad-top
|
||||
.small-12.columns
|
||||
.image-select.small-12.columns
|
||||
%label.small-12.columns.button{ for: 'image-select' } Choose a logo image
|
||||
%label.small-12.columns.button{ for: 'image-select' } {{t('logo_label')}}
|
||||
%input#image-select{ type: 'file', hidden: true, 'nv-file-select' => true, uploader: "imageUploader", options: '{ alias: imageStep }' }
|
||||
.row.show-for-large-up
|
||||
.large-12.columns
|
||||
%span#or.large-12.columns
|
||||
OR
|
||||
{{t('action_or')}}
|
||||
.row.show-for-large-up
|
||||
.large-12.columns
|
||||
#image-over{ 'nv-file-over' => true, uploader: "imageUploader" }
|
||||
Drag and drop your logo here
|
||||
{{t('logo_drag')}}
|
||||
.small-12.medium-12.large-6.columns
|
||||
.row
|
||||
.small-12.columns.center
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%h4
|
||||
Step 2. Review Your Logo
|
||||
{{t('review_logo')}}
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%span.small
|
||||
Tip: for best results, your logo should fill the available space
|
||||
{{t('review_logo_tip')}}
|
||||
.row.pad-top
|
||||
.small-12.columns.center
|
||||
#image-placeholder.logo
|
||||
%img{ ng: { show: "imageSrc() && !imageUploader.isUploading", src: '{{ imageSrc() }}' } }
|
||||
.message{ ng: { hide: "imageSrc() || imageUploader.isUploading" } }
|
||||
Your logo will appear here for review once uploaded
|
||||
{{t('logo_placeholder')}}
|
||||
.loading{ ng: { hide: "!imageUploader.isUploading" } }
|
||||
%img.spinner{ src: "/assets/spinning-circles.svg" }
|
||||
%br/
|
||||
Uploading...
|
||||
{{t('uploading')}}
|
||||
|
||||
@@ -2,42 +2,42 @@
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%h4
|
||||
Step 3. Select Promo Image
|
||||
{{t('select_promo_image')}}
|
||||
.row
|
||||
.small-12.medium-12.large-5.columns.center
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%span.small
|
||||
Tip: Shown as a banner, preferred size is 1200×260px
|
||||
{{t('promo_image_tip')}}
|
||||
.row.pad-top
|
||||
.small-12.columns
|
||||
.image-select.small-12.columns
|
||||
%label.small-12.columns.button{ for: 'image-select' } Choose a promo image
|
||||
%label.small-12.columns.button{ for: 'image-select' } {{t('promo_image_label')}}
|
||||
%input#image-select{ type: 'file', hidden: true, 'nv-file-select' => true, uploader: "imageUploader", options: '{ alias: imageStep }' }
|
||||
.large-2.columns
|
||||
%span#or.horizontal.large-12.columns
|
||||
OR
|
||||
{{t('action_or')}}
|
||||
.large-5.columns
|
||||
#image-over{ 'nv-file-over' => true, uploader: "imageUploader" }
|
||||
Drag and drop your promo here
|
||||
{{t('promo_image_drag')}}
|
||||
.small-12.medium-12.large-12.columns.pad-top
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%h4
|
||||
Step 4. Review Your Promo Banner
|
||||
{{t('review_promo_image')}}
|
||||
.row
|
||||
.small-12.columns.center
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%span.small
|
||||
Tip: for best results, your promo image should fill the available space
|
||||
{{t('review_promo_image_tip')}}
|
||||
.row.pad-top
|
||||
.small-12.columns.center
|
||||
#image-placeholder.promo
|
||||
%img{ ng: { show: "imageSrc() && !imageUploader.isUploading", src: '{{ imageSrc() }}' } }
|
||||
.message{ ng: { hide: "imageSrc() || imageUploader.isUploading" } }
|
||||
Your logo will appear here for review once uploaded
|
||||
{{t('promo_image_placeholder')}}
|
||||
.loading{ ng: { hide: "!imageUploader.isUploading" } }
|
||||
%img.spinner{ src: "/assets/spinning-circles.svg" }
|
||||
%br/
|
||||
Uploading...
|
||||
{{t('uploading')}}
|
||||
|
||||
@@ -1,46 +1,41 @@
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2 Hi there!
|
||||
%h2 {{t('registration_greeting')}}
|
||||
%h4
|
||||
%small
|
||||
%i.ofn-i_040-hub
|
||||
You can now create a profile for your Producer or Hub
|
||||
{{t('registration_intro')}}
|
||||
.hide-for-large-up
|
||||
%hr
|
||||
%input.button.small.primary{ type: "button", value: "Let's get started!", ng: { click: "select('details')" } }
|
||||
%input.button.small.primary{ type: "button", value: "{{t('registration_action')}}", ng: { click: "select('details')" } }
|
||||
%hr
|
||||
|
||||
.row{ 'data-equalizer' => true }
|
||||
.small-12.medium-12.large-6.columns.pad-top{ 'data-equalizer-watch' => true }
|
||||
%h5 You'll need:
|
||||
%h5 {{t('registration_checklist')}}:
|
||||
%ul.check-list
|
||||
%li
|
||||
5-10 minutes
|
||||
{{t('registration_time')}}
|
||||
%li
|
||||
Enterprise address
|
||||
{{t('registration_enterprise_address')}}
|
||||
%li
|
||||
Primary contact details
|
||||
{{t('registration_contact_details')}}
|
||||
%li
|
||||
Your logo image
|
||||
{{t('registration_logo')}}
|
||||
%li
|
||||
Landscape image for your profile
|
||||
{{t('registration_promo_image')}}
|
||||
%li
|
||||
'About Us' text
|
||||
{{t('registration_about_us')}}
|
||||
|
||||
.small-9.medium-8.large-5.columns.pad-top.end{ 'data-equalizer-watch' => true}
|
||||
%h5
|
||||
What do I get?
|
||||
%p
|
||||
Your profile helps people
|
||||
%strong find
|
||||
and
|
||||
%strong contact
|
||||
you on the Open Food Network.
|
||||
%p Use this space to tell the story of your enterprise, to help drive connections to your social and online presence.
|
||||
%p It's also the first step towards trading on the Open Food Network, or opening an online store.
|
||||
{{t('registration_outcome_headline')}}
|
||||
%p{ "ng-bind-html" => "t('registration_outcome1_html')" }
|
||||
%p {{t('registration_outcome2')}}
|
||||
%p {{t('registration_outcome3')}}
|
||||
|
||||
.row.show-for-large-up
|
||||
.small-12.columns
|
||||
%hr
|
||||
%input.button.primary.right{ type: "button", value: "Let's get started!", ng: { click: "select('details')" } }
|
||||
%input.button.primary.right{ type: "button", value: "{{t('registration_action')}}", ng: { click: "select('details')" } }
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2 Oh no!
|
||||
%h4 You have reached the limit!
|
||||
%h2 {{t('limit_reached_headline')}}
|
||||
%h4 {{t('limit_reached_message')}}
|
||||
.row
|
||||
.small-12.medium-3.large-2.columns.text-right.hide-for-small-only
|
||||
%img{:src => "/assets/potatoes.png"}
|
||||
.small-12.medium-9.large-10.columns
|
||||
%p
|
||||
You have reached the limit for the number of enterprises you are allowed to own on the
|
||||
{{t('limit_reached_text')}}
|
||||
%strong Open Food Network.
|
||||
.row
|
||||
.small-12.columns
|
||||
%hr
|
||||
%input.button.primary{ type: "button", value: "Return to the homepage", ng: { click: "close()" } }
|
||||
%input.button.primary{ type: "button", value: "{{t('limit_reached_action')}}", ng: { click: "close()" } }
|
||||
|
||||
@@ -4,12 +4,9 @@
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2 Final step!
|
||||
%h2 {{t('enterprise_final_step')}}
|
||||
%h5
|
||||
How can people find
|
||||
%span{ ng: { class: "{brick: !enterprise.is_primary_producer, turquoise: enterprise.is_primary_producer}" } }
|
||||
{{ enterprise.name }}
|
||||
online?
|
||||
{{t('enterprise_social_text', {enterprise: enterprise.name})}}
|
||||
|
||||
%form{ name: 'social', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "update('finished',social)" } }
|
||||
.row.content
|
||||
@@ -17,33 +14,33 @@
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_website' } Website:
|
||||
%input.chunky{ id: 'enterprise_website', placeholder: "eg. openfoodnetwork.org.au", ng: { model: 'enterprise.website' } }
|
||||
%label{ for: 'enterprise_website' } {{t('website')}}:
|
||||
%input.chunky{ id: 'enterprise_website', placeholder: "{{t('website_placeholder')}}", ng: { model: 'enterprise.website' } }
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_facebook' } Facebook:
|
||||
%input.chunky{ id: 'enterprise_facebook', placeholder: "eg. www.facebook.com/PageNameHere", ng: { model: 'enterprise.facebook' } }
|
||||
%label{ for: 'enterprise_facebook' } {{t('facebook')}}:
|
||||
%input.chunky{ id: 'enterprise_facebook', placeholder: "{{t('facebook_placeholder')}}", ng: { model: 'enterprise.facebook' } }
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_linkedin' } LinkedIn:
|
||||
%input.chunky{ id: 'enterprise_linkedin', placeholder: "eg. www.linkedin.com/YourNameHere", ng: { model: 'enterprise.linkedin' } }
|
||||
%label{ for: 'enterprise_linkedin' } {{t('linkedin')}}:
|
||||
%input.chunky{ id: 'enterprise_linkedin', placeholder: "{{t('linkedin_placeholder')}}", ng: { model: 'enterprise.linkedin' } }
|
||||
.small-12.large-5.columns
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_twitter' } Twitter:
|
||||
%input.chunky{ id: 'enterprise_twitter', placeholder: "eg. @twitter_handle", ng: { model: 'enterprise.twitter' } }
|
||||
%label{ for: 'enterprise_twitter' } {{t('twitter')}}:
|
||||
%input.chunky{ id: 'enterprise_twitter', placeholder: "{{t('twitter_placeholder')}}", ng: { model: 'enterprise.twitter' } }
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_instagram' } Instagram:
|
||||
%input.chunky{ id: 'enterprise_instagram', placeholder: "eg. @instagram_handle", ng: { model: 'enterprise.instagram' } }
|
||||
%label{ for: 'enterprise_instagram' } {{t('instagram')}}:
|
||||
%input.chunky{ id: 'enterprise_instagram', placeholder: "{{t('instagram_placeholder')}}", ng: { model: 'enterprise.instagram' } }
|
||||
|
||||
.row.buttons
|
||||
.small-12.columns
|
||||
%input.button.secondary{ type: "button", value: "Back", ng: { click: "select('images')" } }
|
||||
%input.button.primary.right{ type: "submit", value: "Continue" }
|
||||
%input.button.secondary{ type: "button", value: "{{t('back')}}", ng: { click: "select('images')" } }
|
||||
%input.button.primary.right{ type: "submit", value: "{{t('continue')}}" }
|
||||
|
||||
|
||||
|
||||
@@ -6,11 +6,9 @@
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2
|
||||
Last step to add
|
||||
%span{ ng: { class: "{brick: !enterprise.is_primary_producer, turquoise: enterprise.is_primary_producer}" } }
|
||||
{{ enterprise.name }}!
|
||||
{{t('registration_type_headline', {enterprise: enterprise.name})}}
|
||||
%h4
|
||||
Are you a producer?
|
||||
{{t('registration_type_question')}}
|
||||
|
||||
%form{ name: 'type', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "create(type)" } }
|
||||
.row#enterprise-types{ 'data-equalizer' => true, bo: { if: "enterprise.type != 'own'" } }
|
||||
@@ -19,32 +17,32 @@
|
||||
.small-12.medium-6.large-6.columns{ 'data-equalizer-watch' => true }
|
||||
%a.btnpanel#producer-panel{ href: "#", ng: { click: "enterprise.is_primary_producer = true", class: "{selected: enterprise.is_primary_producer}" } }
|
||||
%i.ofn-i_059-producer
|
||||
%h4 Yes, I'm a producer
|
||||
%h4 {{t('registration_type_producer')}}
|
||||
|
||||
.small-12.medium-6.large-6.columns{ 'data-equalizer-watch' => true }
|
||||
%a.btnpanel#hub-panel{ href: "#", ng: { click: "enterprise.is_primary_producer = false", class: "{selected: enterprise.is_primary_producer == false}" } }
|
||||
%i.ofn-i_063-hub
|
||||
%h4 No, I'm not a producer
|
||||
%h4 {{t('registration_type_no_producer')}}
|
||||
|
||||
.row
|
||||
.small-12.columns
|
||||
%input.chunky{ id: 'enterprise_is_primary_producer', name: 'is_primary_producer', hidden: true, required: true, ng: { model: 'enterprise.is_primary_producer' } }
|
||||
%span.error{ ng: { show: "type.is_primary_producer.$error.required && submitted" } }
|
||||
Please choose one. Are you are producer?
|
||||
{{t('registration_type_error')}}
|
||||
.row
|
||||
.small-12.columns
|
||||
.panel.callout
|
||||
.left
|
||||
%i.ofn-i_013-help
|
||||
|
||||
%p Producers make yummy things to eat &/or drink. You're a producer if you grow it, raise it, brew it, bake it, ferment it, milk it or mould it.
|
||||
%p {{t('registration_type_producer_help')}}
|
||||
.panel.callout
|
||||
.left
|
||||
%i.ofn-i_013-help
|
||||
|
||||
%p If you’re not a producer, you’re probably someone who sells and distributes food. You might be a hub, coop, buying group, retailer, wholesaler or other.
|
||||
%p {{t('registration_type_no_producer_help')}}
|
||||
|
||||
.row.buttons
|
||||
.small-12.columns
|
||||
%input.button.secondary{ type: "button", value: "Back", ng: { click: "select('contact')" } }
|
||||
%input.button.primary.right{ type: "submit", value: "Create Profile" }
|
||||
%input.button.secondary{ type: "button", value: "{{t('back')}}", ng: { click: "select('contact')" } }
|
||||
%input.button.primary.right{ type: "submit", value: "{{t('create_profile')}}" }
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
.container
|
||||
.row.modal-centered
|
||||
%h2 Welcome to the Open Food Network!
|
||||
%h5 Start By Signing Up (or logging in):
|
||||
%h2 {{t('welcome_to_ofn')}}
|
||||
%h5 {{t('signup_or_login')}}:
|
||||
%div{"ng-controller" => "AuthenticationCtrl"}
|
||||
%tabset
|
||||
%ng-include{src: "'signup.html'"}
|
||||
@@ -9,9 +9,9 @@
|
||||
%ng-include{src: "'forgot.html'"}
|
||||
%div{ ng: { show: "active('/signup')"} }
|
||||
%hr
|
||||
Already have an account?
|
||||
{{t('have_an_account')}}
|
||||
%a{ href: "", ng: { click: "select('/login')"}}
|
||||
Log in now.
|
||||
{{t('action_login')}}
|
||||
|
||||
%a.close-reveal-modal{"ng-click" => "$close()"}
|
||||
%i.ofn-i_009-close
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
.bulk-buy.inline{"bo-if" => "variant.product.group_buy"}
|
||||
%i.ofn-i_056-bulk><
|
||||
%em><
|
||||
\ Bulk
|
||||
\ {{t('bulk')}}
|
||||
|
||||
-# WITHOUT GROUP BUY
|
||||
.small-5.medium-3.large-3.columns.text-right{"bo-if" => "!variant.product.group_buy"}
|
||||
@@ -30,7 +30,7 @@
|
||||
integer: true,
|
||||
min: 0,
|
||||
"ng-model" => "variant.line_item.quantity",
|
||||
placeholder: "min",
|
||||
placeholder: "{{t('shop_variant_quantity_min')}}",
|
||||
"ofn-disable-scroll" => true,
|
||||
max: "{{variant.on_demand && 9999 || variant.count_on_hand }}",
|
||||
name: "variants[{{variant.id}}]", id: "variants_{{variant.id}}"}
|
||||
@@ -40,7 +40,7 @@
|
||||
integer: true,
|
||||
min: 0,
|
||||
"ng-model" => "variant.line_item.max_quantity",
|
||||
placeholder: "max",
|
||||
placeholder: "{{t('shop_variant_quantity_max')}}",
|
||||
"ofn-disable-scroll" => true,
|
||||
max: "{{variant.on_demand && 9999 || variant.count_on_hand }}",
|
||||
name: "variant_attributes[{{variant.id}}][max_quantity]"}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
%tab#sign-up-content{"ng-controller" => "SignupCtrl",
|
||||
heading: "Sign up",
|
||||
heading: "{{t('label_signup')}}",
|
||||
active: "active(path)",
|
||||
select: "select(path)"}
|
||||
%form{"ng-submit" => "submit()"}
|
||||
.row
|
||||
.large-12.columns
|
||||
%label{for: "email"} Your email
|
||||
%label{for: "email"} {{t('signup_email')}}
|
||||
%input.title.input-text{name: "email",
|
||||
type: "email",
|
||||
id: "email",
|
||||
@@ -15,7 +15,7 @@
|
||||
{{ errors.email.join(' ') }}
|
||||
.row
|
||||
.large-12.columns
|
||||
%label{for: "password"} Choose a password
|
||||
%label{for: "password"} {{t('choose_password')}}
|
||||
%input.title.input-text{name: "password",
|
||||
type: "password",
|
||||
id: "password",
|
||||
@@ -26,7 +26,7 @@
|
||||
{{ errors.password.join(' ') }}
|
||||
.row
|
||||
.large-12.columns
|
||||
%label{for: "password_confirmation"} Confirm password
|
||||
%label{for: "password_confirmation"} {{t('confirm_password')}}
|
||||
%input.title.input-text{name: "password_confirmation",
|
||||
type: "password",
|
||||
id: "password_confirmation",
|
||||
@@ -38,4 +38,4 @@
|
||||
%input.button.primary{name: "commit",
|
||||
tabindex: "3",
|
||||
type: "submit",
|
||||
value: "Sign up now"}
|
||||
value: "{{t('action_signup')}}"}
|
||||
|
||||
5
app/views/layouts/_i18n_translations.html.haml
Normal file
5
app/views/layouts/_i18n_translations.html.haml
Normal file
@@ -0,0 +1,5 @@
|
||||
- # TODO: load json from separate file that can be cached
|
||||
%script
|
||||
window.I18n =
|
||||
= I18n.backend.send(:translations)[I18n.locale].with_indifferent_access.to_json.html_safe
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
%link{href: "https://fonts.googleapis.com/css?family=Roboto:400,300italic,400italic,300,700,700italic|Oswald:300,400,700", rel: "stylesheet", type: "text/css"}
|
||||
|
||||
= yield :scripts
|
||||
= render "layouts/i18n_translations"
|
||||
%script{src: "//maps.googleapis.com/maps/api/js?libraries=places,geometry&sensor=false"}
|
||||
= split_stylesheet_link_tag "darkswarm/all"
|
||||
= javascript_include_tag "darkswarm/all"
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
%link{href: "https://fonts.googleapis.com/css?family=Roboto:400,300italic,400italic,300,700,700italic|Oswald:300,400,700", rel: "stylesheet", type: "text/css"}
|
||||
|
||||
= yield :scripts
|
||||
= render "layouts/i18n_translations"
|
||||
%script{src: "//maps.googleapis.com/maps/api/js?libraries=places&sensor=false"}
|
||||
= stylesheet_link_tag "darkswarm/all"
|
||||
= javascript_include_tag "darkswarm/all"
|
||||
|
||||
@@ -453,3 +453,181 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
products_max_quantity: Max quantity
|
||||
products_distributor: Distributor
|
||||
products_distributor_info: When you select a distributor for your order, their address and pickup times will be displayed here.
|
||||
|
||||
# keys used in javascript
|
||||
password: Password
|
||||
remember_me: Remember Me
|
||||
are_you_sure: "Are you sure?"
|
||||
orders_open: Orders open
|
||||
closing: "Closing "
|
||||
going_back_to_home_page: "Taking you back to the home page"
|
||||
creating: Creating
|
||||
updating: Updating
|
||||
failed_to_create_enterprise: "Failed to create your enterprise."
|
||||
failed_to_create_enterprise_unknown: "Failed to create your enterprise.\nPlease ensure all fields are completely filled out."
|
||||
order_not_saved_yet: "Your order hasn't been saved yet. Give us a few seconds to finish!"
|
||||
filter_by: "Filter by"
|
||||
hide_filters: "Hide filters"
|
||||
one_filter_applied: "1 filter applied"
|
||||
x_filters_applied: " filters applied"
|
||||
submitting_order: "Submitting your order: please wait"
|
||||
confirm_hub_change: "Are you sure? This will change your selected hub and remove any items in your shopping cart."
|
||||
confirm_oc_change: "Are you sure? This will change your selected order cycle and remove any items in your shopping cart."
|
||||
location_placeholder: "Type in a location..."
|
||||
error_required: "can't be blank"
|
||||
error_number: "must be number"
|
||||
error_email: "must be email address"
|
||||
item_handling_fees: "Item Handling Fees (included in item totals)"
|
||||
january: "January"
|
||||
february: "February"
|
||||
march: "March"
|
||||
april: "April"
|
||||
may: "May"
|
||||
june: "June"
|
||||
july: "July"
|
||||
august: "August"
|
||||
september: "September"
|
||||
october: "October"
|
||||
november: "November"
|
||||
december: "December"
|
||||
email_not_found: "Email address not found"
|
||||
email_required: "You must provide an email address"
|
||||
logging_in: "Hold on a moment, we're logging you in"
|
||||
signup_email: "Your email"
|
||||
choose_password: "Choose a password"
|
||||
confirm_password: "Confirm password"
|
||||
action_signup: "Sign up now"
|
||||
welcome_to_ofn: "Welcome to the Open Food Network!"
|
||||
signup_or_login: "Start By Signing Up (or logging in)"
|
||||
have_an_account: "Already have an account?"
|
||||
action_login: "Log in now."
|
||||
forgot_password: "Forgot Password?"
|
||||
password_reset_sent: "An email with instructions on resetting your password has been sent!"
|
||||
reset_password: "Reset password"
|
||||
registration_greeting: "Greetings!"
|
||||
who_is_managing_enterprise: "Who is responsible for managing %{enterprise}?"
|
||||
enterprise_contact: "Primary Contact"
|
||||
enterprise_contact_required: "You need to enter a primary contact."
|
||||
enterprise_email: "Email address"
|
||||
enterprise_email_required: "You need to enter valid email address."
|
||||
enterprise_phone: "Phone number"
|
||||
back: "Back"
|
||||
continue: "Continue"
|
||||
limit_reached_headline: "Oh no!"
|
||||
limit_reached_message: "You have reached the limit!"
|
||||
limit_reached_text: "You have reached the limit for the number of enterprises you are allowed to own on the"
|
||||
limit_reached_action: "Return to the homepage"
|
||||
select_promo_image: "Step 3. Select Promo Image"
|
||||
promo_image_tip: "Tip: Shown as a banner, preferred size is 1200×260px"
|
||||
promo_image_label: "Choose a promo image"
|
||||
action_or: "OR"
|
||||
promo_image_drag: "Drag and drop your promo here"
|
||||
review_promo_image: "Step 4. Review Your Promo Banner"
|
||||
review_promo_image_tip: "Tip: for best results, your promo image should fill the available space"
|
||||
promo_image_placeholder: "Your logo will appear here for review once uploaded"
|
||||
uploading: "Uploading..."
|
||||
select_logo: "Step 1. Select Logo Image"
|
||||
logo_tip: "Tip: Square images will work best, preferably at least 300×300px"
|
||||
logo_label: "Choose a logo image"
|
||||
logo_drag: "Drag and drop your logo here"
|
||||
review_logo: "Step 2. Review Your Logo"
|
||||
review_logo_tip: "Tip: for best results, your logo should fill the available space"
|
||||
logo_placeholder: "Your logo will appear here for review once uploaded"
|
||||
enterprise_about_headline: "Nice one!"
|
||||
enterprise_about_message: "Now let's flesh out the details about"
|
||||
enterprise_success: "Success! %{enterprise} added to the Open Food Network "
|
||||
enterprise_registration_exit_message: "If you exit this wizard at any stage, you need to click the confirmation link in the email you have received. This will take you to your admin interface where you can continue setting up your profile."
|
||||
enterprise_description: "Short Description"
|
||||
enterprise_description_placeholder: "A short sentence describing your enterprise"
|
||||
enterprise_long_desc: "Long Description"
|
||||
enterprise_long_desc_placeholder: "This is your opportunity to tell the story of your enterprise - what makes you different and wonderful? We'd suggest keeping your description to under 600 characters or 150 words."
|
||||
enterprise_long_desc_length: "%{num} characters / up to 600 recommended"
|
||||
enterprise_abn: "ABN"
|
||||
enterprise_abn_placeholder: "eg. 99 123 456 789"
|
||||
enterprise_acn: "ACN"
|
||||
enterprise_acn_placeholder: "eg. 123 456 789"
|
||||
yes: "Yes"
|
||||
no: "No"
|
||||
enterprise_tax_required: "You need to make a selection."
|
||||
enterprise_final_step: "Final step!"
|
||||
enterprise_social_text: "How can people find %{enterprise} online?"
|
||||
website: "Website"
|
||||
website_placeholder: "eg. openfoodnetwork.org.au"
|
||||
facebook: "Facebook"
|
||||
facebook_placeholder: "eg. www.facebook.com/PageNameHere"
|
||||
linkedin: "LinkedIn"
|
||||
linkedin_placeholder: "eg. www.linkedin.com/YourNameHere"
|
||||
twitter: "Twitter"
|
||||
twitter_placeholder: "eg. @twitter_handle"
|
||||
instagram: "Instagram"
|
||||
instagram_placeholder: "eg. @instagram_handle"
|
||||
registration_greeting: "Hi there!"
|
||||
registration_intro: "You can now create a profile for your Producer or Hub"
|
||||
registration_action: "Let's get started!"
|
||||
registration_checklist: "You'll need"
|
||||
registration_time: "5-10 minutes"
|
||||
registration_enterprise_address: "Enterprise address"
|
||||
registration_contact_details: "Primary contact details"
|
||||
registration_logo: "Your logo image"
|
||||
registration_promo_image: "Landscape image for your profile"
|
||||
registration_about_us: "'About Us' text"
|
||||
registration_outcome_headline: "What do I get?"
|
||||
registration_outcome1_html: "Your profile helps people <strong>find</strong> and <strong>contact</strong> you on the Open Food Network."
|
||||
registration_outcome2: "Use this space to tell the story of your enterprise, to help drive connections to your social and online presence. "
|
||||
registration_outcome3: "It's also the first step towards trading on the Open Food Network, or opening an online store."
|
||||
registration_finished_headline: "Finished!"
|
||||
registration_finished_thanks: "Thanks for filling out the details for %{enterprise}."
|
||||
registration_finished_login: "You can change or update your enterprise at any stage by logging into Open Food Network and going to Admin."
|
||||
registration_finished_activate: "Activate %{enterprise}."
|
||||
registration_finished_activate_instruction_html: "We've sent a confirmation email to <strong>%{email}</strong> if it hasn't been activated before.<br/>
|
||||
Please follow the instructions there to make your enterprise visible on the Open Food Network."
|
||||
registration_finished_action: "Open Food Network home"
|
||||
registration_type_headline: "Last step to add %{enterprise}"
|
||||
registration_type_question: "Are you a producer?"
|
||||
registration_type_producer: "Yes, I'm a producer"
|
||||
registration_type_no_producer: "No, I'm not a producer"
|
||||
registration_type_error: "Please choose one. Are you are producer?"
|
||||
registration_type_producer_help: "Producers make yummy things to eat &/or drink. You're a producer if you grow it, raise it, brew it, bake it, ferment it, milk it or mould it."
|
||||
registration_type_no_producer_help: "If you’re not a producer, you’re probably someone who sells and distributes food. You might be a hub, coop, buying group, retailer, wholesaler or other."
|
||||
create_profile: "Create Profile"
|
||||
registration_images_headline: "Thanks!"
|
||||
registration_images_description: "Let's upload some pretty pictures so your profile looks great! :)"
|
||||
registration_detail_headline: "Let's Get Started"
|
||||
registration_detail_enterprise: "Woot! First we need to know a little bit about your enterprise:"
|
||||
registration_detail_producer: "Woot! First we need to know a little bit about your farm:"
|
||||
registration_detail_name_enterprise: "Enterprise Name:"
|
||||
registration_detail_name_producer: "Farm Name:"
|
||||
registration_detail_name_placeholder: "e.g. Charlie's Awesome Farm"
|
||||
registration_detail_name_error: "Please choose a unique name for your enterprise"
|
||||
registration_detail_address1: "Address line 1:"
|
||||
registration_detail_address1_placeholder: "e.g. 123 Cranberry Drive"
|
||||
registration_detail_address1_error: "Please enter an address"
|
||||
registration_detail_address2: "Address line 2:"
|
||||
registration_detail_suburb: "Suburb:"
|
||||
registration_detail_suburb_placeholder: "e.g. Northcote"
|
||||
registration_detail_suburb_error: "Please enter a suburb"
|
||||
registration_detail_postcode: "Postcode:"
|
||||
registration_detail_postcode_placeholder: "e.g. 3070"
|
||||
registration_detail_postcode_error: "Postcode required"
|
||||
registration_detail_state: "State:"
|
||||
registration_detail_state_error: "State required"
|
||||
registration_detail_country: "Country:"
|
||||
registration_detail_country_error: "Please select a country"
|
||||
registration_detail_: ""
|
||||
fees: "Fees"
|
||||
item_cost: "Item cost"
|
||||
bulk: "Bulk"
|
||||
shop_variant_quantity_min: "min"
|
||||
shop_variant_quantity_max: "max"
|
||||
contact: "Contact"
|
||||
follow: "Follow"
|
||||
shop_for_products_html: "Shop for <span class=\"turquoise\">%{enterprise}</span> products at:"
|
||||
change_shop: "Change shop to:"
|
||||
shop_at: "Shop now at:"
|
||||
price_breakdown: "Full price breakdown"
|
||||
admin_fee: "Admin fee"
|
||||
sales_fee: "Sales fee"
|
||||
packing_fee: "Packing fee"
|
||||
transport_fee: "Transport fee"
|
||||
fundraising_fee: "Fundraising fee"
|
||||
price_graph: "Price graph"
|
||||
|
||||
Reference in New Issue
Block a user