update with changes from Production branch
This commit is contained in:
@ -2,25 +2,23 @@ require File.expand_path('../boot', __FILE__)
|
||||
|
||||
require 'rails/all'
|
||||
|
||||
if defined?(Bundler)
|
||||
# If you precompile assets before deploying to production, use this line
|
||||
# Bundler.require *Rails.groups(:assets => %w(development test))
|
||||
# If you want your assets lazily compiled in production, use this line
|
||||
Bundler.require(:default, :assets, Rails.env)
|
||||
end
|
||||
Bundler.require(:default, Rails.env)
|
||||
|
||||
module Thingspeak
|
||||
class Application < Rails::Application
|
||||
# Settings in config/environments/* take precedence over those specified here.
|
||||
# Application configuration should go into files in config/initializers
|
||||
# -- all .rb files in that directory are automatically loaded.
|
||||
|
||||
# Custom directories with classes and modules you want to be autoloadable.
|
||||
# config.autoload_paths += %W(#{config.root}/extras)
|
||||
config.autoload_paths += %W(#{config.root}/lib)
|
||||
|
||||
# Only load the plugins named here, in the order given (default is alphabetical).
|
||||
# :all can be used as a placeholder for all plugins not explicitly named.
|
||||
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]
|
||||
# fix invalid utf8 characters
|
||||
config.middleware.insert_before "Rack::Runtime", Rack::UTF8Sanitizer
|
||||
|
||||
# allow xml params
|
||||
config.middleware.insert_after ActionDispatch::ParamsParser, ActionDispatch::XmlParamsParser
|
||||
|
||||
# allow frames to work
|
||||
config.action_dispatch.default_headers = { 'X-Frame-Options' => 'ALLOWALL' }
|
||||
|
||||
# Activate observers that should always be running.
|
||||
# config.active_record.observers = :cacher, :garbage_collector, :forum_observer
|
||||
@ -29,23 +27,18 @@ module Thingspeak
|
||||
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
||||
# config.time_zone = 'Central Time (US & Canada)'
|
||||
|
||||
# must be placed before other config.i18n lines
|
||||
config.i18n.enforce_available_locales = false
|
||||
|
||||
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
||||
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
||||
config.i18n.default_locale = :en
|
||||
|
||||
# JavaScript files you want as :defaults (application.js is always included).
|
||||
# config.action_view.javascript_expansions[:defaults] = %w(jquery rails)
|
||||
|
||||
# Configure the default encoding used in templates for Ruby 1.9.
|
||||
config.encoding = "utf-8"
|
||||
|
||||
# Configure sensitive parameters which will be filtered from the log file.
|
||||
config.filter_parameters += [:password]
|
||||
|
||||
# Enable the asset pipeline
|
||||
config.assets.enabled = true
|
||||
|
||||
# Version of your assets, change this if you want to expire all your assets
|
||||
config.assets.version = '1.0'
|
||||
end
|
||||
end
|
||||
|
||||
|
50
config/database.yml.local
Normal file
50
config/database.yml.local
Normal file
@ -0,0 +1,50 @@
|
||||
# MySQL. Versions 4.1 and 5.0 are recommended.
|
||||
#
|
||||
# Install the MySQL driver:
|
||||
# gem install mysql
|
||||
# On Mac OS X:
|
||||
# sudo gem install mysql -- --with-mysql-dir=/usr/local/mysql
|
||||
# On Mac OS X Leopard:
|
||||
# sudo env ARCHFLAGS="-arch i386" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
|
||||
# This sets the ARCHFLAGS environment variable to your native architecture
|
||||
# On Windows:
|
||||
# gem install mysql
|
||||
# Choose the win32 build.
|
||||
# Install MySQL and put its /bin directory on your path.
|
||||
#
|
||||
# And be sure to use new-style password hashing:
|
||||
# http://dev.mysql.com/doc/refman/5.0/en/old-client.html
|
||||
development:
|
||||
adapter: mysql2
|
||||
encoding: utf8
|
||||
reconnect: false
|
||||
database: thingspeak_development
|
||||
pool: 5
|
||||
username: thing
|
||||
password: "speak"
|
||||
# socket: /var/lib/mysql/mysql.sock
|
||||
socket: /var/run/mysqld/mysqld.sock
|
||||
|
||||
# Warning: The database defined as "test" will be erased and
|
||||
# re-generated from your development database when you run "rake".
|
||||
# Do not set this db to the same as development or production.
|
||||
test:
|
||||
adapter: mysql2
|
||||
encoding: utf8
|
||||
reconnect: false
|
||||
database: thingspeak_test
|
||||
pool: 5
|
||||
username: thing
|
||||
password: "speak"
|
||||
# socket: /var/lib/mysql/mysql.sock
|
||||
socket: /var/run/mysqld/mysqld.sock
|
||||
|
||||
production:
|
||||
adapter: mysql2
|
||||
encoding: utf8
|
||||
reconnect: true
|
||||
database: thingspeak_production
|
||||
pool: 5
|
||||
username: root
|
||||
password: "notimplemented"
|
||||
socket: /var/run/mysqld/mysqld.sock
|
@ -6,8 +6,9 @@ Thingspeak::Application.configure do
|
||||
# since you don't have to restart the webserver when you make code changes.
|
||||
config.cache_classes = false
|
||||
|
||||
# Log error messages when you accidentally call methods on nil.
|
||||
config.whiny_nils = true
|
||||
config.eager_load = false
|
||||
|
||||
config.assets.prefix = "/dev-assets"
|
||||
|
||||
# Show full error reports and disable caching
|
||||
config.consider_all_requests_local = true
|
||||
@ -19,20 +20,7 @@ Thingspeak::Application.configure do
|
||||
# Print deprecation notices to the Rails logger
|
||||
config.active_support.deprecation = :log
|
||||
|
||||
# Only use best-standards-support built into browsers
|
||||
config.action_dispatch.best_standards_support = :builtin
|
||||
|
||||
# Raise exception on mass assignment protection for Active Record models
|
||||
config.active_record.mass_assignment_sanitizer = :strict
|
||||
|
||||
# Log the query plan for queries taking more than this (works
|
||||
# with SQLite, MySQL, and PostgreSQL)
|
||||
config.active_record.auto_explain_threshold_in_seconds = 0.5
|
||||
|
||||
# Do not compress assets
|
||||
config.assets.compress = false
|
||||
|
||||
# Expands the lines which load the assets
|
||||
config.assets.debug = true
|
||||
|
||||
end
|
||||
|
||||
|
@ -7,8 +7,7 @@ Thingspeak::Application.configure do
|
||||
# and recreated between test runs. Don't rely on the data there!
|
||||
config.cache_classes = true
|
||||
|
||||
# Log error messages when you accidentally call methods on nil.
|
||||
config.whiny_nils = true
|
||||
config.eager_load = false
|
||||
|
||||
# Show full error reports and disable caching
|
||||
config.consider_all_requests_local = true
|
||||
@ -31,12 +30,8 @@ Thingspeak::Application.configure do
|
||||
# config.active_record.schema_format = :sql
|
||||
|
||||
# Print deprecation notices to the stderr
|
||||
config.active_support.deprecation = :stderr
|
||||
|
||||
# Allow pass debug_assets=true as a query parameter to load pages with unpackaged assets
|
||||
config.assets.allow_debugging = true
|
||||
|
||||
# Configure static asset server for tests with Cache-Control for performance
|
||||
config.active_support.deprecation = :notify
|
||||
config.serve_static_assets = true
|
||||
config.static_cache_control = "public, max-age=3600"
|
||||
|
||||
end
|
||||
|
||||
|
@ -2,5 +2,28 @@
|
||||
# set to false to only allow updates via HTTP POST
|
||||
GET_SUPPORT = true
|
||||
|
||||
# rate limit channel updates
|
||||
RATE_LIMIT = false
|
||||
|
||||
# number of seconds to wait before a channel can be updated again
|
||||
RATE_LIMIT_FREQUENCY = '15'
|
||||
|
||||
# main production server to handle all requests (can be a proxy)
|
||||
APPLICATION_IP_ADDRESS = '127.0.0.1'
|
||||
|
||||
# domain for the API
|
||||
API_DOMAIN = 'http://127.0.0.1:3000/'
|
||||
|
||||
# get api key from HTTP headers if this value is present
|
||||
HTTP_HEADER_API_KEY_NAME = 'THINGSPEAKAPIKEY'
|
||||
|
||||
# Twitter api credentials
|
||||
CONSUMER_KEY = ''
|
||||
CONSUMER_SECRET = ''
|
||||
|
||||
# reset password base url
|
||||
RESET_PASSWORD_URL = 'http://127.0.0.1:3000//users/reset_password/'
|
||||
|
||||
# allow only these additional locales (use downcase, easier to parse)
|
||||
ALLOWED_LOCALES = ['pt-br','it']
|
||||
ALLOWED_LOCALES = ['pt-br','it']
|
||||
|
||||
|
@ -4,4 +4,5 @@
|
||||
# If you change this key, all old signed cookies will become invalid!
|
||||
# Make sure the secret is at least 30 characters and all random,
|
||||
# no regular words or you'll be exposed to dictionary attacks.
|
||||
Thingspeak::Application.config.secret_token = '44a84c8a4b53e95aecc92b38a267eaef3853d876968ad30f0b21023922b9dbaed1976e8a29884121e124720bfe3a13f8b1b0078f94f840866f83fc9bfbd75f73'
|
||||
Thingspeak::Application.config.secret_key_base = '8dbb2d4ce6ad0f87b886c4bf796b1f8f94268837776ae730f2fa2724ef1643e0eb3d4a814a01512e9e73902ea88d5553e367e321d44522bc802153369ebe4cf9'
|
||||
|
||||
|
11
config/initializers/timestamp_json_override.rb
Normal file
11
config/initializers/timestamp_json_override.rb
Normal file
@ -0,0 +1,11 @@
|
||||
#Changing the as_json method to remove the milliseconds from TimeWithZone to_json result (just like in Rails 3)
|
||||
class ActiveSupport::TimeWithZone
|
||||
def as_json(options = {})
|
||||
if ActiveSupport::JSON::Encoding.use_standard_json_time_format
|
||||
xmlschema
|
||||
else
|
||||
%(#{time.strftime("%Y/%m/%d %H:%M:%S")} #{formatted_offset(false)})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -7,8 +7,9 @@ en:
|
||||
formats:
|
||||
pretty: "%a, %b %e at %l:%M %p"
|
||||
about: "About"
|
||||
account: "Account"
|
||||
account_changes: "Confirm account changes"
|
||||
account_edit: "Edit Account Information"
|
||||
account_edit: "Edit Account"
|
||||
account_error: "There were some problems creating your account:"
|
||||
account_error_edit: "There were some problems editing your account:"
|
||||
account_info: "Account Information"
|
||||
@ -21,6 +22,7 @@ en:
|
||||
api_key: "API Key"
|
||||
api_key_delete: "Delete API Key"
|
||||
api_key_key: "Key"
|
||||
api_key_new: "Generate New API Key"
|
||||
api_key_read: "Read API Keys"
|
||||
api_key_read_new: "Generate New Read API Key"
|
||||
api_key_write: "Write API Key"
|
||||
@ -39,6 +41,7 @@ en:
|
||||
channel_create: "Create New Channel"
|
||||
channel_edit: "Edit Channel"
|
||||
channel_error: "There were some problems creating your channel:"
|
||||
channel_update_success: "The Channel was updated."
|
||||
channel_feed: "Channel Feed"
|
||||
channel_default_field: "Field Label"
|
||||
channel_default_name: "Channel"
|
||||
@ -47,7 +50,10 @@ en:
|
||||
channel_description: "Description"
|
||||
channel_directions: "Directions"
|
||||
channel_id: "Channel ID"
|
||||
channel_log_to: "Log to Channel"
|
||||
channel_logged_to: "Logged to Channel"
|
||||
channel_name: "Name"
|
||||
channel_ranking: "Percentage Complete"
|
||||
channel_not_public: "This channel is not public."
|
||||
channel_permission: "You don't have permission to view that channel!"
|
||||
channel_public: "Viewing public channel"
|
||||
@ -56,9 +62,15 @@ en:
|
||||
channel_url: "URL"
|
||||
channels: "Channels"
|
||||
channels_my: "My Channels"
|
||||
channels_public: "Public Channels"
|
||||
channels_public_view: "View Public Channels"
|
||||
channel_being_cleared: "This channel is currently being cleared. Any data you post to this channel before clearing is complete may be deleted."
|
||||
channel_video_type_blank: "Either Youtube, or Vimeo, is required if a Video ID is specified."
|
||||
chart: "Chart"
|
||||
chart_max: "Max"
|
||||
chart_min: "Min"
|
||||
chart_background_color: "Background"
|
||||
chart_is_dynamic: "Dynamic?"
|
||||
chart_embed_code: "Embed Code"
|
||||
chart_example: "Example Chart"
|
||||
chart_color: "Color"
|
||||
@ -66,7 +78,7 @@ en:
|
||||
chart_owned: "Your Charts"
|
||||
chart_round: "Rounding"
|
||||
chart_type: "Type"
|
||||
chart_update: "Update"
|
||||
chart_update: "Update Chart"
|
||||
chart_xaxis: "X-Axis"
|
||||
chart_yaxis: "Y-Axis"
|
||||
charts: "Charts"
|
||||
@ -84,9 +96,12 @@ en:
|
||||
confirm_device_random_mac: "Are you sure you want to generate a random MAC address for this device?"
|
||||
confirm_device_unique_mac: "Are you sure you want to generate a unique MAC address for this device?"
|
||||
confirm_new_api_key: "Are you sure you want to generate a new write API key?"
|
||||
confirm_new_talkback_key: "Are you sure you want to generate a new TalkBack API key?"
|
||||
confirm_new_thinghttp_key: "Are you sure you want to generate a new ThingHTTP API key?"
|
||||
confirm_new_thingtweet_key: "Are you sure you want to generate a new ThingTweet API key?"
|
||||
confirm_new_user_api_key: "Are you sure you want to generate a new API key?"
|
||||
confirm_plugin_delete: "Are you sure you want to delete this plugin?"
|
||||
confirm_talkback_delete: "Are you sure you want to delete this TalkBack?"
|
||||
confirm_thinghttp_delete: "Are you sure you want to delete this ThingHTTP?"
|
||||
confirm_tweetcontrol_delete: "Are you sure you want to delete this TweetControl?"
|
||||
confirm_twitter_delete: "Are you sure you want to unlink this Twitter account?"
|
||||
@ -95,6 +110,8 @@ en:
|
||||
data: "Data"
|
||||
days: "Days"
|
||||
delete: "delete"
|
||||
developer_info: "Developer Info"
|
||||
device: "Device"
|
||||
device_create: "Add New Device"
|
||||
device_custom_mac: "Enter Custom MAC Address"
|
||||
device_default_name: "Device"
|
||||
@ -107,6 +124,7 @@ en:
|
||||
device_local_ip_address: "Local IP Address"
|
||||
device_local_port: "Local Port"
|
||||
device_mac: "MAC Address"
|
||||
device_mac_invalid: "Invalid MAC Address."
|
||||
device_model: "Model"
|
||||
device_port: "Public Port Number"
|
||||
device_random_mac: "Generate Random MAC Address"
|
||||
@ -123,11 +141,13 @@ en:
|
||||
email: "Email"
|
||||
email_form_add: "Add Email"
|
||||
featured_channels: "Featured Channels"
|
||||
selected_channels: "Channels"
|
||||
features: "Features"
|
||||
field: "Field"
|
||||
footer: "This is the footer message."
|
||||
forgot: "Forgot your password?"
|
||||
forum: "Forum"
|
||||
for_more_information: "More Information"
|
||||
generate_thingtweet_arduino_code: "Generate ThingTweet Arduino Code"
|
||||
height: "Height"
|
||||
home: "Home"
|
||||
@ -140,16 +160,16 @@ en:
|
||||
median: "Median"
|
||||
member_since: "Member since"
|
||||
message_field: "Message Field"
|
||||
myaccount: "Account"
|
||||
myaccount: "My Account"
|
||||
mychannels: "My Channels"
|
||||
new: "New"
|
||||
news: "News"
|
||||
note: "Note"
|
||||
note_save: "Save Note"
|
||||
password: "Password"
|
||||
password_change_raw: "Change<br />Password"
|
||||
password_change: "Change Password"
|
||||
password_confirmation: "Password Confirmation"
|
||||
password_confirmation_raw: "Password<br />Confirmation"
|
||||
password_current_raw: "Current<br />Password"
|
||||
password_current: "Current Password"
|
||||
password_forgot: "Forgot your password?"
|
||||
password_forgot_message: "Enter your email address below and we'll send you a link where you can reset your password."
|
||||
password_incorrect: "Your current password was not entered correctly."
|
||||
@ -178,6 +198,7 @@ en:
|
||||
plugin_name: "Name"
|
||||
plugin_permission: "You don't have permission to access this plugin!"
|
||||
plugins: "Plugins"
|
||||
plugin_private_flag: "Private?"
|
||||
profile_bio: "Bio"
|
||||
profile_edit: "Edit Public Profile"
|
||||
profile_for: "Profile for"
|
||||
@ -189,11 +210,73 @@ en:
|
||||
public: "Make Public?"
|
||||
public_header: "Public?"
|
||||
public_profile: "Public Profile"
|
||||
public_true: "Yes"
|
||||
public_true: "This channel is public"
|
||||
questions: "Questions"
|
||||
react: "React"
|
||||
react_header_name: "Name"
|
||||
react_new_button: "Create New React"
|
||||
react_delete_confirm: "Are you sure you wish to delete this condition?"
|
||||
react_thinghttp_error: "'%{thinghttp_name}' request doesn't belong to you"
|
||||
react_channel_error: "'%{channel_name}' request doesn't belong to you"
|
||||
react_invalid_error: "%{value} is not a valid value"
|
||||
react_invalid_number_error: "%{value} is not a value field number"
|
||||
react_invalid_condition_error: "%{value} is not a valid condition"
|
||||
react_invalid_condition_type_error: "%{value} is not a valid condition type"
|
||||
react_twitter_account_required: "You need to add a twitter account to enable tweeting"
|
||||
react_add_twitter_account: "Add a twitter account"
|
||||
react_thinghttp_required: "You need to add a ThingHTTP request "
|
||||
react_add_thinghttp_req: "Add ThingHTTP request"
|
||||
react_tweet_cant_be_blank: "The tweet can't be blank"
|
||||
react_type_string: "String"
|
||||
react_type_status: "Status"
|
||||
react_type_numeric: "Numeric"
|
||||
react_type_geo: "Geo"
|
||||
react_type_nodata: "No Data Check"
|
||||
react_when_insert: "On Data Insertion"
|
||||
react_when_10m: "Every 10 minutes"
|
||||
react_when_30m: "Every 30 minutes"
|
||||
react_when_60m: "Every 60 minutes"
|
||||
react_condition_prefix: "If channel"
|
||||
react_condition_field: "field"
|
||||
react_condition_contains: "contains"
|
||||
react_condition_begins: "starts with"
|
||||
react_condition_ends: "ends with"
|
||||
react_condition_gt: "is greater than"
|
||||
react_condition_gte: "is greater than or equal to"
|
||||
react_condition_lt: "is less than"
|
||||
react_condition_lte: "is less than or equal to"
|
||||
react_condition_eq: "is equal to"
|
||||
react_condition_ne: "is not equal to"
|
||||
react_condition_within: "is within"
|
||||
react_condition_further: "is further than"
|
||||
react_condition_nodata_prefix: "has not been updated for"
|
||||
react_condition_nodata_suffix: "minutes"
|
||||
react_condition_geo: "km from"
|
||||
react_latitude: "latitude"
|
||||
react_longitude: "longitude"
|
||||
react_delete: "Delete this React"
|
||||
react_twitter_delete_warning1: "Cannot delete this twitter account as it is used by %{reacts_count}: %{reacts_list}"
|
||||
react_twitter_delete_warning2: "Please delete or modify this react before unlinking this twitter account."
|
||||
react_thinghttp_delete_warning1: "Cannot delete this ThingHTTP as it is used by %{reacts_count}: %{reacts_list}"
|
||||
react_thinghttp_delete_warning2: "Please delete or modify this react before unlinking this ThingHTTP."
|
||||
react_default_name: "React"
|
||||
react_label_condition: "Condition"
|
||||
react_label_test_frequency: "Test Frequency"
|
||||
react_label_react_name: "React Name"
|
||||
react_label_condition_type: "Condition Type"
|
||||
react_label_action: "Action"
|
||||
react_label_options: "Options"
|
||||
react_action_tweet_prefix: "then tweet"
|
||||
react_action_tweet_suffix: "using Twitter account"
|
||||
react_action_thinghttp_prefix: "then perform ThingHTTP"
|
||||
react_option_run_first_time: "Run action only the first time the condition is met"
|
||||
react_option_run_every_time: "Run action each time condition is met"
|
||||
react_create_button: "Create React"
|
||||
react_save_button: "Create React"
|
||||
remember_me: "Remember my User ID"
|
||||
results: "Results"
|
||||
rss: "RSS Feed"
|
||||
save: "Save"
|
||||
saved: "Saved."
|
||||
saved_error: "Error while saving data."
|
||||
search_empty: "No search results were found."
|
||||
@ -216,10 +299,42 @@ en:
|
||||
social_channel_error_slug_exists: "Slug is already taken."
|
||||
social_channel_new: "New Social Channel"
|
||||
social_saved: "Submitted, thank you!"
|
||||
status_messages: "Status Messages"
|
||||
submit: "Submit"
|
||||
sum: "Sum"
|
||||
scheduled_thinghttp: "Scheduled ThingHTTP"
|
||||
scheduled_thinghttp_header_name: "name"
|
||||
scheduled_thinghttp_new_button: "New Scheduled ThingHTTP"
|
||||
scheduled_thinghttp_delete_confirm: "Are you sure you wish to delete this scheduled ThingHTTP?"
|
||||
scheduled_thinghttp_label_name: "Name"
|
||||
scheduledthinghttp_label_frequency: "Frequency"
|
||||
scheduled_thinghttp_save_button: "Save Scheduled ThingHTTP"
|
||||
scheduled_thinghttp_create_button: "Create Scheduled ThingHTTP"
|
||||
scheduledthinghttp_default_name: "Scheduled ThingHTTP"
|
||||
scheduled_thinghttp_thinghttp_error: "'%{thinghttp_name}' request doesn't belong to you"
|
||||
scheduled_thinghttp_channel_error: "'%{channel_name}' channel doesn't belong to you"
|
||||
scheduled_thinghttp_label_rule: "Rule"
|
||||
scheduled_thinghttp_field_error: "Not a valid field"
|
||||
support: "Support"
|
||||
help_scheduled_thinghttp_edit: ""
|
||||
tag: "tag"
|
||||
tags: "Tags"
|
||||
tags_search: "Search Channels"
|
||||
talkback: "TalkBack"
|
||||
talkback_command_add: "Add a new command"
|
||||
talkback_command_command_string: "Command string"
|
||||
talkback_command_id: "Command ID"
|
||||
talkback_command_position: "Position"
|
||||
talkback_command_remove: "Remove command"
|
||||
talkback_commands: "Commands"
|
||||
talkback_create: "New TalkBack"
|
||||
talkback_delete: "Delete TalkBack"
|
||||
talkback_delete_message: "Want to delete this TalkBack?"
|
||||
talkback_edit: "Edit TalkBack"
|
||||
talkback_id: "TalkBack ID"
|
||||
talkback_name: "Name"
|
||||
talkback_new_api_key: "Regenerate API Key"
|
||||
talkback_update: "Update TalkBack"
|
||||
thinghttp: "ThingHTTP"
|
||||
thinghttp_auth_name: "HTTP Auth Username"
|
||||
thinghttp_auth_pass: "HTTP Auth Password"
|
||||
@ -256,6 +371,7 @@ en:
|
||||
tos: "Terms of Service"
|
||||
tos_agree: "By signing up, you agree to the"
|
||||
try_again: "Please try again!"
|
||||
tutorials: "Tutorials"
|
||||
tweetcontrol: "TweetControl"
|
||||
tweetcontrol_delete: "Delete TweetControl"
|
||||
tweetcontrol_delete_message: "Want to delete this TweetControl?"
|
||||
@ -263,7 +379,7 @@ en:
|
||||
tweetcontrol_new: "Create New TweetControl"
|
||||
tweetcontrol_edit: "Update TweetControl"
|
||||
tweetcontrol_thinghttp: "ThingHTTP Action"
|
||||
tweetcontrol_trigger: "Hashtag Trigger"
|
||||
tweetcontrol_trigger: "Trigger"
|
||||
twitter_accounts: "Current Twitter accounts"
|
||||
twitter_delete: "Unlink Account"
|
||||
twitter_failure: "Twitter failure."
|
||||
@ -271,10 +387,13 @@ en:
|
||||
twitter_link_account: "Link Twitter Account"
|
||||
twitter_link_success: "has been successfully linked to ThingTweet."
|
||||
twitter_new_api_key: "Regenerate API Key"
|
||||
twitter_screen_name: "Twitter Screen Name"
|
||||
twitter_screen_name: "Twitter Account"
|
||||
upload: "Upload"
|
||||
upload_select: "Upload a CSV file to import data into this channel"
|
||||
uploading: "uploading file..."
|
||||
upload_successful: "Upload successful."
|
||||
upload_no_file: "Please specify a file to be uploaded."
|
||||
upload_no_data: "The uploaded file was empty."
|
||||
url: "URL"
|
||||
user: "User"
|
||||
user_no_public_channels: "This user has no public channels."
|
||||
@ -288,16 +407,26 @@ en:
|
||||
watched_empty: "You aren't watching any channels."
|
||||
watched_find: "Find some channels to watch."
|
||||
watched_view: "View Watched Channels"
|
||||
public_link: "Public"
|
||||
private_link: "Private"
|
||||
settings_link: "Settings"
|
||||
api_key_link: "API Key"
|
||||
data_import_link: "Data Import"
|
||||
|
||||
width: "Width"
|
||||
youtube: "YouTube"
|
||||
|
||||
# help section
|
||||
help: "Help"
|
||||
help_api_documentation: "API documentation"
|
||||
help_apps_talkback: "Allow devices to execute queued commands."
|
||||
help_apps_thinghttp: "Create custom POSTs or GETs to other webservices and retrieve the data."
|
||||
help_apps_thingtweet: "Link your Twitter account to ThingSpeak and send Twitter messages using our simple API."
|
||||
help_apps_tweetcontrol: "Listen to commands from Twitter and then perform an action."
|
||||
help_apps_react: "Perform actions when conditions are met by your data in your channels."
|
||||
help_channel: "Create a channel -- it can be for a device, app, or anything that can send data to ThingSpeak."
|
||||
help_channel_clear: "Clicking on the \"Clear Channel\" button will delete ALL feed data associated with this channel, but will leave the channel's info intact."
|
||||
help_channel_ranking: "Completeness will help your channel appear higher in the list of public channels."
|
||||
help_channel_feed: "Viewing Data"
|
||||
help_channel_fields: "Add up to 8 fields that can be tracked. A field must be added before it can store data."
|
||||
help_channel_import: "Select a CSV file on your hard drive and import all of its data directly into this channel. Your CSV file should contain a date field in the first column. If your data doesn't contain timezone info, select one appropriately."
|
||||
@ -320,13 +449,225 @@ en:
|
||||
help_plugins: "Plugins allow you to create custom HTML, JavaScript, and CSS files that can be used to parse and display your data."
|
||||
help_social_channel: "Create a new social channel which will be accessible at:"
|
||||
help_social_channel_public: "All social channels are public. Use the Message Field to allow users to enter other data, such as a message to go along with their submission."
|
||||
help_talkback: "Send queued commands to your devices with TalkBack."
|
||||
help_talkback_index: "Create a TalkBack and add some commands. Your device can then execute the stored commands, and those commands will be removed from the queue."
|
||||
help_talkback_channel: "If a channel log is set, executed commands will be automatically logged to the 'status' field of that channel."
|
||||
help_talkback_commands_1: "Commands can be added here or"
|
||||
help_talkback_commands_2: "via the API"
|
||||
help_talkback_show: "To learn more about using TalkBack, we suggest checking out our"
|
||||
help_thinghttp: "Use ThingHTTP to access other APIs or webpages and parse the responses. You can create and save a full HTTP request to any URL, and then easily access it by using your ThingHTTP API key."
|
||||
help_thinghttp_edit: "Create your custom HTTP request on this page. For example, try the following options:"
|
||||
help_thinghttp_example: "This will send your HTTP GET request to Google Finance and parse the response for an element having an ID of ref_626307_c, which corresponds to the S&P 500 current price change for the day."
|
||||
help_thinghttp_show: "You can now send your ThingHTTP request and view the response using the following URL:"
|
||||
help_thingtweet: "ThingTweet acts as a proxy to Twitter so that your devices can update Twitter statuses without having to implement Open Authentication (OAuth)."
|
||||
help_tweetcontrol: "Use TweetControl to listen to specific hashtags from Twitter, and then perform customized actions."
|
||||
help_tweetcontrol_edit: "Fill in the Twitter screen name and a hashtag to listen for."
|
||||
help_tweetcontrol_hashtag: "The hashtag #thingspeak must also be present in the Twitter status, for example:"
|
||||
help_tweetcontrol_thinghttp: "Select a ThingHTTP request to use with this TweetControl. The ThingHTTP request will be executed when the TweetControl is triggered."
|
||||
help_tweetcontrol: "Use TweetControl to listen to specific trigger words from Twitter, and then process a ThingHTTP request."
|
||||
help_tweetcontrol_edit: "Select Anonymous TweetControl to allow anyone to trigger your TweetControl or fill in a specfic Twitter Account."
|
||||
help_tweetcontrol_hashtag: "To trigger a TweetControl, you need to send a Twitter Status Update with at least the hashtag #thingspeak and the trigger word, for example:"
|
||||
help_tweetcontrol_thinghttp: "Select a ThingHTTP request to use with this TweetControl. The ThingHTTP request will be executed when the TweetControl is triggered."
|
||||
help_tweetcontrol_trigger: "Fill in a trigger to listen for."
|
||||
help_options: "more help"
|
||||
help_react: "React allow you to trigger a ThingHTTP request or send a tweet using ThingTweet when your ThingSpeak Channel meets a certain condition. "
|
||||
help_react_create: "Create your React condition here."
|
||||
help_react_edit: "Update your React condition here."
|
||||
help_react_edit1: "Select a condition type to correspond with the type of data you wish to check and set your condition values."
|
||||
help_react_edit2: "Use the Test Frequency setting to choose to test your condition on every insert or on a periodic basis."
|
||||
help_react_edit3: "Select ThingTweet or ThingHTTP as the action to be performed if the condition is met."
|
||||
|
||||
# unsorted
|
||||
window_map: "Channel Location"
|
||||
window_status: "Channel Status Updates"
|
||||
window_channel_video: "Channel Video"
|
||||
window_field_chart: "Field %{field_number} Chart"
|
||||
window_plugin: "%{name} (Plugin)"
|
||||
portlets_available: "Available Windows"
|
||||
private_view: "Private View"
|
||||
public_view: "Public View"
|
||||
channel_settings: "Channel Settings"
|
||||
data_import: "Data Import"
|
||||
portlets_all_displayed: "All available windows are being displayed"
|
||||
portlets_add: "Click a rectangle to add that windows to the dashboard"
|
||||
add_portlets: "Add Windows"
|
||||
|
||||
# documentation error headers
|
||||
error_code: "Error Code"
|
||||
error_http_status: "HTTP Status"
|
||||
error_message: "Message"
|
||||
error_details: "Details"
|
||||
|
||||
# errors
|
||||
error_codes:
|
||||
error_auth_required:
|
||||
message: "Authorization Required"
|
||||
http_status: 401
|
||||
details: "Please make sure that your API key is correct."
|
||||
error_resource_not_found:
|
||||
message: "Resource Not Found"
|
||||
http_status: 404
|
||||
details: "The requested resource was not found. Please check the URL and try again."
|
||||
error_method_invalid:
|
||||
message: "Method Not Allowed"
|
||||
http_status: 405
|
||||
details: "Please use the proper HTTP method for this request."
|
||||
error_no_action:
|
||||
message: "No Action Performed"
|
||||
http_status: 421
|
||||
details: "The server attempted to process your request, but has no action to perform."
|
||||
error_too_many_requests:
|
||||
message: "Too Many Requests"
|
||||
http_status: 429
|
||||
details: "Please wait before making another request."
|
||||
|
||||
number:
|
||||
# Used in number_with_delimiter()
|
||||
# These are also the defaults for 'currency', 'percentage', 'precision', and 'human'
|
||||
format:
|
||||
# Sets the separator between the units, for more precision (e.g. 1.0 / 2.0 == 0.5)
|
||||
separator: "."
|
||||
# Delimits thousands (e.g. 1,000,000 is a million) (always in groups of three)
|
||||
delimiter: ","
|
||||
# Number of decimals, behind the separator (the number 1 with a precision of 2 gives: 1.00)
|
||||
precision: 3
|
||||
# If set to true, precision will mean the number of significant digits instead
|
||||
# of the number of decimal digits (1234 with precision 2 becomes 1200, 1.23543 becomes 1.2)
|
||||
significant: false
|
||||
# If set, the zeros after the decimal separator will always be stripped (eg.: 1.200 will be 1.2)
|
||||
strip_insignificant_zeros: false
|
||||
|
||||
# Used in number_to_currency()
|
||||
currency:
|
||||
format:
|
||||
# Where is the currency sign? %u is the currency unit, %n the number (default: $5.00)
|
||||
format: "%u%n"
|
||||
unit: "$"
|
||||
# These five are to override number.format and are optional
|
||||
separator: "."
|
||||
delimiter: ","
|
||||
precision: 2
|
||||
significant: false
|
||||
strip_insignificant_zeros: false
|
||||
|
||||
# Used in number_to_percentage()
|
||||
percentage:
|
||||
format:
|
||||
# These five are to override number.format and are optional
|
||||
# separator:
|
||||
delimiter: ""
|
||||
# precision:
|
||||
# significant: false
|
||||
# strip_insignificant_zeros: false
|
||||
format: "%n%"
|
||||
|
||||
# Used in number_to_precision()
|
||||
precision:
|
||||
format:
|
||||
# These five are to override number.format and are optional
|
||||
# separator:
|
||||
delimiter: ""
|
||||
# precision:
|
||||
# significant: false
|
||||
# strip_insignificant_zeros: false
|
||||
|
||||
# Used in number_to_human_size() and number_to_human()
|
||||
human:
|
||||
format:
|
||||
# These five are to override number.format and are optional
|
||||
# separator:
|
||||
delimiter: ""
|
||||
precision: 3
|
||||
significant: true
|
||||
strip_insignificant_zeros: true
|
||||
# Used in number_to_human_size()
|
||||
storage_units:
|
||||
# Storage units output formatting.
|
||||
# %u is the storage unit, %n is the number (default: 2 MB)
|
||||
format: "%n %u"
|
||||
units:
|
||||
byte:
|
||||
one: "Byte"
|
||||
other: "Bytes"
|
||||
kb: "KB"
|
||||
mb: "MB"
|
||||
gb: "GB"
|
||||
tb: "TB"
|
||||
# Used in number_to_human()
|
||||
decimal_units:
|
||||
format: "%n %u"
|
||||
# Decimal units output formatting
|
||||
# By default we will only quantify some of the exponents
|
||||
# but the commented ones might be defined or overridden
|
||||
# by the user.
|
||||
units:
|
||||
# femto: Quadrillionth
|
||||
# pico: Trillionth
|
||||
# nano: Billionth
|
||||
# micro: Millionth
|
||||
# mili: Thousandth
|
||||
# centi: Hundredth
|
||||
# deci: Tenth
|
||||
unit: ""
|
||||
# ten:
|
||||
# one: Ten
|
||||
# other: Tens
|
||||
# hundred: Hundred
|
||||
thousand: Thousand
|
||||
million: Million
|
||||
billion: Billion
|
||||
trillion: Trillion
|
||||
quadrillion: Quadrillion
|
||||
|
||||
# Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words()
|
||||
datetime:
|
||||
distance_in_words:
|
||||
half_a_minute: "half a minute"
|
||||
less_than_x_seconds:
|
||||
one: "less than 1 second"
|
||||
other: "less than %{count} seconds"
|
||||
x_seconds:
|
||||
one: "1 second"
|
||||
other: "%{count} seconds"
|
||||
less_than_x_minutes:
|
||||
one: "less than a minute"
|
||||
other: "less than %{count} minutes"
|
||||
x_minutes:
|
||||
one: "1 minute"
|
||||
other: "%{count} minutes"
|
||||
about_x_hours:
|
||||
one: "about 1 hour"
|
||||
other: "about %{count} hours"
|
||||
x_days:
|
||||
one: "1 day"
|
||||
other: "%{count} days"
|
||||
about_x_months:
|
||||
one: "about 1 month"
|
||||
other: "about %{count} months"
|
||||
x_months:
|
||||
one: "1 month"
|
||||
other: "%{count} months"
|
||||
about_x_years:
|
||||
one: "about 1 year"
|
||||
other: "about %{count} years"
|
||||
over_x_years:
|
||||
one: "over 1 year"
|
||||
other: "over %{count} years"
|
||||
almost_x_years:
|
||||
one: "almost 1 year"
|
||||
other: "almost %{count} years"
|
||||
prompts:
|
||||
year: "Year"
|
||||
month: "Month"
|
||||
day: "Day"
|
||||
hour: "Hour"
|
||||
minute: "Minute"
|
||||
second: "Seconds"
|
||||
|
||||
helpers:
|
||||
select:
|
||||
# Default value for :prompt => true in FormOptionsHelper
|
||||
prompt: "Please select"
|
||||
|
||||
# Default translation keys for submit and button FormHelper
|
||||
submit:
|
||||
create: 'Create %{model}'
|
||||
update: 'Update %{model}'
|
||||
submit: 'Save %{model}'
|
||||
|
||||
|
@ -365,6 +365,11 @@ it:
|
||||
watched_empty: "Non sta guardando alcun canale."
|
||||
watched_find: "Trova qualche canale da guardare."
|
||||
watched_view: "Visualizza i Canali Visti"
|
||||
public_link: "Public"
|
||||
private_link: "Private"
|
||||
settings_link: "Settings"
|
||||
api_key_link: "API Key"
|
||||
data_import_link: "Data Import"
|
||||
width: "Larghezza"
|
||||
youtube: "YouTube"
|
||||
|
||||
@ -413,7 +418,7 @@ it:
|
||||
help_react: "React allow you to trigger a ThingHTTP request or send a tweet using ThingTweet when your ThingSpeak Channel meets a certain condition. "
|
||||
help_react_create: "Create your React condition here."
|
||||
help_react_edit: "Update your React condition here."
|
||||
help_react_edit1: "Select a condtion type to corespond with the type of data you wish to check and set your condition values."
|
||||
help_react_edit1: "Select a condition type to correspond with the type of data you wish to check and set your condition values."
|
||||
help_react_edit2: "Use the Test Frequency setting to choose to test your condition on every insert or on a periodic basis."
|
||||
help_react_edit3: "Select ThingTweet or ThingHTTP as the action to be performed if the condition is met."
|
||||
window_map: "Mappa"
|
||||
@ -582,4 +587,4 @@ it:
|
||||
submit:
|
||||
create: 'Create %{model}'
|
||||
update: 'Update %{model}'
|
||||
submit: 'Save %{model}'
|
||||
submit: 'Save %{model}'
|
@ -39,6 +39,7 @@
|
||||
channel_create: "Criar novo canal"
|
||||
channel_edit: "Editar Canal"
|
||||
channel_error: "Ocorreram alguns problemas ao criar seu canal:"
|
||||
channel_update_success: "The Channel was updated."
|
||||
channel_feed: "Dados do Canal"
|
||||
channel_default_field: "Rótulo do campo"
|
||||
channel_default_name: "Canal"
|
||||
@ -48,7 +49,8 @@
|
||||
channel_directions: "Direções"
|
||||
channel_id: "ID do canal"
|
||||
channel_name: "Nome"
|
||||
channel_not_public: "Este canal é público."
|
||||
channel_ranking: "Percentage Complete"
|
||||
channel_not_public: "Este canal não é público."
|
||||
channel_permission: "Você não tem permissão para visualizar este canal!"
|
||||
channel_public: "Visualizar canal público"
|
||||
channel_public_view: "Visualização Pública"
|
||||
@ -57,7 +59,12 @@
|
||||
channels: "Canais"
|
||||
channels_my: "Meus Canais"
|
||||
channels_public_view: "Visualizar canais públicos"
|
||||
channel_being_cleared: "This channel is currently being cleared. Any data you post to this channel before clearing is complete may be deleted."
|
||||
channel_video_type_blank: "Ou Youtube, ou Vimeo, é necessário se Video ID é especificado."
|
||||
chart: "Gráfico"
|
||||
chart_max: "Máximo"
|
||||
chart_min: "Mínimo"
|
||||
chart_is_dynamic: "Dinâmico"
|
||||
chart_background_color: "Cor do fundo"
|
||||
chart_embed_code: "Código para embutir"
|
||||
chart_example: "Gráfico de exemplo"
|
||||
@ -66,7 +73,7 @@
|
||||
chart_owned: "Seus gráficos"
|
||||
chart_round: "Arredondamento"
|
||||
chart_type: "Tipo"
|
||||
chart_update: "Atualizar"
|
||||
chart_update: "Atualizar gráficos"
|
||||
chart_xaxis: "Eixo X"
|
||||
chart_yaxis: "Eixo Y"
|
||||
charts: "Gráficos"
|
||||
@ -95,6 +102,7 @@
|
||||
data: "Dados"
|
||||
days: "Dias"
|
||||
delete: "apagar"
|
||||
device: "Device"
|
||||
device_create: "Adicionar um novo dispositivo"
|
||||
device_custom_mac: "Digitar um endereço MAC personalizado"
|
||||
device_default_name: "Dispositivo"
|
||||
@ -107,6 +115,7 @@
|
||||
device_local_ip_address: "Endereço IP Local"
|
||||
device_local_port: "Porta Local"
|
||||
device_mac: "Endereço MAC"
|
||||
device_mac_invalid: "Invalid MAC Address."
|
||||
device_model: "Modelo"
|
||||
device_port: "Número da porta pública"
|
||||
device_random_mac: "Gerar endereço MAC aleatório"
|
||||
@ -128,6 +137,7 @@
|
||||
footer: "Esta é a mensagem de rodapé."
|
||||
forgot: "Esqueceu sua senha?"
|
||||
forum: "Fórum"
|
||||
for_more_information: "Para Mais Informações"
|
||||
generate_thingtweet_arduino_code: "Gerar código Arduino para o ThingTweet"
|
||||
height: "Altura"
|
||||
home: "Início"
|
||||
@ -177,7 +187,9 @@
|
||||
plugin_js: "JavaScript"
|
||||
plugin_name: "Nome"
|
||||
plugin_permission: "Você não tem permissão para apagar isto!"
|
||||
plugin_private_flag: "Private only?"
|
||||
plugins: "Plugins"
|
||||
plugin_private_flag: "Private?"
|
||||
profile_bio: "Biografia"
|
||||
profile_edit: "Editar perfil público"
|
||||
profile_for: "Perfil de"
|
||||
@ -189,8 +201,69 @@
|
||||
public: "Tornar Público?"
|
||||
public_header: "Público?"
|
||||
public_profile: "Perfil Público"
|
||||
public_true: "Sim"
|
||||
public_true: "Este canal é público."
|
||||
questions: "Perguntas"
|
||||
react: "React"
|
||||
react_header_name: "Name"
|
||||
react_new_button: "Create New React"
|
||||
react_delete_confirm: "Are you sure you wish to delete this condition?"
|
||||
react_thinghttp_error: "'%{thinghttp_name}' request doesn't belong to you"
|
||||
react_channel_error: "'%{channel_name}' request doesn't belong to you"
|
||||
react_invalid_error: "%{value} is not a valid value"
|
||||
react_invalid_number_error: "%{value} is not a value field number"
|
||||
react_invalid_condition_error: "%{value} is not a valid condition"
|
||||
react_invalid_condition_type_error: "%{value} is not a valid condition type"
|
||||
react_twitter_account_required: "You need to add a twitter account to enable tweeting"
|
||||
react_add_twitter_account: "Add a twitter account"
|
||||
react_thinghttp_required: "You need to add a ThingHTTP request "
|
||||
react_add_thinghttp_req: "Add ThingHTTP request"
|
||||
react_tweet_cant_be_blank: "The tweet can't be blank"
|
||||
react_type_string: "String"
|
||||
react_type_status: "Status"
|
||||
react_type_numeric: "Numeric"
|
||||
react_type_geo: "Geo"
|
||||
react_type_nodata: "No Data Check"
|
||||
react_when_insert: "On Data Insertion"
|
||||
react_when_10m: "Every 10 minutes"
|
||||
react_when_30m: "Every 30 minutes"
|
||||
react_when_60m: "Every 60 minutes"
|
||||
react_condition_prefix: "If channel"
|
||||
react_condition_field: "field"
|
||||
react_condition_contains: "contains"
|
||||
react_condition_begins: "starts with"
|
||||
react_condition_ends: "ends with"
|
||||
react_condition_gt: "is greater than"
|
||||
react_condition_gte: "is greater than or equal to"
|
||||
react_condition_lt: "is less than"
|
||||
react_condition_lte: "is less than or equal to"
|
||||
react_condition_eq: "is equal to"
|
||||
react_condition_ne: "is not equal to"
|
||||
react_condition_within: "is within"
|
||||
react_condition_further: "is further than"
|
||||
react_condition_nodata_prefix: "has not been updated for"
|
||||
react_condition_nodata_suffix: "minutes"
|
||||
react_condition_geo: "km from"
|
||||
react_latitude: "latitude"
|
||||
react_longitude: "longitude"
|
||||
react_delete: "Delete this React"
|
||||
react_twitter_delete_warning1: "Cannot delete this twitter account as it is used by %{reacts_count}: %{reacts_list}"
|
||||
react_twitter_delete_warning2: "Please delete or modify this react before unlinking this twitter account."
|
||||
react_thinghttp_delete_warning1: "Cannot delete this ThingHTTP as it is used by %{reacts_count}: %{reacts_list}"
|
||||
react_thinghttp_delete_warning2: "Please delete or modify this react before unlinking this ThingHTTP."
|
||||
react_default_name: "React"
|
||||
react_label_condition: "Condition"
|
||||
react_label_test_frequency: "Test Frequency"
|
||||
react_label_react_name: "React Name"
|
||||
react_label_condition_type: "Condition Type"
|
||||
react_label_action: "Action"
|
||||
react_label_options: "Options"
|
||||
react_action_tweet_prefix: "then tweet"
|
||||
react_action_tweet_suffix: "using Twitter account"
|
||||
react_action_thinghttp_prefix: "then perform thinghttp"
|
||||
react_option_run_first_time: "Run action only the first time the condition is met"
|
||||
react_option_run_every_time: "Run action each time condition is met"
|
||||
react_create_button: "Create React"
|
||||
react_save_button: "Create React"
|
||||
remember_me: "Lembrar meu Login"
|
||||
results: "Resultados"
|
||||
rss: "RSS Feed"
|
||||
@ -216,6 +289,7 @@
|
||||
social_channel_error_slug_exists: "Slug já foi usado."
|
||||
social_channel_new: "Novo canal social"
|
||||
social_saved: "Enviado, obrigado!"
|
||||
status_messages: "Status Messages"
|
||||
submit: "Enviar"
|
||||
sum: "Soma"
|
||||
tags: "Tags"
|
||||
@ -275,6 +349,9 @@
|
||||
upload: "Upload"
|
||||
upload_select: "Faça o upload de um arquivo CSV para importar dados para este canal"
|
||||
uploading: "fazendo upload..."
|
||||
upload_successful: "Upload successful."
|
||||
upload_no_file: "Please specify a file to be uploaded."
|
||||
upload_no_data: "The uploaded file was empty."
|
||||
url: "URL"
|
||||
user: "Login"
|
||||
user_no_public_channels: "Este usuário não possui canais públicos."
|
||||
@ -288,6 +365,11 @@
|
||||
watched_empty: "Você não está monitorando nenhum canal."
|
||||
watched_find: "Encontrar algum canal para monitorar."
|
||||
watched_view: "Ver canais monitorados"
|
||||
public_link: "Públicos"
|
||||
private_link: "Private"
|
||||
settings_link: "Settings"
|
||||
api_key_link: "API Key"
|
||||
data_import_link: "Data Import"
|
||||
width: "Largura"
|
||||
youtube: "YouTube"
|
||||
|
||||
@ -296,8 +378,10 @@
|
||||
help_apps_thinghttp: "Crie POSTs ou GETs personalizados para outros webservices e receba os dados."
|
||||
help_apps_thingtweet: "Conecte sua conta do Twitter ao ThingSpeak e envie mensagens para o Twitter usando nossa API."
|
||||
help_apps_tweetcontrol: "Receba comandos via Twitter e execute ações."
|
||||
help_apps_react: "Perform actions when conditions are met by your data in your channels."
|
||||
help_channel: "Crie um canal, pode ser para um dispositivo, aplicação ou qualquer outra coisa que envie dados para o ThingSpeak."
|
||||
help_channel_clear: "Clicando em \"Limpar Canal\" todos os registros recebidos por este canal serão apagados, porém as informações do canal permanecerão intactas."
|
||||
help_channel_ranking: "Completeness will help your channel appear higher in the list of public channels."
|
||||
help_channel_feed: "Como ver os dados enviados"
|
||||
help_channel_fields: "Adiciona até 8 campos de registro. Você deve adicionar um campo antes de armazenar os dados."
|
||||
help_channel_import: "Seleciona um arquivo CSV do seu disco rígido e importe todos os dados diretamente para este canal. Seu arquivo CSV deve conter, no primeiro campo, a data do registro. Se seus dados não contém a zona horária, selecione o timezone correto."
|
||||
@ -326,7 +410,182 @@
|
||||
help_thinghttp_show: "Você pode enviar sua chamada via ThingHTTP com a seguinte URL:"
|
||||
help_thingtweet: "ThingTweet atua como um proxy para o Twitter. Assim seus dispositivos podem atualizar o status do Twitter sem precisar implementar o Open Authentication (OAuth)."
|
||||
help_tweetcontrol: "Use o TweetControl para monitorar hashtags específicas do Twitter, e então realizar ações personalizadas."
|
||||
help_tweetcontrol_edit: "Preencha o login do Twitter e a hashtag que você deseja monitorar."
|
||||
help_tweetcontrol_edit: "Preencha o login do Twitter."
|
||||
help_tweetcontrol_hashtag: "A hashtag #thingspeak deve estar presente no status do Twitter, por exemplo:"
|
||||
help_tweetcontrol_thinghttp: "Selecione uma chamada ThingHTTP para ser usada por este TweetControl. A chamada ThingHTTP será executada quando o TweetControl for disparado."
|
||||
help_tweetcontrol_trigger: "Preencha a hashtag que você deseja monitorar."
|
||||
help_options: "mais ajuda"
|
||||
help_react: "React allow you to trigger a ThingHTTP request or send a tweet using ThingTweet when your ThingSpeak Channel meets a certain condition. "
|
||||
help_react_create: "Create your React condition here."
|
||||
help_react_edit: "Update your React condition here."
|
||||
help_react_edit1: "Select a condition type to correspond with the type of data you wish to check and set your condition values."
|
||||
help_react_edit2: "Use the Test Frequency setting to choose to test your condition on every insert or on a periodic basis."
|
||||
help_react_edit3: "Select ThingTweet or ThingHTTP as the action to be performed if the condition is met."
|
||||
window_map: "Channel Location"
|
||||
window_status: "Channel Status Updates"
|
||||
window_channel_video: "Channel Video"
|
||||
window_field_chart: "Field Chart"
|
||||
window_plugin: "%{name} (Plugin)"
|
||||
portlets_available: "Available Portlets"
|
||||
private_view: "Private View"
|
||||
public_view: "Public View"
|
||||
channel_settings: "Channel Settings"
|
||||
data_import: "Data Import"
|
||||
portlets_all_displayed: "All available portlets are being displayed"
|
||||
portlets_add: "Click a rectangle to add that portlet to the dashboard"
|
||||
add_portlets: "Add Windows"
|
||||
|
||||
|
||||
number:
|
||||
# Used in number_with_delimiter()
|
||||
# These are also the defaults for 'currency', 'percentage', 'precision', and 'human'
|
||||
format:
|
||||
# Sets the separator between the units, for more precision (e.g. 1.0 / 2.0 == 0.5)
|
||||
separator: "."
|
||||
# Delimits thousands (e.g. 1,000,000 is a million) (always in groups of three)
|
||||
delimiter: ","
|
||||
# Number of decimals, behind the separator (the number 1 with a precision of 2 gives: 1.00)
|
||||
precision: 3
|
||||
# If set to true, precision will mean the number of significant digits instead
|
||||
# of the number of decimal digits (1234 with precision 2 becomes 1200, 1.23543 becomes 1.2)
|
||||
significant: false
|
||||
# If set, the zeros after the decimal separator will always be stripped (eg.: 1.200 will be 1.2)
|
||||
strip_insignificant_zeros: false
|
||||
|
||||
# Used in number_to_currency()
|
||||
currency:
|
||||
format:
|
||||
# Where is the currency sign? %u is the currency unit, %n the number (default: $5.00)
|
||||
format: "%u%n"
|
||||
unit: "$"
|
||||
# These five are to override number.format and are optional
|
||||
separator: "."
|
||||
delimiter: ","
|
||||
precision: 2
|
||||
significant: false
|
||||
strip_insignificant_zeros: false
|
||||
|
||||
# Used in number_to_percentage()
|
||||
percentage:
|
||||
format:
|
||||
# These five are to override number.format and are optional
|
||||
# separator:
|
||||
delimiter: ""
|
||||
# precision:
|
||||
# significant: false
|
||||
# strip_insignificant_zeros: false
|
||||
format: "%n%"
|
||||
|
||||
# Used in number_to_precision()
|
||||
precision:
|
||||
format:
|
||||
# These five are to override number.format and are optional
|
||||
# separator:
|
||||
delimiter: ""
|
||||
# precision:
|
||||
# significant: false
|
||||
# strip_insignificant_zeros: false
|
||||
|
||||
# Used in number_to_human_size() and number_to_human()
|
||||
human:
|
||||
format:
|
||||
# These five are to override number.format and are optional
|
||||
# separator:
|
||||
delimiter: ""
|
||||
precision: 3
|
||||
significant: true
|
||||
strip_insignificant_zeros: true
|
||||
# Used in number_to_human_size()
|
||||
storage_units:
|
||||
# Storage units output formatting.
|
||||
# %u is the storage unit, %n is the number (default: 2 MB)
|
||||
format: "%n %u"
|
||||
units:
|
||||
byte:
|
||||
one: "Byte"
|
||||
other: "Bytes"
|
||||
kb: "KB"
|
||||
mb: "MB"
|
||||
gb: "GB"
|
||||
tb: "TB"
|
||||
# Used in number_to_human()
|
||||
decimal_units:
|
||||
format: "%n %u"
|
||||
# Decimal units output formatting
|
||||
# By default we will only quantify some of the exponents
|
||||
# but the commented ones might be defined or overridden
|
||||
# by the user.
|
||||
units:
|
||||
# femto: Quadrillionth
|
||||
# pico: Trillionth
|
||||
# nano: Billionth
|
||||
# micro: Millionth
|
||||
# mili: Thousandth
|
||||
# centi: Hundredth
|
||||
# deci: Tenth
|
||||
unit: ""
|
||||
# ten:
|
||||
# one: Ten
|
||||
# other: Tens
|
||||
# hundred: Hundred
|
||||
thousand: Thousand
|
||||
million: Million
|
||||
billion: Billion
|
||||
trillion: Trillion
|
||||
quadrillion: Quadrillion
|
||||
|
||||
# Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words()
|
||||
datetime:
|
||||
distance_in_words:
|
||||
half_a_minute: "half a minute"
|
||||
less_than_x_seconds:
|
||||
one: "less than 1 second"
|
||||
other: "less than %{count} seconds"
|
||||
x_seconds:
|
||||
one: "1 second"
|
||||
other: "%{count} seconds"
|
||||
less_than_x_minutes:
|
||||
one: "less than a minute"
|
||||
other: "less than %{count} minutes"
|
||||
x_minutes:
|
||||
one: "1 minute"
|
||||
other: "%{count} minutes"
|
||||
about_x_hours:
|
||||
one: "about 1 hour"
|
||||
other: "about %{count} hours"
|
||||
x_days:
|
||||
one: "1 day"
|
||||
other: "%{count} days"
|
||||
about_x_months:
|
||||
one: "about 1 month"
|
||||
other: "about %{count} months"
|
||||
x_months:
|
||||
one: "1 month"
|
||||
other: "%{count} months"
|
||||
about_x_years:
|
||||
one: "about 1 year"
|
||||
other: "about %{count} years"
|
||||
over_x_years:
|
||||
one: "over 1 year"
|
||||
other: "over %{count} years"
|
||||
almost_x_years:
|
||||
one: "almost 1 year"
|
||||
other: "almost %{count} years"
|
||||
prompts:
|
||||
year: "Year"
|
||||
month: "Month"
|
||||
day: "Day"
|
||||
hour: "Hour"
|
||||
minute: "Minute"
|
||||
second: "Seconds"
|
||||
|
||||
helpers:
|
||||
select:
|
||||
# Default value for :prompt => true in FormOptionsHelper
|
||||
prompt: "Please select"
|
||||
|
||||
# Default translation keys for submit and button FormHelper
|
||||
submit:
|
||||
create: 'Create %{model}'
|
||||
update: 'Update %{model}'
|
||||
submit: 'Save %{model}'
|
200
config/routes.rb
200
config/routes.rb
@ -1,52 +1,204 @@
|
||||
Thingspeak::Application.routes.draw do
|
||||
|
||||
# main data posts using this route
|
||||
match 'update', :to => 'channels#post_data', :as => 'update', :via => ((GET_SUPPORT) ? ['get', 'post'] : 'post')
|
||||
match 'update', :to => 'channels#post_data', :via => ((GET_SUPPORT) ? [:get, :post] : :post)
|
||||
match 's/update', :to => 'channels#post_data', :via => [:get, :post]
|
||||
|
||||
# handle subdomain routes
|
||||
match '/', :to => 'subdomains#index', :constraints => { :subdomain => 'api' }
|
||||
match 'crossdomain', :to => 'subdomains#crossdomain', :constraints => { :subdomain => 'api' }
|
||||
match 'crossdomain', :to => 'subdomains#crossdomain'
|
||||
get '/', :to => 'subdomains#index', :constraints => { :subdomain => 'api' }
|
||||
get 'crossdomain', :to => 'subdomains#crossdomain', :constraints => { :subdomain => 'api' }
|
||||
|
||||
root :to => 'pages#home'
|
||||
|
||||
resource :user_session
|
||||
resource 'account', :to => 'users'
|
||||
resources :users do
|
||||
member do
|
||||
get :reset_password
|
||||
put :change_password
|
||||
end
|
||||
resource :pages do
|
||||
collection do
|
||||
get :forgot_password
|
||||
get :home
|
||||
get :features
|
||||
get :about
|
||||
get :headers
|
||||
get :social_home
|
||||
end
|
||||
end
|
||||
|
||||
match 'users/reset_password/:id', :to => 'users#reset_password', :as => 'reset_password', :via => [:get, :post]
|
||||
patch 'users/change_password/:id', :to => 'users#change_password'
|
||||
post 'mailer/resetpassword', :to => 'mailer#resetpassword'
|
||||
|
||||
# public user profiles
|
||||
match 'account/edit_profile' => 'users#edit_profile', :as => 'edit_profile', :via => [:get, :post]
|
||||
patch 'account/update_profile' => 'users#update_profile', :as => 'update_profile'
|
||||
# users paths
|
||||
post 'users/new_api_key' => 'users#new_api_key', :as => 'user_new_api_key'
|
||||
get 'users/:id/channels(.:format)' => 'users#list_channels', :as => 'list_channels', :constraints => { :id => /.*/ }
|
||||
get 'users/:glob' => 'users#profile', :as => 'user_profile', :constraints => { :glob => /.*/ }
|
||||
|
||||
resource :user_session
|
||||
resource 'account', :to => 'users'
|
||||
resources :users
|
||||
|
||||
# social channels
|
||||
get 's/' => 'pages#social_home'
|
||||
get 's/:slug' => 'channels#social_show', :constraints => { :slug => /.*/ }
|
||||
get 'channels/social_new' => 'channels#social_new'
|
||||
|
||||
# search
|
||||
resources :tags
|
||||
|
||||
# specific feeds
|
||||
match 'channels/:channel_id/feed(s)(.:format)' => 'feed#index'
|
||||
match 'channels/:channel_id/field(s)/:field_id(.:format)' => 'feed#index'
|
||||
match 'channels/:channel_id/field(s)/:field_id/:id(.:format)' => 'feed#show'
|
||||
match 'channels/:channel_id/feed(s)/entry/:id(.:format)' => 'feed#show'
|
||||
get 'channels/:channel_id/feed(s)(.:format)' => 'feed#index'
|
||||
get 'channels/:channel_id/field(s)/:field_id(.:format)' => 'feed#index'
|
||||
get 'channels/:channel_id/field(s)/:field_id/:id(.:format)' => 'feed#show'
|
||||
get 'channels/:channel_id/feed(s)/last_average(.:format)' => 'feed#last_average'
|
||||
get 'channels/:channel_id/feed(s)/last_median(.:format)' => 'feed#last_median'
|
||||
get 'channels/:channel_id/feed(s)/last_sum(.:format)' => 'feed#last_sum'
|
||||
get 'channels/:channel_id/feed/entry/:id(.:format)' => 'feed#show' # not sure why this doesn't work with (s)
|
||||
get 'channels/:channel_id/feeds/entry/:id(.:format)' => 'feed#show' # not sure why this doesn't work with (s)
|
||||
get 'channels/:channel_id/social_feed' => 'channels#social_feed'
|
||||
get 'channels/:channel_id/feed(s)/debug' => 'feed#debug'
|
||||
|
||||
# import
|
||||
match 'channels/:channel_id/import' => 'channels#import', :as => 'channel_import'
|
||||
match 'channels/:channel_id/upload' => 'channels#upload'
|
||||
# maps
|
||||
get 'channels/:channel_id/maps/channel_show' => 'maps#channel_show'
|
||||
get 'channels/:channel_id/status/recent' => 'status#recent'
|
||||
|
||||
# nest feeds into channels
|
||||
# nest the following controllers inside channels
|
||||
resources :channels do
|
||||
collection do
|
||||
get :public
|
||||
get :watched
|
||||
end
|
||||
member do
|
||||
get :import
|
||||
post :upload
|
||||
post :clear
|
||||
put :watch
|
||||
end
|
||||
resources :feed
|
||||
|
||||
resources :feeds, :to => 'feed'
|
||||
resources :api_keys, :except => [:show, :edit]
|
||||
resources :status
|
||||
resources :statuses, :to => 'statuses'
|
||||
resources :statuses, :to => 'status'
|
||||
resources :charts
|
||||
resources :maps
|
||||
resources :channels
|
||||
resources :tags
|
||||
resources :comments
|
||||
resources :windows, :only => [:index, :update] do
|
||||
member do
|
||||
get :iframe
|
||||
get :html
|
||||
put :hide
|
||||
put :display
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
match 'login' => 'user_sessions#new', :as => :login, :via => :get
|
||||
match 'logout' => 'user_sessions#destroy', :as => :logout, :via => :delete
|
||||
match 'mailer/resetpassword', :to => 'mailer#resetpassword', :as => :resetpassword, :via => :post
|
||||
get 'channels/:channel_id/private_windows' => 'windows#private_windows'
|
||||
get 'channels/:channel_id/hidden_windows' => 'windows#hidden_windows'
|
||||
match 'channels/:channel_id/windows' => 'windows#update', :via => [:post, :put]
|
||||
|
||||
resources :comments do
|
||||
member do
|
||||
post :vote
|
||||
end
|
||||
end
|
||||
|
||||
resources :plugins do
|
||||
collection do
|
||||
get 'private_plugins'
|
||||
get 'public_plugins'
|
||||
end
|
||||
end
|
||||
|
||||
resources :devices do
|
||||
member do
|
||||
get :thingtweet_arduino_code
|
||||
get :thingtweet_arduino_select_thingtweet
|
||||
post :add_mac_address
|
||||
put :ajax_update
|
||||
end
|
||||
end
|
||||
|
||||
resources :pipes
|
||||
|
||||
# twitter status update (version 1)
|
||||
match 'apps/thingtweet/1/statuses/update(.:format)' => 'thingtweets#update', :via => [:get, :post]
|
||||
match 'apps/thingtweet/1/statuses/update_debug(.:format)' => 'thingtweets#update_debug', :via => [:get, :post]
|
||||
|
||||
|
||||
# thinghttp action
|
||||
match 'apps/thinghttp/send_request' => 'thinghttp#send_request', :via => [:get, :post]
|
||||
|
||||
# process responses for tweetcontrol
|
||||
match 'apps/tweetcontrol/process_response' => 'tweetcontrol#process_response', :via => [:get, :post]
|
||||
|
||||
# apps and nested controllers
|
||||
scope 'apps' do
|
||||
resources :thingtweets do
|
||||
collection do
|
||||
get :authorize_response
|
||||
end
|
||||
member do
|
||||
put :new_api_key
|
||||
end
|
||||
end
|
||||
resources :thinghttp do
|
||||
resources :header
|
||||
member do
|
||||
put :new_api_key
|
||||
end
|
||||
end
|
||||
resources :talkbacks do
|
||||
member do
|
||||
put :new_api_key
|
||||
end
|
||||
end
|
||||
resources :tweetcontrol
|
||||
resources :reacts
|
||||
resources :scheduled_thinghttps
|
||||
end
|
||||
|
||||
# talkback api
|
||||
delete 'talkbacks/:id/commands', :to => 'commands#destroy_all'
|
||||
delete 'talkbacks/:id/commands/destroy_all', :to => 'commands#destroy_all'
|
||||
resources :talkbacks do
|
||||
resources :commands do
|
||||
collection do
|
||||
match :execute, :via => [:post, :get]
|
||||
delete :destroy_all
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
resources :apps, :only => ['index']
|
||||
|
||||
get 'admin', :to => 'admin#index', :as => 'admin'
|
||||
namespace :admin do
|
||||
resources :users
|
||||
resources :channels
|
||||
resources :twitter_accounts
|
||||
resources :thinghttps
|
||||
resources :devices
|
||||
resources :failedlogins
|
||||
resources :emails
|
||||
end
|
||||
|
||||
# app shortcuts
|
||||
get 'apps/thingtweet', :to => 'thingtweets#index'
|
||||
get 'apps/react', :to => 'react#index'
|
||||
|
||||
# docs
|
||||
get 'docs(/:action)', :to => 'docs'
|
||||
|
||||
# users
|
||||
match 'login' => 'user_sessions#new', :as => :login, :via => [:get, :post]
|
||||
match 'logout' => 'user_sessions#destroy', :as => :logout, :via => [:get, :post]
|
||||
match 'forgot_password', :to => 'users#forgot_password', :as => 'forgot_password', :via => [:get, :post]
|
||||
|
||||
# add support for CORS preflighting (matches any OPTIONS route up to 4 levels deep)
|
||||
# examples: /talkbacks, /talkbacks/4, /talkbacks/4/commands, /talkbacks/4/commands/6
|
||||
match '/:foo(/:foo(/:foo)(/:foo))', :to => 'cors#preflight', :via => 'options'
|
||||
|
||||
#match ':controller(/:action(/:id(.:format)))', :via => :all
|
||||
end
|
||||
|
||||
|
Reference in New Issue
Block a user