import React, { useState, useEffect } from 'react' const ActionPerformer = ({ actionHook, LoadingButton, SuccessButton, ErrorButton, errorCallback, completeCallback }) => { // Call our useFetch() hook to start performing our action (i.e. importing a template) const { loading, data, error } = actionHook() // Check if we've successfully completed out action: if (!loading && !error) { // We've successfully imported the template, bubble up a success call after a short timeout // so we can show an "imported" state on the button briefly: setTimeout(() => { completeCallback(data) }, 500) return SuccessButton } // Check if we had an error performing the action: if (error) { setTimeout(() => { errorCallback(data) }, 100) return ErrorButton } // The default state of this component is loading, so we show that loading button here.. return LoadingButton } /** * Generic user action provider. * Used for things like "Import Template" and "Import Photo" buttons * * @param DefaultButton * @param CompletedButton * @param ProcessingButton * @param isAlreadyCompleted * @param completedCallback * @param actionConfirmationMessage * * @returns {*} * @constructor */ const ButtonActionProvider = ({ DefaultButton, CompletedButton, LoadingButton, ErrorButton, SuccessButton, actionHook, isAlreadyCompleted = false, completedCallback = null, errorCallback = null, actionConfirmationMessage = null }) => { const [isProcessing, setIsProcessing] = useState(false) const [isCompleted, setIsCompleted] = useState(isAlreadyCompleted) const [error, setError] = useState(null) useEffect(() => { if (isCompleted && completedCallback && !isAlreadyCompleted) { // We fire off an optional completed callback, if the component didn't start in the completed state. completedCallback(isCompleted) } }, [isCompleted]) useEffect(() => { if (error && errorCallback) { // We fire off an optional error callback, with the error data set below errorCallback(error) } }, [error]) useEffect(() => { // If our parent component resets our completed status prop, we update our local state to reflect this: setIsCompleted(isAlreadyCompleted) }, [isAlreadyCompleted]) // Check if this action has been completed: if (isCompleted) { return CompletedButton } // Check if we're currently performing the action: if (isProcessing) { // As soon as this "Processing" component renders we expect the ajax action to start running. // We provide a "completeCallback" that this "Processing" component can call once it's done it's thing. return ( { // If our action returns an error, we swap back to our default state so the user can try again setTimeout(() => { setIsProcessing(false) }, 500) setError(data) }} completeCallback={(data) => { setIsProcessing(false) setIsCompleted(data) }} /> ) } // Default state is not processing/completed, so we show a default button return React.cloneElement(DefaultButton, { onClick: (event) => { if (actionConfirmationMessage) { if (!confirm(actionConfirmationMessage)) { // user has denied the confirmation dialog, prevent calling our processing action. event.preventDefault() return false } } setIsProcessing(true) } }) } export default ButtonActionProvider Translation - TranslationSUB
TranslationSUB

Translation

Languages

English
Japanese
Portuguese

English

U.S. and England variations

Japanese
Portuguese

U.S. and Brazil and Portugal variations

Categories

Manual・Instructions
Website・Social Media
Contract
Advertising
Business
Legal
Culture・Art
Video
Publication
Sales
Report
And More…

How it Works

1. Contact Us
2. Place Order
3. Translation & Proofreading
4. Native Double-Check
5. Delivery
6. Follow-up
1. Contact Us
2. Place Order
3. Translation & Proofreading
4. Native Double-Check
5. Delivery
6. Follow-up

Our Pricing

English to Japanese
¥ 6,600~
1 Page (300 words)
English to Portuguese
¥ 10,500~
1 Page (300 words)
Japanese to English
¥ 8,400~
1 Page (400 Characters)
Japanese to Portuguese
¥ 14,000~
1 Page (400 Characters)
Portuguese to English
¥ 9,600~
1 Page (300 words)
Portuguese to Japanese
¥ 9,900~
1 Page (300 words)
  • The above prices do NOT include tax, layout adjustments, or express delivery fees.
  • ALL OF OUR TRANSLATIONS include TRANSLATION, PROOFREADING and NATIVE DOUBLE-CHECK.
  • All of our translations are human-made.
  • Cost estimates are based on the volume, content of source material and expected delivery time.
  • For a detailed quote, please Contact us

Payment Method

In principle, we accept payments via bank transfer/deposit, credit/debit card, (Visa, MasterCard, American Express, JCB, Diners Club, Discover), PayPal and Wise (former TransferWise).

  • Additional fees may apply according to your chosen payment method.
  • Depending on your countrypayment methods may be limited. Please, Consult us.
  • For orders within Brazil, we accept payments via bank transfer/deposit only.

Cancellation

In principle, we do not accept cancellations after the order confirmation.

Refund

We do not offer refunds after payment.

Revision

We offer a one-time free revision for defective translations. This service is available for 30 days counted from the delivery day of the order. Other types of revision may incur additional charges.

Reach out so we can work together to drive more
customers to your products and services through our
multilingual language support