blob: 367277229f37dd2fa4a61d51dabe4827a12e1f87 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_WEB_VIEW_PUBLIC_CWV_TRANSLATION_CONTROLLER_H_
#define IOS_WEB_VIEW_PUBLIC_CWV_TRANSLATION_CONTROLLER_H_
#import <Foundation/Foundation.h>
#import "cwv_export.h"
NS_ASSUME_NONNULL_BEGIN
@class CWVTranslationLanguage;
@class CWVTranslationPolicy;
@protocol CWVTranslationControllerDelegate;
// The error domain for translation errors.
FOUNDATION_EXPORT CWV_EXPORT NSErrorDomain const CWVTranslationErrorDomain;
// Possible error codes during translation.
typedef NS_ENUM(NSInteger, CWVTranslationError) {
// No error.
CWVTranslationErrorNone = 0,
// No connectivity.
CWVTranslationErrorNetwork,
// The translation script failed to initialize.
CWVTranslationErrorInitializationError,
// The page's language could not be detected.
CWVTranslationErrorUnknownLanguage,
// The server detected a language that the browser does not know.
CWVTranslationErrorUnsupportedLanguage,
// The original and target languages are the same.
CWVTranslationErrorIdenticalLanguages,
// An error was reported by the translation script during translation.
CWVTranslationErrorTranslationError,
// The library doesn't finish the translation.
CWVTranslationErrorTranslationTimeout,
// The library raises an unexpected exception.
CWVTranslationErrorUnexpectedScriptError,
// The library is blocked because of bad origin.
CWVTranslationErrorBadOrigin,
// Loader fails to load a dependent JavaScript.
CWVTranslationErrorScriptLoadError,
};
// Allows page translation from one language to another.
CWV_EXPORT
@interface CWVTranslationController : NSObject
// Delegate to receive translation callbacks.
@property(nullable, nonatomic, weak) id<CWVTranslationControllerDelegate>
delegate;
// The set of supported languages for translation.
@property(nonatomic, readonly)
NSSet<CWVTranslationLanguage*>* supportedLanguages;
- (instancetype)init NS_UNAVAILABLE;
// Begins translation on the current page from |sourceLanguage| to
// |targetLanguage|. These language parameters must be chosen from
// |supportedLanguages|. Set |userInitiated| to YES if translation
// is a result of explicit user action. |userInitiated| will be
// passed along to the CWVTranslationControllerDelegate methods.
// Results in a No-op if there is no current page.
- (void)translatePageFromLanguage:(CWVTranslationLanguage*)sourceLanguage
toLanguage:(CWVTranslationLanguage*)targetLanguage
userInitiated:(BOOL)userInitiated;
// Reverts any translations done back to the original page language.
// Note that the original page language may be different from |sourceLanguage|
// passed to |translatePageFromLanguage:toLanguage:userInitiated:| above.
// Results in No-op if the page was never translated.
- (void)revertTranslation;
// Sets or retrieves translation policies associated with a specified language.
// |pageLanguage| should be the language code of the language.
- (void)setTranslationPolicy:(CWVTranslationPolicy*)policy
forPageLanguage:(CWVTranslationLanguage*)pageLanguage;
- (CWVTranslationPolicy*)translationPolicyForPageLanguage:
(CWVTranslationLanguage*)pageLanguage;
// Sets or retrieves translation policies associated with a specified page.
// |pageHost| should be the hostname of the website. Must not be empty.
- (void)setTranslationPolicy:(CWVTranslationPolicy*)policy
forPageHost:(NSString*)pageHost;
- (CWVTranslationPolicy*)translationPolicyForPageHost:(NSString*)pageHost;
@end
NS_ASSUME_NONNULL_END
#endif // IOS_WEB_VIEW_PUBLIC_CWV_TRANSLATION_CONTROLLER_H_