@antscorp/antsomi-ui 1.3.5-beta.849 → 1.3.5-beta.850

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import type { PayloadInfo } from '@antscorp/antsomi-ui/es/types';
2
3
  export type TDisplayFormat = 'number' | 'percentage' | 'currency' | 'datetime';
3
4
  type DisplayFormatProps = {
@@ -0,0 +1,2 @@
1
+ import { EditingListProps } from './types';
2
+ export declare const EditingList: (props: EditingListProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { globalToken } from '@antscorp/antsomi-ui/es/constants';
3
+ import { Flex, List, Typography } from 'antd';
4
+ import { EditingListRoot, AmountSelected, StyledAddBtn, StyledList } from './styled';
5
+ import { useMemo, useState } from 'react';
6
+ import { InputSearch } from '../InputSearch';
7
+ import { PopoverSelect } from '../SearchPopover';
8
+ import { AddIcon, DeleteRemoveTrashIcon } from '../../icons';
9
+ import { Button } from '../../atoms';
10
+ import { searchStringQuery } from '@antscorp/antsomi-ui/es/utils';
11
+ import { useDebounce } from '@antscorp/antsomi-ui/es/hooks/useDebounceV2';
12
+ import { EmptyData } from '../EmptyData';
13
+ import { translate, translations } from '@antscorp/antsomi-locales';
14
+ import clsx from 'clsx';
15
+ export const EditingList = (props) => {
16
+ const { addBtnLabel = 'Add', showNum = true, options = [], selected = [], title, removable = true, className, onChange, } = props;
17
+ const [search, setSearch] = useState('');
18
+ const debounceSearch = useDebounce(search);
19
+ const selectedOptions = useMemo(() => options.filter(opt => selected.includes(opt.key)), [selected, options]);
20
+ const filterdOptions = useMemo(() => selectedOptions.filter(opt => {
21
+ let content = `${opt.key}`;
22
+ if (typeof opt.label === 'string') {
23
+ content += opt.label;
24
+ }
25
+ return searchStringQuery(content, debounceSearch);
26
+ }), [selectedOptions, debounceSearch]);
27
+ const isSelectAll = selectedOptions.length === options.length;
28
+ const handleRemove = (removedKey) => {
29
+ const selectedKeys = selectedOptions.filter(opt => opt.key !== removedKey).map(opt => opt.key);
30
+ onChange?.(selectedKeys);
31
+ };
32
+ const renderLabel = (label) => {
33
+ if (typeof label === 'string') {
34
+ return _jsx(Typography.Text, { ellipsis: { tooltip: true }, children: label });
35
+ }
36
+ return label;
37
+ };
38
+ return (_jsxs(EditingListRoot, { className: clsx(className), vertical: true, gap: 8, children: [title && (_jsxs(Flex, { align: "center", gap: 8, children: [_jsx(Typography.Text, { strong: true, children: title }), showNum && (_jsxs(AmountSelected, { children: ["(", selectedOptions.length, "/", options.length, ")"] }))] })), _jsx(InputSearch, { placeholder: "Search...", onChange: e => setSearch(e.target.value) }), filterdOptions.length > 0 ? (_jsx(StyledList, { split: false, children: filterdOptions.map(opt => (_jsxs(List.Item, { children: [renderLabel(opt.label), removable && (_jsx(Button, { className: "delete-btn", type: "link", icon: _jsx(DeleteRemoveTrashIcon, { size: 24, color: globalToken?.colorText }), onClick: () => handleRemove(opt.key) }))] }, opt.key))) })) : (_jsx(EmptyData, { showIcon: false, description: translate(translations.noData).toString() })), !isSelectAll && (_jsx(PopoverSelect, { options: options, selected: selected, onApply: onChange, children: _jsxs(StyledAddBtn, { role: "button", children: [_jsx(AddIcon, {}), addBtnLabel] }) }))] }));
39
+ };
@@ -0,0 +1,2 @@
1
+ export { EditingList } from './EditingList';
2
+ export type { EditingListProps } from './types';
@@ -0,0 +1 @@
1
+ export { EditingList } from './EditingList';
@@ -0,0 +1,6 @@
1
+ /// <reference types="react" />
2
+ import { List } from 'antd';
3
+ export declare const EditingListRoot: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("antd").FlexProps<import("antd/es/_util/type").AnyObject> & import("react").RefAttributes<HTMLElement>>, any, {}, never>;
4
+ export declare const StyledList: import("styled-components").StyledComponent<typeof List, any, {}, never>;
5
+ export declare const StyledAddBtn: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("antd").FlexProps<import("antd/es/_util/type").AnyObject> & import("react").RefAttributes<HTMLElement>>, any, {}, never>;
6
+ export declare const AmountSelected: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("antd/es/typography/Text").TextProps & import("react").RefAttributes<HTMLSpanElement>>, any, {}, never>;
@@ -0,0 +1,54 @@
1
+ import { globalToken } from '@antscorp/antsomi-ui/es/constants';
2
+ import { Flex, List, Typography } from 'antd';
3
+ import styled from 'styled-components';
4
+ export const EditingListRoot = styled(Flex) ``;
5
+ export const StyledList = styled(List) `
6
+ &.antsomi-list {
7
+ .antsomi-list-item {
8
+ display: flex;
9
+ align-items: center;
10
+ justify-content: space-between;
11
+ padding: 0;
12
+ margin: 8px 0;
13
+ min-height: 30px;
14
+ flex-wrap: nowrap;
15
+ padding-inline: 10px;
16
+ border-radius: 8px;
17
+
18
+ &:first-child {
19
+ margin-top: 0px;
20
+ }
21
+
22
+ &:last-child {
23
+ margin-bottom: 0px;
24
+ }
25
+
26
+ .delete-btn {
27
+ display: none !important;
28
+ flex-shrink: 0;
29
+ }
30
+
31
+ &:hover {
32
+ background-color: ${globalToken?.blue};
33
+
34
+ .delete-btn {
35
+ display: flex !important;
36
+ }
37
+ }
38
+ }
39
+ }
40
+ `;
41
+ export const StyledAddBtn = styled(Flex) `
42
+ color: ${globalToken?.colorPrimary};
43
+ cursor: pointer;
44
+ font-weight: bold;
45
+ align-items: center;
46
+ justify-content: space-between;
47
+ gap: 4px;
48
+ width: fit-content;
49
+ `;
50
+ export const AmountSelected = styled(Typography.Text) `
51
+ &.antsomi-typography {
52
+ font-size: 11px;
53
+ }
54
+ `;
@@ -0,0 +1,14 @@
1
+ /// <reference types="react" />
2
+ export type EditingListProps = {
3
+ title?: React.ReactNode;
4
+ addBtnLabel?: string;
5
+ options?: {
6
+ key: string;
7
+ label: React.ReactNode;
8
+ }[];
9
+ selected?: string[];
10
+ showNum?: boolean;
11
+ removable?: boolean;
12
+ className?: string;
13
+ onChange?: (selected: string[]) => void;
14
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -1,20 +1,23 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // Libraries
3
- import { useContext } from 'react';
3
+ import { useContext, useState } from 'react';
4
4
  // Context
5
5
  import { SelectAccountContext } from './context';
6
6
  // Components
7
7
  import { ButtonViewAllStyled, ViewAllWrapper } from './styled';
8
- import { Popover } from '../../atoms';
8
+ import { Icon, Input, Popover } from '../../atoms';
9
9
  import AccountChip from './AccountChip';
10
+ import { searchStringQuery } from '@antscorp/antsomi-ui/es/utils';
10
11
  const ButtonViewAll = () => {
11
12
  const { state, dispatch } = useContext(SelectAccountContext);
12
- const { usersSelected, nameKey, userIdKey, users, styles } = state;
13
+ const { usersSelected, nameKey, userIdKey, users, styles, showSearchViewAll } = state;
14
+ const [search, setSearch] = useState('');
15
+ const searchedUsers = usersSelected.filter(user => searchStringQuery(user?.[nameKey], search));
13
16
  const handleRemove = ({ userId, index }) => {
14
17
  dispatch({ type: 'REMOVE_USER', payload: { userId, index } });
15
18
  };
16
- const contentViewAll = () => (_jsxs(ViewAllWrapper, { children: [state.showOwnerDefault && _jsx(AccountChip, { label: "Owner", user: {}, value: "owner", disabled: true }), state.type === 'group'
17
- ? usersSelected?.map((id, index) => {
19
+ const contentViewAll = () => (_jsxs(ViewAllWrapper, { children: [showSearchViewAll && (_jsx(Input, { value: search, placeholder: "Search", suffix: _jsx(Icon, { type: "icon-ants-search-2" }), onAfterChange: value => setSearch(value), debounce: 500 })), state.showOwnerDefault && _jsx(AccountChip, { label: "Owner", user: {}, value: "owner", disabled: true }), state.type === 'group'
20
+ ? searchedUsers?.map((id, index) => {
18
21
  const group = state.listAccountGroup.find(u => u?.[state?.groupIdKey] === id);
19
22
  if (!group) {
20
23
  const user = users.find(u => u?.[userIdKey] === id);
@@ -24,7 +27,7 @@ const ButtonViewAll = () => {
24
27
  }
25
28
  return (_jsx(AccountChip, { user: group, value: group?.[state.groupIdKey], label: group?.[state?.groupNameKey], onRemove: () => handleRemove({ userId: group?.[state.groupIdKey], index }) }, group?.[state.groupIdKey]));
26
29
  })
27
- : usersSelected?.map((id, index) => {
30
+ : searchedUsers?.map((id, index) => {
28
31
  const user = users.find(u => u?.[userIdKey] === id);
29
32
  return (_jsx(AccountChip, { user: user, value: user?.[userIdKey], label: user?.[nameKey], onRemove: () => handleRemove({ userId: user?.[userIdKey], index }) }, user?.[userIdKey]));
30
33
  })] }));
@@ -10,10 +10,11 @@ import ButtonAdd from './ButtonAdd';
10
10
  import ButtonViewAll from './ButtonViewAll';
11
11
  export const Content = () => {
12
12
  const { state, dispatch } = useContext(SelectAccountContext);
13
- const { usersSelected, nameKey, userIdKey, users, disabled, className, styles } = state;
13
+ const { usersSelected, nameKey, userIdKey, users, disabled, className, styles, hideAddButton } = state;
14
14
  const handleRemove = ({ userId, index }) => {
15
15
  dispatch({ type: 'REMOVE_USER', payload: { userId, index } });
16
16
  };
17
+ const isHideAddButton = hideAddButton || state?.isViewMode || (state?.onlyOne && usersSelected?.length);
17
18
  return (_jsxs(Wrapper, { className: `select-account ${className}`, style: { ...(styles?.wrapper || {}) }, disabled: !!disabled, children: [state.showOwnerDefault && _jsx(AccountChip, { label: "Owner", user: {}, value: "owner", disabled: true }), state.type === 'group'
18
19
  ? usersSelected?.map((id, index) => {
19
20
  if (index >= state?.limitShow)
@@ -34,5 +35,5 @@ export const Content = () => {
34
35
  if (!user)
35
36
  return null;
36
37
  return (_jsx(AccountChip, { user: user, value: user?.[userIdKey], label: user?.[nameKey], onRemove: () => handleRemove({ userId: user?.[userIdKey], index }) }, user?.[userIdKey]));
37
- }), state?.usersSelected?.length > state?.limitShow && _jsx(ButtonViewAll, {}), !state?.isViewMode && (!state?.onlyOne || !usersSelected?.length) && _jsx(ButtonAdd, {})] }));
38
+ }), state?.usersSelected?.length > state?.limitShow && _jsx(ButtonViewAll, {}), isHideAddButton ? null : _jsx(ButtonAdd, {})] }));
38
39
  };
@@ -136,6 +136,10 @@ export const ViewAllWrapper = styled.div `
136
136
  flex-wrap: wrap;
137
137
  max-width: 300px;
138
138
  padding: 15px;
139
+
140
+ .input__wrapper {
141
+ width: 100%;
142
+ }
139
143
  `;
140
144
  export const ItemOnlyOne = styled.div `
141
145
  padding: 8px 10px;
@@ -31,6 +31,8 @@ export type SelectAccountProps = {
31
31
  disabledAccount?: any[];
32
32
  limit?: number;
33
33
  limitShow?: number;
34
+ hideAddButton?: boolean;
35
+ showSearchViewAll?: boolean;
34
36
  className?: string;
35
37
  styles?: {
36
38
  wrapper?: React.CSSProperties;
@@ -49,6 +49,7 @@ export { VirtualizedMenu } from './VirtualizedMenu';
49
49
  export { SearchPopover, PopoverAddField, PopoverSelect } from './SearchPopover';
50
50
  export { CalendarSelection, CalendarSelectionConstants, CalendarSelectionUtils, } from './CalendarSelection';
51
51
  export { RequestAccess } from './RequestAccess';
52
+ export { EditingList } from './EditingList';
52
53
  export * from './EmptyData';
53
54
  export * from './PreviewModal';
54
55
  export * from './Drawer';
@@ -85,3 +86,4 @@ export type { InputDropdownProps } from './Dropdown';
85
86
  export type { SelectProps } from './Select';
86
87
  export type { EditorTabItem } from './EditorTab';
87
88
  export type { CalendarSelectionValue } from './CalendarSelection';
89
+ export type { EditingListProps } from './EditingList';
@@ -49,6 +49,7 @@ export { VirtualizedMenu } from './VirtualizedMenu';
49
49
  export { SearchPopover, PopoverAddField, PopoverSelect } from './SearchPopover';
50
50
  export { CalendarSelection, CalendarSelectionConstants, CalendarSelectionUtils, } from './CalendarSelection';
51
51
  export { RequestAccess } from './RequestAccess';
52
+ export { EditingList } from './EditingList';
52
53
  export * from './EmptyData';
53
54
  export * from './PreviewModal';
54
55
  export * from './Drawer';
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  // Libraries
3
- import { memo, useCallback, useMemo, useRef, useState } from 'react';
3
+ import { memo, useCallback, useEffect, useMemo, useRef, useState, } from 'react';
4
4
  import { useContextSelector } from 'use-context-selector';
5
5
  import AntsProcessingNotification from '@antscorp/processing-notification';
6
6
  import { cloneDeep, get, isString, merge, omit } from 'lodash';
@@ -32,6 +32,9 @@ import { useCustomRouter, useDeepCompareEffect, useDeepCompareMemo, useMutationO
32
32
  import { HOME_MENU_ITEMS } from '../../organism/LeftMenu/constants';
33
33
  import { RecommendationWorkspace } from './components';
34
34
  import i18nInstance from '@antscorp/antsomi-ui/es/locales/i18n';
35
+ import { RequestAccess } from '../../molecules';
36
+ import { permissionService } from '@antscorp/antsomi-ui/es/services/Permission';
37
+ import { handleError } from '@antscorp/antsomi-ui/es/utils';
35
38
  const { DATAFLOWS, APP_ANTALYSER } = APP_CODES;
36
39
  export const Layout = memo(props => {
37
40
  const { leftMenuProps, headerProps = {}, workspaceProps, contentWrapperProps, processingNotificationProps, children, onActiveMenuChange, } = props;
@@ -39,7 +42,7 @@ export const Layout = memo(props => {
39
42
  // Hooks
40
43
  const appConfig = useContextSelector(AppConfigContext, state => state);
41
44
  const { auth, languageCode, appCode, permissionDomain: configPermissionDomain, iamDomain: configIamDomain, env, } = appConfig;
42
- const { token, userId, portalId } = auth || {};
45
+ const { token, userId, portalId, accountId } = auth || {};
43
46
  const leftMenu = useLayoutStore(store => store.state.leftMenu);
44
47
  const header = useLayoutStore(store => store.state.header);
45
48
  const contentWrapper = useLayoutStore(store => store.state.contentWrapper);
@@ -55,6 +58,7 @@ export const Layout = memo(props => {
55
58
  const [activePageTitle, setActivePageTitle] = useState('');
56
59
  const [isAccessDenied, setIsAccessDenied] = useState(false);
57
60
  const [isLoadingLayout, setLoadingLayout] = useState(true);
61
+ const [isIpDenied, setIsIpDenied] = useState(false);
58
62
  const notificationWrapperRef = useRef(null);
59
63
  const timeoutLoadingLayout = useRef(null);
60
64
  useMutationObserver(() => {
@@ -70,6 +74,41 @@ export const Layout = memo(props => {
70
74
  attributeOldValue: true,
71
75
  characterDataOldValue: true,
72
76
  });
77
+ const checkIpRestriction = useCallback(async () => {
78
+ try {
79
+ const hasAccess = await permissionService.checkIpAccess({
80
+ token,
81
+ userId,
82
+ accountId,
83
+ domain: configPermissionDomain || 'https://sandbox-permission.ants.vn',
84
+ });
85
+ // const hasAccess = res.data?.data?.hasAccess;
86
+ if (!hasAccess && !isIpDenied)
87
+ setIsIpDenied(true);
88
+ if (hasAccess && isIpDenied)
89
+ setIsIpDenied(false);
90
+ return hasAccess;
91
+ }
92
+ catch (error) {
93
+ handleError(error);
94
+ }
95
+ }, [accountId, configPermissionDomain, isIpDenied, token, userId]);
96
+ useEffect(() => {
97
+ const intervalId = setInterval(() => {
98
+ checkIpRestriction();
99
+ }, 3000);
100
+ return () => {
101
+ clearInterval(intervalId);
102
+ };
103
+ }, [checkIpRestriction]);
104
+ const handleRequestAccessIP = async () => {
105
+ await permissionService.requestAccess({
106
+ env: env || 'development',
107
+ accountId,
108
+ token,
109
+ userId,
110
+ });
111
+ };
73
112
  // Memo
74
113
  const showOnlyContent = useDeepCompareMemo(() => props.onlyContent ?? onlyContent, [onlyContent, props.onlyContent]);
75
114
  const permissionDomain = useDeepCompareMemo(() => {
@@ -319,5 +358,5 @@ export const Layout = memo(props => {
319
358
  ...mergeLeftMenuProps.customization,
320
359
  // If user has access denied, disable expandable
321
360
  showButtonExpand: !isAccessDenied && mergeLeftMenuProps.customization?.showButtonExpand,
322
- }, appConfig: leftMenuAppConfig, onActiveMenuCodeChange: onActiveMenuCodeChange }), _jsx(ContentWrapper, { "$noPadding": noPadding, "$noSpaceTopContent": noSpaceTopContent, "$showOnlyContent": showOnlyContent, ...mergeContentWrapperProps, children: activeMenu?.menu_item_code === HOME_MENU_ITEMS.RECOMMENDATION ? (_jsx("div", { className: "layout-body__content", children: _jsx(RecommendationWorkspace, {}) })) : (_jsx("div", { className: `layout-body__content ${workspaceProps?.className || ''}`, ...mergeWorkSpaceProps, children: isLoadingLayout ? (_jsx(LayoutLoading, { spinning: true })) : (_jsxs(_Fragment, { children: [_jsx(NotificationWrapper, { className: "process-notification", ref: notificationWrapperRef, children: showNotification && (_jsx(AntsProcessingNotification, { ...antsProcessingNotificationConfig, callback: handleCallbackNotify })) }), _jsx(ChildrenWrapper, { ...workspaceContentProps, children: isAccessDenied ? (_jsx(AccessDenied, { onClickRequestAccess: onClickRequestAccess, onClickSwitchAccount: onClickSwitchAccount })) : (_jsx("div", { children: children })) })] })) })) })] })] }));
361
+ }, appConfig: leftMenuAppConfig, onActiveMenuCodeChange: onActiveMenuCodeChange }), _jsx(ContentWrapper, { "$noPadding": noPadding, "$noSpaceTopContent": noSpaceTopContent, "$showOnlyContent": showOnlyContent, ...mergeContentWrapperProps, children: activeMenu?.menu_item_code === HOME_MENU_ITEMS.RECOMMENDATION ? (_jsx("div", { className: "layout-body__content", children: _jsx(RecommendationWorkspace, {}) })) : (_jsx("div", { className: `layout-body__content ${workspaceProps?.className || ''}`, ...mergeWorkSpaceProps, children: isLoadingLayout ? (_jsx(LayoutLoading, { spinning: true })) : (_jsxs(_Fragment, { children: [_jsx(NotificationWrapper, { className: "process-notification", ref: notificationWrapperRef, children: showNotification && (_jsx(AntsProcessingNotification, { ...antsProcessingNotificationConfig, callback: handleCallbackNotify })) }), _jsx(ChildrenWrapper, { ...workspaceContentProps, children: isAccessDenied ? (_jsx(AccessDenied, { onClickRequestAccess: onClickRequestAccess, onClickSwitchAccount: onClickSwitchAccount })) : isIpDenied ? (_jsx(RequestAccess, { deniedTitle: "IP Address Denied", onRequest: handleRequestAccessIP, onSwitchAccount: onClickSwitchAccount })) : (_jsx("div", { children: children })) })] })) })) })] })] }));
323
362
  }, (prevProps, nextProps) => isEqual(prevProps, nextProps));
@@ -3,4 +3,5 @@
3
3
  * Asynchronously loads the component for TemplateListing
4
4
  *
5
5
  */
6
+ /// <reference types="react" />
6
7
  export declare const TemplateListing: (props: import("./types").TemplateListingProps<{}>) => JSX.Element;
@@ -2688,5 +2688,18 @@
2688
2688
  "_ZALO_TEMP_SELECT_1": "Various styles by Zalo Official Account",
2689
2689
  "_ZALO_TEMP_SELECT_2": "These templates are special for Zalo Official Account only. Click ",
2690
2690
  "_ZALO_TEMP_SELECT_3": "here",
2691
- "_ZALO_TEMP_SELECT_4": "to create a destination."
2691
+ "_ZALO_TEMP_SELECT_4": "to create a destination.",
2692
+ "_USER_GUIDE_IP_RESTRICTION_IP_ADDRESS": "Enter a single IP address (192.168.1.1) or a range (192.168.1.1 - 192.168.1.10) ",
2693
+ "_TITLE_IP_RESTRICTION_SPECIFIC_ACCOUNTS": "Specific accounts",
2694
+ "_ERROR_IP_RESTRICTION_ADD_ACCOUNT": "Please select at least one account, or select all accounts instead",
2695
+ "_USER_GUIDE_IP_RESTRICTION_GUIDE_1": "What occurs when an account is restricted to a specific IP address?",
2696
+ "_USER_GUIDE_IP_RESTRICTION_GUIDE_2": "This account accesses the CDP only via a specific IP address. If you create an IP address and apply it to all accounts on the portal, access will be restricted for all accounts, including any new ones created in the future.",
2697
+ "_USER_GUIDE_IP_RESTRICTION_GUIDE_3": "Add accounts you want to restrict from the popup",
2698
+ "_USER_GUIDE_IP_RESTRICTION_GUIDE_4": "How to generate multiple IPs or ranges at the same time",
2699
+ "_USER_GUIDE_IP_RESTRICTION_GUIDE_5": "It's simple: just enter multiple single IPs or ranges separated by commas. Ex: 192.168.1.1, 192.168.1.5, 192.168.1.7 - 192.168.1.8",
2700
+ "_USER_GUIDE_IP_RESTRICTION_GUIDE_6": "How to restrict access for specified accounts",
2701
+ "_TITLE_IP_RESTRICTION_IP_ADDRESS": "IP address",
2702
+ "_USER_GUIDE_IP_RESTRICTION_ENTER_ALLOW_IP": "Enter allowed IPv4 or IPv6 address",
2703
+ "_USER_GUIDE_IP_RESTRICTION_DESCRIPTION": "Describe you IP address",
2704
+ "_USER_GUIDE_IP_RESTRICTION_GUIDE_7": "Click <strong>Save</strong> to confirm your changes"
2692
2705
  }
@@ -2691,6 +2691,19 @@ export declare const translationsJson: {
2691
2691
  _ZALO_TEMP_SELECT_2: string;
2692
2692
  _ZALO_TEMP_SELECT_3: string;
2693
2693
  _ZALO_TEMP_SELECT_4: string;
2694
+ _USER_GUIDE_IP_RESTRICTION_IP_ADDRESS: string;
2695
+ _TITLE_IP_RESTRICTION_SPECIFIC_ACCOUNTS: string;
2696
+ _ERROR_IP_RESTRICTION_ADD_ACCOUNT: string;
2697
+ _USER_GUIDE_IP_RESTRICTION_GUIDE_1: string;
2698
+ _USER_GUIDE_IP_RESTRICTION_GUIDE_2: string;
2699
+ _USER_GUIDE_IP_RESTRICTION_GUIDE_3: string;
2700
+ _USER_GUIDE_IP_RESTRICTION_GUIDE_4: string;
2701
+ _USER_GUIDE_IP_RESTRICTION_GUIDE_5: string;
2702
+ _USER_GUIDE_IP_RESTRICTION_GUIDE_6: string;
2703
+ _TITLE_IP_RESTRICTION_IP_ADDRESS: string;
2704
+ _USER_GUIDE_IP_RESTRICTION_ENTER_ALLOW_IP: string;
2705
+ _USER_GUIDE_IP_RESTRICTION_DESCRIPTION: string;
2706
+ _USER_GUIDE_IP_RESTRICTION_GUIDE_7: string;
2694
2707
  global: {
2695
2708
  minus: string;
2696
2709
  plus: string;
@@ -6068,6 +6081,19 @@ export declare const translationsJson: {
6068
6081
  _ZALO_TEMP_SELECT_2: string;
6069
6082
  _ZALO_TEMP_SELECT_3: string;
6070
6083
  _ZALO_TEMP_SELECT_4: string;
6084
+ _USER_GUIDE_IP_RESTRICTION_IP_ADDRESS: string;
6085
+ _TITLE_IP_RESTRICTION_SPECIFIC_ACCOUNTS: string;
6086
+ _ERROR_IP_RESTRICTION_ADD_ACCOUNT: string;
6087
+ _USER_GUIDE_IP_RESTRICTION_GUIDE_1: string;
6088
+ _USER_GUIDE_IP_RESTRICTION_GUIDE_2: string;
6089
+ _USER_GUIDE_IP_RESTRICTION_GUIDE_3: string;
6090
+ _USER_GUIDE_IP_RESTRICTION_GUIDE_4: string;
6091
+ _USER_GUIDE_IP_RESTRICTION_GUIDE_5: string;
6092
+ _USER_GUIDE_IP_RESTRICTION_GUIDE_6: string;
6093
+ _TITLE_IP_RESTRICTION_IP_ADDRESS: string;
6094
+ _USER_GUIDE_IP_RESTRICTION_ENTER_ALLOW_IP: string;
6095
+ _USER_GUIDE_IP_RESTRICTION_DESCRIPTION: string;
6096
+ _USER_GUIDE_IP_RESTRICTION_GUIDE_7: string;
6071
6097
  global: {
6072
6098
  minus: string;
6073
6099
  plus: string;
@@ -8981,6 +9007,19 @@ export declare const translationsJson: {
8981
9007
  _ZALO_TEMP_SELECT_2: string;
8982
9008
  _ZALO_TEMP_SELECT_3: string;
8983
9009
  _ZALO_TEMP_SELECT_4: string;
9010
+ _USER_GUIDE_IP_RESTRICTION_IP_ADDRESS: string;
9011
+ _TITLE_IP_RESTRICTION_SPECIFIC_ACCOUNTS: string;
9012
+ _ERROR_IP_RESTRICTION_ADD_ACCOUNT: string;
9013
+ _USER_GUIDE_IP_RESTRICTION_GUIDE_1: string;
9014
+ _USER_GUIDE_IP_RESTRICTION_GUIDE_2: string;
9015
+ _USER_GUIDE_IP_RESTRICTION_GUIDE_3: string;
9016
+ _USER_GUIDE_IP_RESTRICTION_GUIDE_4: string;
9017
+ _USER_GUIDE_IP_RESTRICTION_GUIDE_5: string;
9018
+ _USER_GUIDE_IP_RESTRICTION_GUIDE_6: string;
9019
+ _TITLE_IP_RESTRICTION_IP_ADDRESS: string;
9020
+ _USER_GUIDE_IP_RESTRICTION_ENTER_ALLOW_IP: string;
9021
+ _USER_GUIDE_IP_RESTRICTION_DESCRIPTION: string;
9022
+ _USER_GUIDE_IP_RESTRICTION_GUIDE_7: string;
8984
9023
  };
8985
9024
  };
8986
9025
  };
@@ -2,7 +2,7 @@
2
2
  "_ACT_ACTION": "アクション",
3
3
  "_ACT_ADD_AN_OPTION": "オプションを追加する",
4
4
  "_ACT_ADD_BRANCH": "ブランチを追加する",
5
- "_ACT_ADD_CONDITION": "条件を追加",
5
+ "_ACT_ADD_CONDITION": "条件の追加",
6
6
  "_ACT_ADD_CRITERIA": "基準を追加する",
7
7
  "_ACT_ADD_DELAY_TIME": "その日の時刻まで遅延する",
8
8
  "_ACT_ADD_EVENT": "イベント",
@@ -32,7 +32,7 @@
32
32
  "_ACT_CANCEL": "キャンセル",
33
33
  "_ACT_CHANGE": "変化",
34
34
  "_ACT_CHANGE_ASSIGN_GROUP": "割り当てグループの変更",
35
- "_ACT_CHANGE_FORMAT": "フォーマットを変更する",
35
+ "_ACT_CHANGE_FORMAT": "フォーマットの変更",
36
36
  "_ACT_CHANGE_PORTAL": "ポータルの変更",
37
37
  "_ACT_CHANGE_TEMPLATE": "テンプレートの変更",
38
38
  "_ACT_CHART_TYPE": "グラフの種類",
@@ -47,7 +47,7 @@
47
47
  "_ACT_COPY_TO_CLIPBOARD": "クリップボードにコピー",
48
48
  "_ACT_CREATE": "作成する",
49
49
  "_ACT_CREATE_ASSIGN_ROLE": "役割の作成と割り当て",
50
- "_ACT_CREATE_NEW_EVENT_ACTION": "新しいイベントアクションの作成",
50
+ "_ACT_CREATE_NEW_EVENT_ACTION": "新しいイベントアクションを作成する",
51
51
  "_ACT_CREATE_NEW_EVENT_CATEGORY": "新しいイベント カテゴリを作成する",
52
52
  "_ACT_CREATE_NEW_MODEL": "新しいモデルを作成する",
53
53
  "_ACT_CUSTOMER_SEGMENT": "顧客セグメント",
@@ -66,7 +66,7 @@
66
66
  "_ACT_EXPORT": "輸出",
67
67
  "_ACT_FORECAST": "予報",
68
68
  "_TILT_FORECAST": "の予測結果",
69
- "_SEG_RESULT_MESS_1": "選択した時間範囲が Time to Live の範囲外であるため、データが不十分です",
69
+ "_SEG_RESULT_MESS_1": "選択した時間範囲が有効期間外であるため、データが不十分です",
70
70
  "_BTN_CREATE_SEG": "セグメントの作成",
71
71
  "_ACT_GO_BACK": "戻る",
72
72
  "_ACT_HAVE_ATTRIBUTE": "属性を持つ",
@@ -227,7 +227,7 @@
227
227
  "_BOX_TITL_FIELD_DECRYPTION": "フィールドの復号化",
228
228
  "_BOX_TITL_GET_ZONE_SCRIPT": "広告ゾーンのスクリプトを取得する",
229
229
  "_BOX_TITL_INFORMATION": "情報",
230
- "_BOX_TITL_PRIORITIZE_CAMPAIGN_VARRIANTS": "キャンペーンのバリエーションを優先する",
230
+ "_BOX_TITL_PRIORITIZE_CAMPAIGN_VARRIANTS": "キャンペーンのバリエーションに優先順位を付ける",
231
231
  "_BOX_TITL_REMOVE_BRANCH": "ブランチの削除",
232
232
  "_BOX_TITL_REMOVE_EVENT": "イベントの削除",
233
233
  "_BOX_TITL_REMOVE_EVENT_ATTRIBUTE": "イベント属性の削除",
@@ -385,7 +385,7 @@
385
385
  "_DURATION_LAST_15_MINUTE": "最後の 15 分",
386
386
  "_DURATION_LAST_3_HOUR": "過去 3 時間",
387
387
  "_DURATION_LAST_30_DAYS": "過去 30 日間",
388
- "_DURATION_LAST_30_MINUTE": "最後の 30 ",
388
+ "_DURATION_LAST_30_MINUTE": "最後の 30 分間",
389
389
  "_DURATION_LAST_5_MINUTE": "最後の 5 分",
390
390
  "_DURATION_LAST_6_HOUR": "過去6時間",
391
391
  "_DURATION_LAST_7_DAY": "過去 7 日間",
@@ -415,7 +415,7 @@
415
415
  "_EVENT_CLICK_WEB_PUSH": "{{customer_name}} さんが Journey {{journey_name}} からのウェブ プッシュ通知をクリックしました",
416
416
  "_EVENT_CLICK_ZALO_CHAT": "{{customer_name}} さんが Journey {{journey_name}} からの Zalo メッセージをクリックしました",
417
417
  "_EVENT_DES_ADD_TO_CART_PRODUCT": "{{customer_name}} さんが商品 {{product_name}} をショッピング カートに追加しました",
418
- "_EVENT_DES_BROWSING_PRODUCT_LIST_FILTER": "商品をフィルタリングした後に返された結果を表示した {{customer_name}} さん",
418
+ "_EVENT_DES_BROWSING_PRODUCT_LIST_FILTER": "商品をフィルタリングした後に返された結果を {{customer_name}} が閲覧しました",
419
419
  "_EVENT_DES_BROWSING_PRODUCT_SEARCH": "{{customer_name}} さんがキーワード {{keyword}} の検索から返された商品リストを閲覧しました",
420
420
  "_EVENT_DES_CAILL_IN_CALL": "{{customer_name}} がカスタマー サービスに電話しました",
421
421
  "_EVENT_DES_CALL_OUT_CALL": "{{customer_name}} がカスタマー サービスから電話を受けました",
@@ -425,7 +425,7 @@
425
425
  "_EVENT_DES_CLICK_ADVERTISING": "{{customer_name}} さんがキャンペーン {{campaign_name}} をクリックしました",
426
426
  "_EVENT_DES_CLICK_EMAIL_ADVERTISING": "{{customer_name}} が広告 {{advertising_name}} のメールをクリックしました",
427
427
  "_EVENT_DES_CLICK_PRODUCT": "{{customer_name}} さんが商品 {{product_name}} をクリックしました",
428
- "_EVENT_DES_CLICK_TRACKING_ADVERTISING": "{{customer_name}} がトラッキング広告 {{advertising_name}} をクリックしました",
428
+ "_EVENT_DES_CLICK_TRACKING_ADVERTISING": "{{customer_name}} さんがトラッキング広告 {{advertising_name}} をクリックしました",
429
429
  "_EVENT_DES_IDENTIFY_USER": "匿名訪問者プロファイル {{user_id}} は、この顧客プロファイルに関連付けられていました。",
430
430
  "_EVENT_DES_IMPRESSION_ADVERTISING": "キャンペーン {{campaign_name}} は {{customer_name}} に送信されました",
431
431
  "_EVENT_DES_PURCHASE_TRANSACTION": "{{customer_name}} が、{{num_of_products}} 個の製品 {{store_link}} のトランザクション購入 ID {{order_id}} を実行しました",
@@ -713,7 +713,7 @@
713
713
  "_NODE_GO_TO": "に行く",
714
714
  "_NODE_IF_ELSE": "それ以外の場合は、次のことを確認してください",
715
715
  "_NODE_IF_MAIN": "どうかを確認してください",
716
- "_NODE_IF_NO": "それ以外の場合は、次の場所に移動してください",
716
+ "_NODE_IF_NO": "それ以外の場合は、次のサイトにアクセスしてください",
717
717
  "_NODE_IF_THEN": "If/then 分岐",
718
718
  "_NODE_IF_THEN_TITL_NO": "いいえ",
719
719
  "_NODE_IF_THEN_TITL_YES": "はい",
@@ -725,7 +725,7 @@
725
725
  "_NOTI_ADD_CRITERIA": "少なくとも 1 つの条件を追加してください",
726
726
  "_NOTI_ADD_EVENT_BEFORE_ASSIGN_ATTRIBUTE": "イベント属性と参照オブジェクトを割り当てる前に、ソースにイベントを追加する必要があります",
727
727
  "_NOTI_ALERT_EDIT_DESTINATION": "この宛先を編集すると、他の機能の入力に影響します",
728
- "_NOTI_AM_BEING_COMPUTED": "このモデルは計算中です。構築プロセスが完了するまで一部のフィールドは変更できません",
728
+ "_NOTI_AM_BEING_COMPUTED": "このモデルは計算中です。構築プロセスが完了するまで一部のフィールドを変更できません",
729
729
  "_NOTI_ASSIGN_ATTRIBUTE_ERROR": "属性の割り当てエラー",
730
730
  "_NOTI_ATTR_HAS_BEEN_REMOVE": "属性が削除されました",
731
731
  "_NOTI_ATTRIBUTE_BEING_COMPUTED": "この属性は計算中です。構築プロセスが完了するまで一部のフィールドは変更できません",
@@ -805,7 +805,7 @@
805
805
  "_NOTI_UPLOAD_ICON_SUCCESS": "成功!ファイルがアップロードされました。",
806
806
  "_NOTI_VALIDATE_END_DATE_GREATER_CURRENT": "終了日は現在の日付より後の日付にする必要があります",
807
807
  "_NOTI_VALIDATE_END_TIME_GREATER": "終了時間は開始時間よりも長くする必要があります",
808
- "_NOTI_VALIDATE_FILE_FORMAT": "ファイルの形式が正しくありません。もう一度お試しください。",
808
+ "_NOTI_VALIDATE_FILE_FORMAT": "ファイルの形式が正しくありません。もう一度試してください。",
809
809
  "_NOTI_VALIDATE_FORMAT_CSS_SELECTOR": "CSS セレクターは接頭辞 で始まる必要があります。または #",
810
810
  "_NOTI_VALIDATE_ICON_FORMAT": "画像の形式が正しくありません。もう一度お試しください。",
811
811
  "_NOTI_VALIDATE_ONE_DAY": "少なくとも 1 日を選択してください",
@@ -868,7 +868,7 @@
868
868
  "_RECOMD_FACTORIZATION_VIEW": "因数分解ビューイベント",
869
869
  "_RECOMD_ITEM_SIMILARITY_PURCHASE": "アイテム類似購入イベント",
870
870
  "_RECOMD_ITEM_SIMILARITY_VIEW": "アイテム類似性表示イベント",
871
- "_RECOMD_NO_PRODUCT": "推奨される製品はありません。",
871
+ "_RECOMD_NO_PRODUCT": "おすすめの商品はありません。",
872
872
  "_RECOMD_RANK_FACTORIZATION_PURCHASE": "ランク因数分解購入イベント",
873
873
  "_RECOMD_RANK_FACTORIZATION_VIEW": "ランク因数分解ビューイベント",
874
874
  "_RENDER_FORMAT": "表示形式",
@@ -1018,7 +1018,7 @@
1018
1018
  "_TITL_COMPRESS_FILE": "ファイルを圧縮する",
1019
1019
  "_TITL_COMPUTE_SCHEDULE": "コンピューティングスケジュール",
1020
1020
  "_TITL_COMPUTE_TIME_RANGE": "計算時間範囲",
1021
- "_TITL_COMPUTE_WITH_CONDITION": "以下の条件で計算してください",
1021
+ "_TITL_COMPUTE_WITH_CONDITION": "以下の条件で計算します",
1022
1022
  "_TITL_COMPUTED_ATTR_TYPE": "計算された属性のタイプ",
1023
1023
  "_TITL_CONFIGURE_FIELD": "フィールドの構成",
1024
1024
  "_TITL_CONFIGURE_LAYOUT_VARIABLE": "レイアウト変数を設定する",
@@ -1028,7 +1028,7 @@
1028
1028
  "_TITL_CUSTOMER_CONVERSION": "顧客変換",
1029
1029
  "_TITL_VISITOR_CONVERSION": "訪問者のコンバージョン",
1030
1030
  "_TITL_CURRENCY": "通貨",
1031
- "_TITL_CURRENCY_NUMBER_DEFAULT_FORMAT": "通貨と数字",
1031
+ "_TITL_CURRENCY_NUMBER_DEFAULT_FORMAT": "通貨と数値",
1032
1032
  "_TITL_CURRENCY_SETTING": "通貨設定",
1033
1033
  "_TITL_CURRENT_ATTRIBUTE": "BO の属性",
1034
1034
  "_TITL_CURRENT_PAGE": "現在のページ",
@@ -1054,7 +1054,7 @@
1054
1054
  "_TITL_DELIVERY_ALGORITHM": "配信アルゴリズム",
1055
1055
  "_TITL_DELIVERY_DETAIL": "配送詳細",
1056
1056
  "_TITL_DELIVERY_PERFORMANCE": "配信パフォーマンス",
1057
- "_TITL_DELIVERY_RATE": "配送率",
1057
+ "_TITL_DELIVERY_RATE": "配送料",
1058
1058
  "_TITL_DELIVERY_RESULT": "納品実績",
1059
1059
  "_TITL_DELIVERY_STATUS": "配送状況",
1060
1060
  "_TITL_DESCENDING": "降順",
@@ -1111,7 +1111,7 @@
1111
1111
  "_TITL_FIXED": "修理済み",
1112
1112
  "_TITL_FOREIGN_OBJECT": "異物",
1113
1113
  "_TITL_FREQUENCY": "頻度",
1114
- "_TITL_FREQUENCY_CAPPING": "フリークエンシー キャップ",
1114
+ "_TITL_FREQUENCY_CAPPING": "フリークエンシーキャップ",
1115
1115
  "_TITL_FROM_PAGE": "ページから",
1116
1116
  "_TITL_FUNCTION": "関数",
1117
1117
  "_TITL_GENERAL": "一般的な",
@@ -1335,7 +1335,7 @@
1335
1335
  "_USER_GUIDE_AUDIDENCE_PARENT_NODE": "親ノードからの {{percent}} 視聴者",
1336
1336
  "_USER_GUIDE_CATALOG_CLOUD": "データをクラウド アプリから当社のシステムに効果的に同期すると、すべてのフラグメント データを相互接続して、ビジネス運営の 1 つの詳細な概要を得ることができます。",
1337
1337
  "_USER_GUIDE_CATALOG_MOBILE_APP": "ビジネス モバイル アプリをデータ ソースとして接続し、ユーザーが製品やアプリとどのようにやり取りしているかを確認します。",
1338
- "_USER_GUIDE_CATALOG_SERVER": "お客様のサーバーから当社のシステムにデータを直接送信することで、当社の分析ツールの多くを使用して顧客と業績をより深く理解できるようになります。",
1338
+ "_USER_GUIDE_CATALOG_SERVER": "データをサーバーから当社のシステムに直接送信することで、当社の分析ツールの多くを使用して顧客と業績をより深く理解できるようになります。",
1339
1339
  "_USER_GUIDE_CATALOG_WEBSITE": "ビジネス Web サイトをデータ ソースとして接続し、製品に対するユーザーの意図に関する驚くべき洞察を発見します。",
1340
1340
  "_USER_GUIDE_CHOOOSE_ATTR_DISPLAY": "顧客/訪問者の各プロファイルに表示される属性を選択します",
1341
1341
  "_USER_GUIDE_CHOOSE_EVENT_ATTRIBUTE_OBJECT": "イベント属性とオブジェクトの選択",
@@ -1344,7 +1344,7 @@
1344
1344
  "_USER_GUIDE_CLONE": "元のアイテムの設定を継承した新しいアイテムが作成されます。これは元のものには何も影響しません。 <br />\n新しいアイテムに名前を付けて、「保存」をクリックしてください。",
1345
1345
  "_USER_GUIDE_COLLECTION_CREATE_CRITERIA": "ファイルの を使用して、このコレクションに適したアイテムを見つけるための条件を作成します",
1346
1346
  "_USER_GUIDE_COLLECTION_CREATE_CRITERIA_INTRO": "このシステムは、条件を満たすアイテムを検索し、このコレクションに追加します。",
1347
- "_USER_GUIDE_COLLECTION_CREATE_CRITERIA_NOTE": "<b>注:</b>\n</br> - アップロードされたファイルから、本システム内に存在するIDのアイテムのみ作成するコレクションに追加できます\n</br> - アップロードされたファイルは最後に使用されてから 6 か月間保存され、その後は使用できなくなります。",
1347
+ "_USER_GUIDE_COLLECTION_CREATE_CRITERIA_NOTE": "<b>注:</b>\n</br> - アップロードされたファイルから、このシステム内に存在するIDのアイテムのみを作成するコレクションに追加できます\n</br> - アップロードされたファイルは最後に使用されてから 6 か月間保存され、その後は使用できなくなります。",
1348
1348
  "_USER_GUIDE_FILE_STORAGE_LIMIT": "<b>注:</b> アップロードされたファイルは最後に使用されてから 6 か月間保存され、その後は使用できなくなります。",
1349
1349
  "_UPLOAD_FILE_DELETED_ERROR_MESSAGE": "アップロードされたファイルが削除されました",
1350
1350
  "_USER_GUIDE_CONFIRM_NEW_PASSWORD": "新しいパスワードを確認します",
@@ -1424,7 +1424,7 @@
1424
1424
  "_USER_GUIDE_TOTAL_ATTR_MEASURE": "合計 {{num_attr}} 個の属性と {{num_measure}} 個のメジャーが選択されました",
1425
1425
  "_USER_GUIDE_TOTAL_BRANCH": "注: 合計 100%",
1426
1426
  "_USER_GUIDE_TOTAL_FIELD": "{{x}} 個の選択されたフィールド",
1427
- "_USER_GUIDE_UPLOAD_FILE": "- サポートされているファイル形式は次のとおりです: .csv、.xls、.xlsx <br />\n- .xlsx ファイルの最初の行はヘッダー行とみなされます<br />\n- デフォルトのデータエンコーディングはUTF-8です",
1427
+ "_USER_GUIDE_UPLOAD_FILE": "- サポートされているファイル形式は次のとおりです: .csv、.xls、.xlsx <br />\n- .xlsx ファイルの最初の行はヘッダー行とみなされます<br />\n- デフォルトのデータエンコーディングはUTF-8です。",
1428
1428
  "_USER_GUIDE_UPLOAD_FILE_BEFORE_MAPPING": "属性をマッピングする前にファイルをアップロードする必要があります",
1429
1429
  "_USER_GUIDE_UPLOAD_WAITING": "システムの処理が完了するまで 10 分間お待ちください。<br />\nページを更新してデータを確認します",
1430
1430
  "_USER_GUIDE_USER_NOT_FOUND": "ユーザーが見つかりません",
@@ -1515,7 +1515,7 @@
1515
1515
  "_TITL_EXPIRATION_TIME": "有効期限",
1516
1516
  "_USER_GUIDE_UPLOAD_PROMOTION_CODE": "<b>注:</b>\n </br> - CDP 365 に存在しない新しいコードのみをインポートできます\n </br> - アップロードされたファイルは最後に使用されてから 6 か月間保存され、その後は使用できなくなります。",
1517
1517
  "_TAB_PROMOTION_CODE": "プロモーションコード",
1518
- "_TAB_POOL_SETTING": "プール設定",
1518
+ "_TAB_POOL_SETTING": "プールの設定",
1519
1519
  "_TITL_PROMOTION_CODE_INFO": "プロモーションコード情報",
1520
1520
  "_TITL_CODE_GENERAL_INFO": "コードの一般情報",
1521
1521
  "_TITL_CODE_DELIVERY_INFO": "コード配信情報",
@@ -1582,7 +1582,7 @@
1582
1582
  "_ITEM_NAME_LINE_ITEM_ATTRIBUTE": "ラインアイテム属性",
1583
1583
  "_CHK_IGNORE_DUPLICATE": "予定された旅行の重複メッセージを無視する",
1584
1584
  "_CHK_LIMITED_FREQ_JOURNEY": "旅行の頻度を制限します(期間は 3 か月)",
1585
- "_CHK_LIMITED_FREQ_DESTINATION": "宛先の周波数を制限する",
1585
+ "_CHK_LIMITED_FREQ_DESTINATION": "宛先の頻度を制限する",
1586
1586
  "_TITL_TIME_PER_PERSON": "1人あたりの時間",
1587
1587
  "_TITL_MEMBER_INPUT_METHOD": "メンバー入力方法",
1588
1588
  "_TITL_SET_UP_ALERT": "アラートを設定する",
@@ -1629,7 +1629,7 @@
1629
1629
  "_TITL_PREPARE_REPORT": "レポートを準備する",
1630
1630
  "_TITL_ENABLE_PARAMETER_FILTER": "パラメータフィルターを有効にする",
1631
1631
  "_TITL_ENABLE_MASTER_FILTER": "マスターフィルターを有効にする",
1632
- "_TITL_PPL_W_ACCESS": "アクセス権のある人",
1632
+ "_TITL_PPL_W_ACCESS": "アクセスできる人",
1633
1633
  "_TITL_PUBLIC_REPORT": "ポータルで公開",
1634
1634
  "_TITL_FILTER_TYPE": "フィルターの種類",
1635
1635
  "_TITL_DATA_SOURCE": "データソース",
@@ -1730,7 +1730,7 @@
1730
1730
  "_TITL_TAG_ACTION_HISTORY_DETAIL": "行動履歴詳細",
1731
1731
  "_TITL_TAG_SCHEDULE_HISTORY_DETAIL": "スケジュール履歴の詳細",
1732
1732
  "_INFO_AD_ZONE_CODE": "ゾーンコード",
1733
- "_STATE_COMPLETED": "完了しました",
1733
+ "_STATE_COMPLETED": "完了",
1734
1734
  "_STATE_END": "終わり",
1735
1735
  "_STATE_EXIT_JOURNEY": "出口行程",
1736
1736
  "_STATE_VIOLATE_TRIGGER_FC": "トリガーのフリークエンシー キャップに違反する",
@@ -1777,7 +1777,7 @@
1777
1777
  "_PORTAL_LIMITATION_DES_COL_DELETE": "までに回復しない場合、コレクションは完全に削除されます",
1778
1778
  "_PORTAL_LIMITATION_DES_BO_DISABLED": "データ オブジェクトは、次の場所で使用されない場合は無効になります。",
1779
1779
  "_PORTAL_LIMITATION_DES_BO_ARCHIVED": "データオブジェクトは、使用されない場合はアーカイブされます。",
1780
- "_PORTAL_LIMITATION_DES_BO_DELETE": "次の期間に回復しない場合、データ オブジェクトは完全に削除されます",
1780
+ "_PORTAL_LIMITATION_DES_BO_DELETE": "データオブジェクトは、次の期間に回復しない場合は完全に削除されます。",
1781
1781
  "_PORTAL_LIMITATION_DES_ATTR_DISABLED": "で使用されない場合、属性は無効になります。 ",
1782
1782
  "_PORTAL_LIMITATION_DES_ATTR_ARCHIVED": "属性が使用されない場合はアーカイブされます。",
1783
1783
  "_PORTAL_LIMITATION_DES_ATTR_DELETE": "属性は、次の期間に回復しない場合は完全に削除されます。",
@@ -1791,7 +1791,7 @@
1791
1791
  "_MEASURE_TYPE_UC_APPROXIMATE_DATASKETCHES": "一意のおおよその数 (データスケッチ)",
1792
1792
  "_TITL_ASSOCIATE_UTM": "UTMと連携する",
1793
1793
  "_TITL_PLANNING": "企画",
1794
- "_TITLE_PLAN_ALL_PLANS": "すべてのプラン",
1794
+ "_TITLE_PLAN_ALL_PLANS": "全プラン",
1795
1795
  "_TITLE_PLAN_CUSTOMER_PLANS": "顧客プラン",
1796
1796
  "_TITLE_PLAN_VISITOR_PLANS": "ビジタープラン",
1797
1797
  "_TITLE_PLAN_PLAN_NAME": "プラン名",
@@ -1807,7 +1807,7 @@
1807
1807
  "_USER_GUIDE_PLAN_REMOVE_GROUP_CONTENT": "このグループを削除してもよろしいですか?",
1808
1808
  "_ACT_PLAN_SAVE_AS_NEW_SEG": "新しいセグメントとして保存",
1809
1809
  "_ACT_PLAN_SAVE_AS_EXIST_SEG": "または、既存のセグメントにロードします",
1810
- "_TITLE_SELECT_SEGMENT": "セグメントの選択",
1810
+ "_TITLE_SELECT_SEGMENT": "セグメントを選択",
1811
1811
  "_DES_LAST_BUILD_TIME": "前回のビルド時間",
1812
1812
  "_ACT_PLAN_SAVE_AS": "名前を付けて保存",
1813
1813
  "_ACT_PLAN_PRIVATE_TEMPLATE": "プライベートテンプレート",
@@ -1876,7 +1876,7 @@
1876
1876
  "_EVENT_SETTING_RECORD_IN_PROFILE": "訪問者/顧客プロファイルにイベント データを記録する",
1877
1877
  "_WARN_SMS_DYNAMIC_CONTENT": "(文字数は、コンテンツに動的コンテンツまたはショートリンクが含まれる場合のみ参考用です)",
1878
1878
  "_TITLE_CATALOG_DESTINATION_CHANNEL": "宛先チャンネル",
1879
- "_TITLE_CATALOG_DESTINATION_CATALOGS": "宛先カタログ",
1879
+ "_TITLE_CATALOG_DESTINATION_CATALOGS": "目的地カタログ",
1880
1880
  "_TITLE_CATALOG_ALL_CATALOGS": "すべてのカタログ",
1881
1881
  "_TITLE_CATALOG_CATALOG_NAME": "カタログ名",
1882
1882
  "_TITLE_CATALOG_DEFAULT_CATALOG": "デフォルトのカタログ",
@@ -1889,7 +1889,7 @@
1889
1889
  "_USER_GUIDE_CATALOG_CONFIRM_DISABLE": "選択したカタログを無効にしてもよろしいですか?",
1890
1890
  "_USER_GUIDE_CATALOG_CONFIRM_REMOVE": "選択したカタログを削除してもよろしいですか?",
1891
1891
  "_USER_GUIDE_CATALOG_SELECT_CATALOG_INIT": "初期化するカタログを選択してください",
1892
- "_USER_GUIDE_CATALOG_SELECT_CHANNEL": "選択した宛先チャンネル",
1892
+ "_USER_GUIDE_CATALOG_SELECT_CHANNEL": "選択された宛先チャンネル",
1893
1893
  "_USER_GUIDE_CATALOG_SEARCH_CHANNEL": "宛先チャンネルの検索",
1894
1894
  "_USER_GUIDE_CATALOG_SELECT_CATALOG": "厳選されたカタログ",
1895
1895
  "_USER_GUIDE_CATALOG_SEARCH_CATALOG": "カタログを検索する",
@@ -1944,7 +1944,7 @@
1944
1944
  "_WARN_ATTR_COMPUTATIONAL_LIMIT": "現在、計算制限に達しているため、システムは次の有効な時間にこの属性を計算します。",
1945
1945
  "_WARN_TITLE_AM_WARN_TOTAL": "警告 分析モデルの合計制限数",
1946
1946
  "_WARN_AM_WARN_TOTAL_CONTENT_CREATE": "分析モデルの数が制限に達しました。\n新しい分析モデルを作成する場合は、使用されていない分析モデルを削除してください。",
1947
- "_ACT_WARN_AM_GO_TO_LIST": "分析モデルのリストに移動",
1947
+ "_ACT_WARN_AM_GO_TO_LIST": "解析モデルリストに移動",
1948
1948
  "_TITLE_SELECTED_AM": "選択した分析モデル",
1949
1949
  "_WARN_TITLE_AM_NAME": "解析モデル名",
1950
1950
  "_WARN_TITLE_AM_STATUS": "状態",
@@ -1986,7 +1986,7 @@
1986
1986
  "_WARN_COLL_WARN_TOTAL_CONTENT_RECOVER": "{{dynamic_collections}} {{static_collections}} の数が制限に達しました。\nコレクションを回復したい場合は、未使用のコレクションをアーカイブしてください。",
1987
1987
  "_ERROR_MESS_COLL_COMPUTED_LIMIT": "この時間内に構築されるコレクションの数の制限に達しました。",
1988
1988
  "_WARN_TITLE_COLL_COMPUTATIONAL_LIMIT": "警告収集の計算制限",
1989
- "_WARN_COLL_COMPUTATIONAL_LIMIT": "現在、計算制限に達しているため、システムは次の有効な時間内にこのコレクションを計算します。",
1989
+ "_WARN_COLL_COMPUTATIONAL_LIMIT": "現在、計算制限に達しているため、システムは次の有効な時間にこのコレクションを計算します。",
1990
1990
  "_OPTION_SEGMENT_SCHEDULE_DETAILS_HOUR_AM": "{{x}} 時間ごとに {{HH:MM}} 時",
1991
1991
  "_OPTION_SEGMENT_SCHEDULE_DETAILS_HOUR_PM": "{{x}} 時間ごとに 午後{{HH:MM}} 時",
1992
1992
  "_OPTION_SEGMENT_SCHEDULE_DETAILS_DAY_AM": "{{x}}日ごとの {{HH:MM}} 時",
@@ -2104,7 +2104,7 @@
2104
2104
  "_PREDICT_MODEL_UPDATE_INTO_EXISTING_SEGMENT": "既存のセグメントへの更新",
2105
2105
  "_PREDICT_MODEL_CREATE_NEW_ATTRIBUTE": "新しい属性を作成する",
2106
2106
  "_PREDICT_MODEL_UPDATE_INTO_EXISTING_ATTRIBUTE": "既存の属性に更新する",
2107
- "_PREDICT_MODEL_SELECT_SEGMENT": "セグメントの選択",
2107
+ "_PREDICT_MODEL_SELECT_SEGMENT": "セグメントを選択",
2108
2108
  "_PREDICT_MODEL_SELECT_ATTRIBUTE": "属性の選択",
2109
2109
  "_PREDICT_MODEL_CANNOT_LOSE_THEM": "それらを失うことはできません",
2110
2110
  "_PREDICT_MODEL_AT_RISK": "危険にさらされています",
@@ -2117,7 +2117,7 @@
2117
2117
  "_PREDICT_MODEL_NEW_CUSTOMERS": "新規のお客様",
2118
2118
  "_PREDICT_MODEL_POTENTIAL_LOYALISTS": "潜在的なロイヤリスト",
2119
2119
  "_PREDICT_MODEL_NEED_ATTENTION": "注意が必要です ",
2120
- "_PREDICT_MODEL_VISUALIZATION_ERROR": "データを視覚化できない",
2120
+ "_PREDICT_MODEL_VISUALIZATION_ERROR": "データは視覚化できない",
2121
2121
  "_PREDICT_MODEL_VISUALIZATION_TIP": "購入金額の価値 ",
2122
2122
  "_PREDICT_MODEL_LIMIT_EQUAL_TO": "に等しい",
2123
2123
  "_PREDICT_MODEL_LIMIT_GREATER_THAN_OR_EQUAL_TO": "以上 ",
@@ -2287,13 +2287,13 @@
2287
2287
  "_BLCK_OTP_EVENT": "イベント",
2288
2288
  "_BLCK_OTP_EVENT_SOURCE": "イベントソース",
2289
2289
  "_CHANNEL_CUSTOM_API": "カスタムチャンネル",
2290
- "_CHANNEL_DES_WEB": "ユーザーの行動や好みに基づいて Web サイトのコンテンツを動的に調整し、エンゲージメント率とコンバージョン率を最適化します。",
2290
+ "_CHANNEL_DES_WEB": "ユーザーの行動や好みに基づいて Web サイトのコンテンツを動的に調整し、エンゲージメントとコンバージョン率を最適化します。",
2291
2291
  "_CHANNEL_DES_WEB_NOTI": "リアルタイムのメッセージを送信して Web サイト訪問者を引きつけ、タイムリーなインタラクションとコンバージョンを促進します",
2292
2292
  "_CHANNEL_DES_APP_NOTI": "即時通知をモバイル アプリのみに送信し、即時のエンゲージメントとインタラクションを促進します",
2293
2293
  "_CHANNEL_DES_EMAIL": "パーソナライズされたメッセージをユーザーの受信箱に直接配信し、ターゲットを絞ったコンテンツでのエンゲージメントとコンバージョンを促進します。",
2294
- "_CHANNEL_DES_SMS": "直接的かつ即時のコミュニケーションを提供し、ユーザーのモバイル デバイスに到達して即時のエンゲージメントとインタラクションを実現します。",
2294
+ "_CHANNEL_DES_SMS": "直接的かつ即時的なコミュニケーションを提供し、ユーザーのモバイルデバイスに到達して即時のエンゲージメントとインタラクションを実現します。",
2295
2295
  "_CHANNEL_DES_SMART_INB": "プッシュ通知のコンテンツを一元管理して管理とエンゲージメントを合理化",
2296
- "_CHANNEL_DES_FB_MESS": "直接的な会話型のコミュニケーションを提供し、使い慣れたソーシャル メディア プラットフォームでユーザーを惹きつけます",
2296
+ "_CHANNEL_DES_FB_MESS": "直接的で会話的なコミュニケーションを提供し、使い慣れたソーシャル メディア プラットフォームでユーザーを引き付ける",
2297
2297
  "_CHANNEL_DES_VIBER": "ダイレクト メッセージング機能を提供し、安全で使い慣れたソーシャル メディア プラットフォームでユーザーを魅了します。",
2298
2298
  "_CHANNEL_DES_ZALO": "OA や ZNS などのサービス用のさまざまなテンプレートを使用したダイレクト メッセージング機能を提供します",
2299
2299
  "_CHANNEL_DES_WHATSAPP": "関連性のあるメッセージを顧客の WhatsApp アカウントに直接配信し、より強力な関係を促進し、エンゲージメントを高めます",
@@ -2449,7 +2449,7 @@
2449
2449
  "_OBJ_DES_APP_NOTI_5": "アカウント、トランザクション更新などの関連情報をユーザーのブラウザに直接配信します。",
2450
2450
  "_OBJ_DES_EMAIL_1": "魅力的なコンテンツと電子メールの行動喚起 (CTA) でユーザーを Web サイトに誘導します",
2451
2451
  "_OBJ_DES_EMAIL_2": "貴重なコンテンツやインセンティブを提供してサインアップや問い合わせを促進することで見込み顧客を獲得します。",
2452
- "_OBJ_DES_EMAIL_3": "ターゲットを絞ったコンテンツと自動化された電子メール シーケンスを使用して、セールスファネルを通じてリードを誘導します。",
2452
+ "_OBJ_DES_EMAIL_3": "ターゲットを絞ったコンテンツと自動化された電子メール シーケンスを使用して、セールス ファネルを通じてリードを誘導します。",
2453
2453
  "_OBJ_DES_EMAIL_4": "関連するアップデート、オファー、限定コンテンツで顧客の関心とロイヤルティを維持します",
2454
2454
  "_OBJ_DES_EMAIL_5": "製品やサービスを紹介して売上とコンバージョンを促進する",
2455
2455
  "_OBJ_DES_EMAIL_6": "一貫性があり、有益で魅力的なコンテンツを通じてブランド アイデンティティと価値を強化する",
@@ -2475,29 +2475,29 @@
2475
2475
  "_OBJ_DES_ZALO_1": "ターゲットを絞ったプロモーションやオファーをブロードキャストして、エンゲージメントと販売を促進します",
2476
2476
  "_OBJ_DES_ZALO_2": "インタラクティブな要素を使用してセールスファネルを通じてリードと見込み顧客を育成する",
2477
2477
  "_OBJ_DES_ZALO_3": "タイムリーなコミュニケーションを確保するために、注文確認、配送の最新情報、または予約のリマインダーを送信します。",
2478
- "_OBJ_DES_ZALO_4": "重要なお知らせ、アップデート、ニュースをユーザーと共有して最新情報を入手します。",
2478
+ "_OBJ_DES_ZALO_4": "重要なお知らせ、アップデート、ニュースをユーザーと共有して常に最新情報を入手します。",
2479
2479
  "_OBJ_DES_ZALO_5": "一貫性があり、有益で魅力的なコンテンツを通じてブランド アイデンティティと価値を強化する",
2480
2480
  "_OBJ_DES_WHATSAPP_1": "ターゲットを絞ったプロモーションやオファーをブロードキャストして、エンゲージメントと販売を促進します",
2481
2481
  "_OBJ_DES_WHATSAPP_2": "鮮やかなメッセージ テンプレートを使用してタイムリーで関連性のある更新を提供します",
2482
2482
  "_OBJ_DES_WHATSAPP_3": "インタラクティブな要素を使用してセールスファネルを通じてリードと見込み顧客を育成する",
2483
2483
  "_OBJ_DES_WHATSAPP_4": "予定や予約のリマインダーや確認を送信してノーショーを減らします",
2484
- "_OBJ_DES_WHATSAPP_5": "重要なお知らせ、アップデート、ニュースをユーザーと共有して最新情報を入手します。",
2484
+ "_OBJ_DES_WHATSAPP_5": "重要なお知らせ、アップデート、ニュースをユーザーと共有して常に最新情報を入手します。",
2485
2485
  "_OBJ_DES_TELEGRAM_1": "ターゲットを絞ったプロモーションやオファーをブロードキャストして、エンゲージメントと販売を促進します",
2486
2486
  "_OBJ_DES_TELEGRAM_2": "鮮やかなメッセージ テンプレートを使用してタイムリーで関連性のある更新を提供します",
2487
2487
  "_OBJ_DES_TELEGRAM_3": "インタラクティブなテンプレート要素を使用して販売目標到達プロセスをガイドし、リードと見込み客を育成します。",
2488
2488
  "_OBJ_DES_TELEGRAM_4": "予定や予約のリマインダーや確認を送信してノーショーを減らします",
2489
- "_OBJ_DES_TELEGRAM_5": "重要なお知らせ、アップデート、ニュースをユーザーと共有して最新情報を入手します。",
2489
+ "_OBJ_DES_TELEGRAM_5": "重要なお知らせ、アップデート、ニュースをユーザーと共有して常に最新情報を入手します。",
2490
2490
  "_OBJ_DES_LINE_1": "ターゲットを絞ったプロモーションやオファーをブロードキャストして、エンゲージメントと販売を促進します",
2491
2491
  "_OBJ_DES_LINE_2": "Line のリッチ メニューを利用して、メッセージ内のインタラクティブなオプションとナビゲーションをユーザーに提供します",
2492
2492
  "_OBJ_DES_LINE_3": "インタラクティブなテンプレート要素を使用して販売目標到達プロセスをガイドし、リードと見込み客を育成します。",
2493
2493
  "_OBJ_DES_LINE_4": "予定や予約のリマインダーや確認を送信してノーショーを減らします",
2494
- "_OBJ_DES_LINE_5": "重要なお知らせ、アップデート、ニュースをユーザーと共有して最新情報を入手します。",
2494
+ "_OBJ_DES_LINE_5": "重要なお知らせ、アップデート、ニュースをユーザーと共有して常に最新情報を入手します。",
2495
2495
  "_OBJ_DES_FILE_TRANSFER_1": "さまざまなシステム間での大規模なデータセットの共有を自動化し、より迅速かつ正確なデータ処理を実現します。",
2496
2496
  "_OBJ_DES_FILE_TRANSFER_2": "マーケティング資料やキャンペーン資産をチームメンバーや外部関係者に簡単に配布し、より良いコラボレーションとコミュニケーションを促進します。",
2497
2497
  "_OBJ_DES_FILE_TRANSFER_3": "ファイル転送をマーケティングオートメーションに統合して時間と人的リソースを節約する",
2498
2498
  "_OBJ_DES_ORCHES_1": "さまざまなチャネルを通じて顧客にリーチし、ブランドの認知度と市場浸透を強化することで、ブランドの認知度を高めます。",
2499
2499
  "_OBJ_DES_ORCHES_2": "顧客を好みのプラットフォームでエンゲージし、ロイヤルティと支持を促進するシームレスで記憶に残るインタラクションを生み出します。",
2500
- "_OBJ_DES_ORCHES_3": "チャネル全体でターゲットを絞ったメッセージを送信することで、購入者のジャーニーを見込み顧客に導き、コンバージョンを促進し、販売機会を最大化します。",
2500
+ "_OBJ_DES_ORCHES_3": "チャネル全体でターゲットを絞ったメッセージを送信して購入者の購買行動をガイドし、コンバージョンを促進し、販売機会を最大化します。",
2501
2501
  "_OBJ_DES_ORCHES_4": "チャネルの好みや行動に基づいて特定の視聴者セグメントに合わせてキャンペーンを調整し、共感を呼び、コンバージョンにつながるパーソナライズされたエクスペリエンスを提供します。",
2502
2502
  "_OBJ_DES_ORCHES_5": "すべてのチャネルにわたって包括的な分析を取得し、データ主導の意思決定と継続的なキャンペーンの改善を強化して、最適な結果と ROI を実現します。",
2503
2503
  "_WEBPER_TEMP_OBJ_DES_POP_1": "潜在顧客からの情報、または既存顧客からのレビューやフィードバックを収集してデータを充実させます",
@@ -2510,7 +2510,7 @@
2510
2510
  "_WEBPER_TEMP_OBJ_DES_POP_8": "ターゲットを絞ったオファー、インセンティブ、またはリマインダーを使用して、躊躇している買い物客に購入を完了させるよう促します。",
2511
2511
  "_WEBPER_TEMP_OBJ_DES_POP_9": "ソーシャル メディア プラットフォームでコミュニティを拡大し、ブランドの存在感を高めます",
2512
2512
  "_WEBPER_TEMP_OBJ_DES_POP_10": "参加者と興奮を促進する注目を集めるイベント プロモーションで成功への舞台を整えます。",
2513
- "_WEBPER_TEMP_OBJ_DES_POP_11": "魅力的な運ゲーやインタラクティブなコンテンツで興奮を呼び起こし、エンゲージメントを高め、ユーザーを何度もリピートさせます。",
2513
+ "_WEBPER_TEMP_OBJ_DES_POP_11": "魅力的な運ゲーやインタラクティブなコンテンツで興奮を呼び起こし、エンゲージメントを高め、ユーザーを何度もリピートさせ続ける",
2514
2514
  "_WEBPER_TEMP_OBJ_DES_POP_12": "新規ユーザーを支援し、提供された回答に基づいてパーソナライズされた推奨事項を提供します",
2515
2515
  "_WEBPER_TEMP_OBJ_DES_POP_13": "直接リンクまたは QR コードを介してモバイル アプリをダウンロードしてスキャンするようユーザーに奨励します。",
2516
2516
  "_WEBPER_TEMP_OBJ_DES_FLOAT_1": "リード獲得フォームを含めて、訪問者にニュースレター、プロモーション、その他のマーケティング資料への登録を促します。",
@@ -2540,8 +2540,8 @@
2540
2540
  "_WEBPER_TEMP_OBJ_DES_SLIDEIN_6": "期間限定のオファー、カウントダウンタイマー、またはフラッシュセール通知を提示することで、緊迫感を醸成し、即時行動を促します。",
2541
2541
  "_WEBPER_TEMP_OBJ_DES_SLIDEIN_7": "ターゲットを絞ったオファー、インセンティブ、またはリマインダーを使用して、躊躇している買い物客に購入を完了させるよう促します。",
2542
2542
  "_WEBPER_TEMP_OBJ_DES_SLIDEIN_8": "顧客からの問い合わせの必要性を減らし、ショッピング体験の全体的な満足度を向上させるために、顧客が遭遇する可能性のある一般的な懸念事項や問題のトラブルシューティングに対処する",
2543
- "_WEBPER_TEMP_OBJ_DES_SLIDEIN_9": "登録や出欠確認のオプションを提供して、ウェビナー、ワークショップ、イベントにユーザーを招待し、参加とエンゲージメントを促進します。",
2544
- "_LINE_MESS_OBJ_DES_1": "各ユーザーの好み、行動、過去のやり取りに基づいてメッセージをカスタマイズする",
2543
+ "_WEBPER_TEMP_OBJ_DES_SLIDEIN_9": "登録や出欠確認のオプションを提供して、ウェビナー、ワークショップ、イベントに参加するようユーザーを招待し、参加とエンゲージメントを促進します。",
2544
+ "_LINE_MESS_OBJ_DES_1": "各ユーザーの好み、行動、過去のやり取りに基づいてメッセージを調整する",
2545
2545
  "_LINE_MESS_OBJ_DES_2": "画像、ビデオ、ステッカーなどのマルチメディア コンテンツでメッセージを充実させます",
2546
2546
  "_LINE_MESS_OBJ_DES_3": "ユーザーの参加を促すために、クリック可能なボタンなどのインタラクティブな要素を組み込む",
2547
2547
  "_LINE_MESS_OBJ_DES_4": "インタラクティブなメッセージ テンプレート内で応答、質問、フィードバックを奨励することで、フォロワーとの双方向の対話を促進します",
@@ -2596,14 +2596,14 @@
2596
2596
  "_REALTIME_FACEBOOK_MESSENGER_OBJ_1": "カスタマーサポートの強化",
2597
2597
  "_REALTIME_FACEBOOK_MESSENGER_DES_1": "インタラクション データを活用してタイムリーかつパーソナライズされたサポートを提供し、顧客満足度とロイヤルティを向上させます。",
2598
2598
  "_REALTIME_FACEBOOK_MESSENGER_OBJ_2": "マーケティング戦略を洗練する",
2599
- "_REALTIME_FACEBOOK_MESSENGER_DES_2": "インタラクション パターンを分析して顧客の興味や行動をより深く理解し、マーケティング活動を調整できるようにします。",
2599
+ "_REALTIME_FACEBOOK_MESSENGER_DES_2": "インタラクション パターンを分析して顧客の関心や行動をより深く理解し、マーケティング活動を調整できるようにします。",
2600
2600
  "_REALTIME_FACEBOOK_MESSENGER_OBJ_3": "対応管理を自動化する",
2601
2601
  "_REALTIME_FACEBOOK_MESSENGER_DES_3": "マーケティング ハブ機能と統合すると、応答とフォローアップが自動化され、顧客の質問に答えられないことがなくなります。",
2602
2602
  "_REALTIME_FACEBOOK_MESSENGER_OBJ_4": "エンゲージメントを高める",
2603
2603
  "_REALTIME_FACEBOOK_MESSENGER_DES_4": "インタラクションから得た洞察を利用して、視聴者の共感を呼ぶ、より魅力的なコンテンツやキャンペーンを作成します。",
2604
2604
  "_REALTIME_FACEBOOK_MESSENGER_OBJ_5": "キャンペーンの効果を測定する",
2605
2605
  "_REALTIME_FACEBOOK_MESSENGER_DES_5": "インタラクション データを分析して、顧客がさまざまなメッセージにどのように反応するかを確認することで、マーケティング キャンペーンの影響を追跡します。",
2606
- "_REALTIME_TIKTOK_LEAD": "「Tiktok Lead」テンプレートを使用すると、TikTok 広告を通じてフォームに記入するユーザーからのデータの収集と管理がシームレスかつ効率的に行えるようになりました。このリアルタイム機能により、視聴者に関する洞察が即座に得られるため、マーケティング活動を微調整し、より高いエンゲージメントとコンバージョンを促進することができます。",
2606
+ "_REALTIME_TIKTOK_LEAD": "「Tiktok Lead」テンプレートを使用すると、TikTok 広告を通じてフォームに記入するユーザーからのデータの収集と管理がシームレスかつ効率的になりました。このリアルタイム機能により、視聴者に関する洞察が即座に得られるため、マーケティング活動を微調整し、より高いエンゲージメントとコンバージョンを促進することができます。",
2607
2607
  "_REALTIME_TIKTOK_LEAD_OBJ_1": "リードを顧客に変える",
2608
2608
  "_REALTIME_TIKTOK_LEAD_DES_1": "収集した情報を利用して潜在的な見込み客と直接連絡を取ったり相談したりして、彼らを有料顧客に変えます。",
2609
2609
  "_REALTIME_TIKTOK_LEAD_OBJ_2": "マーケティング活動をパーソナライズする",
@@ -2674,5 +2674,18 @@
2674
2674
  "_ZALO_TEMP_SELECT_1": "Zalo公式アカウントによる様々なスタイル",
2675
2675
  "_ZALO_TEMP_SELECT_2": "これらのテンプレートは、Zalo 公式アカウント専用です。クリック ",
2676
2676
  "_ZALO_TEMP_SELECT_3": "ここ",
2677
- "_ZALO_TEMP_SELECT_4": "目的地を作成します。"
2677
+ "_ZALO_TEMP_SELECT_4": "目的地を作成します。",
2678
+ "_USER_GUIDE_IP_RESTRICTION_IP_ADDRESS": "単一の IP アドレス (192.168.1.1) または範囲 (192.168.1.1 ~ 192.168.1.10) を入力します。 ",
2679
+ "_TITLE_IP_RESTRICTION_SPECIFIC_ACCOUNTS": "特定のアカウント",
2680
+ "_ERROR_IP_RESTRICTION_ADD_ACCOUNT": "少なくとも 1 つのアカウントを選択するか、代わりにすべてのアカウントを選択してください",
2681
+ "_USER_GUIDE_IP_RESTRICTION_GUIDE_1": "アカウントが特定の IP アドレスに制限されている場合はどうなりますか?",
2682
+ "_USER_GUIDE_IP_RESTRICTION_GUIDE_2": "このアカウントは、特定の IP アドレスを介してのみ CDP にアクセスします。 IP アドレスを作成し、それをポータル上のすべてのアカウントに適用すると、今後作成される新しいアカウントを含むすべてのアカウントのアクセスが制限されます。",
2683
+ "_USER_GUIDE_IP_RESTRICTION_GUIDE_3": "制限したいアカウントをポップアップから追加します",
2684
+ "_USER_GUIDE_IP_RESTRICTION_GUIDE_4": "複数の IP または範囲を同時に生成する方法",
2685
+ "_USER_GUIDE_IP_RESTRICTION_GUIDE_5": "方法は簡単です。複数の単一 IP または範囲をカンマで区切って入力するだけです。例: 192.168.1.1、192.168.1.5、192.168.1.7 ~ 192.168.1.8",
2686
+ "_USER_GUIDE_IP_RESTRICTION_GUIDE_6": "指定したアカウントのアクセスを制限する方法",
2687
+ "_TITLE_IP_RESTRICTION_IP_ADDRESS": "IPアドレス",
2688
+ "_USER_GUIDE_IP_RESTRICTION_ENTER_ALLOW_IP": "許可されたIPv4またはIPv6アドレスを入力してください",
2689
+ "_USER_GUIDE_IP_RESTRICTION_DESCRIPTION": "IPアドレスを説明してください",
2690
+ "_USER_GUIDE_IP_RESTRICTION_GUIDE_7": "[<strong>保存</strong>] をクリックして変更を確認します。"
2678
2691
  }
@@ -2058,7 +2058,7 @@
2058
2058
  "_PREDICT_MODEL_ALL_PREDICTIVE_MODELS": "Tất cả các mô hình dự đoán",
2059
2059
  "_PREDICT_MODEL_CREATE_NEW_MODEL": "Tạo mới",
2060
2060
  "_PREDICT_MODEL_RFM_MODEL": "Mô hình RFM",
2061
- "_PREDICT_MODEL_RFM_DESCRIPTION": "Xếp hạng và nhóm khách hàng một cách định lượng dựa trên mức độ gần đây, tần suất và tổng số tiền trong hành vi chi tiêu của họ",
2061
+ "_PREDICT_MODEL_RFM_DESCRIPTION": "Xếp hạng và phân nhóm khách hàng một cách định lượng dựa trên mức độ gần đây, tần suất và tổng số tiền trong hành vi chi tiêu của họ",
2062
2062
  "_PREDICT_MODEL_ERFM_MODEL": "Mô hình eRFM",
2063
2063
  "_PREDICT_MODEL_ERFM_DESCRIPTION": "Mô hình eRFM là mô hình RFM rộng hơn, phân tích khách hàng dựa trên hành vi chi tiêu và mức độ tương tác qua email của họ",
2064
2064
  "_PREDICT_MODEL_PROPENSITY_TO_BUY_MODEL": "Xu hướng mua mô hình",
@@ -2069,7 +2069,7 @@
2069
2069
  "_PREDICT_MODEL_PREPARE_DATA": "Chuẩn bị dữ liệu",
2070
2070
  "_PREDICT_MODEL_TRAIN_MODEL": "Mô hình tàu hỏa",
2071
2071
  "_PREDICT_MODEL_SCHEDULE_AND_UPDATE": "Lên lịch & Cập nhật",
2072
- "_PREDICT_MODEL_DATA_INPUTS": "Đầu vào dữ liệu",
2072
+ "_PREDICT_MODEL_DATA_INPUTS": "Dữ liệu đầu vào",
2073
2073
  "_PREDICT_MODEL_RFM_NAME": "Tên RFM",
2074
2074
  "_PREDICT_MODEL_RFM_DATA_SOURCE": "Nguồn dữ liệu RFM",
2075
2075
  "_PREDICT_MODEL_CUSTOMER_IDENTIFY": "Nhận dạng khách hàng",
@@ -2104,13 +2104,13 @@
2104
2104
  "_PREDICT_MODEL_LABEL_VERY_LOW": "Rất thấp",
2105
2105
  "_PREDICT_MODEL_DATA_UPDATE_TO_SEGMENTS": "Cập nhật dữ liệu cho các phân đoạn",
2106
2106
  "_PREDICT_MODEL_DATE_UPDATE_TO_ATTRIBUTES": "Cập nhật ngày cho thuộc tính",
2107
- "_PREDICT_MODEL_CREATE_NEW_SEGMENT": "Tạo phân khúc mới",
2107
+ "_PREDICT_MODEL_CREATE_NEW_SEGMENT": "Tạo phân đoạn mới",
2108
2108
  "_PREDICT_MODEL_UPDATE_INTO_EXISTING_SEGMENT": "Cập nhật vào các phân khúc hiện có",
2109
2109
  "_PREDICT_MODEL_CREATE_NEW_ATTRIBUTE": "Tạo thuộc tính mới",
2110
2110
  "_PREDICT_MODEL_UPDATE_INTO_EXISTING_ATTRIBUTE": "Cập nhật vào các thuộc tính hiện có",
2111
2111
  "_PREDICT_MODEL_SELECT_SEGMENT": "Chọn đoạn",
2112
2112
  "_PREDICT_MODEL_SELECT_ATTRIBUTE": "Chọn thuộc tính",
2113
- "_PREDICT_MODEL_CANNOT_LOSE_THEM": "Không thể đánh mất chúng",
2113
+ "_PREDICT_MODEL_CANNOT_LOSE_THEM": "Không thể mất chúng",
2114
2114
  "_PREDICT_MODEL_AT_RISK": "Có nguy cơ",
2115
2115
  "_PREDICT_MODEL_LOST_CUSTOMER": "Khách hàng bị mất",
2116
2116
  "_PREDICT_MODEL_LOYAL": "Trung thành",
@@ -2688,5 +2688,18 @@
2688
2688
  "_ZALO_TEMP_SELECT_1": "Đa dạng mẫu tin từ Zalo ",
2689
2689
  "_ZALO_TEMP_SELECT_2": "Các mẫu tin này đặc biệt chỉ dành cho tài khoản chính thức trên Zalo. Nhấn",
2690
2690
  "_ZALO_TEMP_SELECT_3": "vào đây",
2691
- "_ZALO_TEMP_SELECT_4": "để tạo kết nối."
2691
+ "_ZALO_TEMP_SELECT_4": "để tạo kết nối.",
2692
+ "_USER_GUIDE_IP_RESTRICTION_IP_ADDRESS": "Nhập một địa chỉ IP (192.168.1.1) hoặc một khoảng IP (192.168.1.1 - 192.168.1.10)",
2693
+ "_TITLE_IP_RESTRICTION_SPECIFIC_ACCOUNTS": "Tài khoản cụ thể",
2694
+ "_ERROR_IP_RESTRICTION_ADD_ACCOUNT": "Vui lòng chọn ít nhất một tài khoản hoặc chọn tất cả tài khoản để thay thế",
2695
+ "_USER_GUIDE_IP_RESTRICTION_GUIDE_1": "Điều gì xảy ra khi một tài khoản bị giới hạn ở một địa chỉ IP cụ thể?",
2696
+ "_USER_GUIDE_IP_RESTRICTION_GUIDE_2": "Tài khoản này chỉ truy cập CDP qua một địa chỉ IP cụ thể. Nếu bạn tạo một địa chỉ IP và áp dụng cho tất cả các tài khoản, quyền truy cập sẽ bị hạn chế đối với tất cả các tài khoản, bao gồm cả những tài khoản mới được tạo trong tương lai.",
2697
+ "_USER_GUIDE_IP_RESTRICTION_GUIDE_3": "Thêm tài khoản bạn muốn hạn chế từ cửa sổ bật lên",
2698
+ "_USER_GUIDE_IP_RESTRICTION_GUIDE_4": "Làm thế nào để tạo nhiều địa chỉ IP hoặc khoảng IP cùng một lúc",
2699
+ "_USER_GUIDE_IP_RESTRICTION_GUIDE_5": "Rất đơn giản: chỉ cần nhập nhiều IP đơn lẻ hoặc các khoảng được phân cách bằng dấu phẩy. Ví dụ: 192.168.1.1, 192.168.1.5, 192.168.1.7 - 192.168.1.8",
2700
+ "_USER_GUIDE_IP_RESTRICTION_GUIDE_6": "Cách hạn chế quyền truy cập đối với các tài khoản cụ thể",
2701
+ "_TITLE_IP_RESTRICTION_IP_ADDRESS": "Địa chỉ IP",
2702
+ "_USER_GUIDE_IP_RESTRICTION_ENTER_ALLOW_IP": "Nhập địa chỉ IPv4 hoặc IPv6 muốn cho phép",
2703
+ "_USER_GUIDE_IP_RESTRICTION_DESCRIPTION": "Mô tả địa chỉ IP của bạn",
2704
+ "_USER_GUIDE_IP_RESTRICTION_GUIDE_7": "Nhấp vào <strong>Lưu</strong> để xác nhận thay đổi của bạn"
2692
2705
  }
@@ -1,3 +1,4 @@
1
+ import { TEnv } from '../../types/config';
1
2
  export type TGetAccountList = {
2
3
  domain: string;
3
4
  appCode: string;
@@ -8,6 +9,21 @@ export type TGetAccountList = {
8
9
  _token: string;
9
10
  _app_code: string;
10
11
  };
12
+ type CheckIpAccess = {
13
+ domain: string;
14
+ userId?: string;
15
+ accountId?: string;
16
+ token?: string;
17
+ };
18
+ type RequestAccess = {
19
+ env: TEnv;
20
+ userId?: string;
21
+ accountId?: string;
22
+ token?: string;
23
+ };
11
24
  export declare const permissionService: {
12
25
  getAccountList: (config: TGetAccountList) => Promise<any>;
26
+ checkIpAccess: (config: CheckIpAccess) => Promise<any>;
27
+ requestAccess: (config: RequestAccess) => Promise<undefined>;
13
28
  };
29
+ export {};
@@ -1,5 +1,6 @@
1
1
  import axios from 'axios';
2
2
  import { get } from 'lodash';
3
+ import { APP_CODES, APP_IAM_DOMAIN } from '../../constants';
3
4
  const permissionPath = '/api/permission/index';
4
5
  export const permissionService = {
5
6
  getAccountList: async (config) => {
@@ -19,4 +20,41 @@ export const permissionService = {
19
20
  return Promise.reject(error);
20
21
  }
21
22
  },
23
+ checkIpAccess: async (config) => {
24
+ try {
25
+ const { domain, userId, accountId, token } = config;
26
+ const response = await axios({
27
+ method: 'GET',
28
+ url: `${domain}/api/ip-restriction/index`,
29
+ params: {
30
+ type: 'check-ip-access',
31
+ _user_id: userId,
32
+ _account_id: accountId,
33
+ _token: token,
34
+ },
35
+ });
36
+ return get(response, 'data.data.hasAccess', false);
37
+ }
38
+ catch (error) {
39
+ return Promise.reject(error);
40
+ }
41
+ },
42
+ requestAccess: async (config) => {
43
+ try {
44
+ const { env, userId, accountId, token } = config;
45
+ await axios({
46
+ method: 'GET',
47
+ url: `${APP_IAM_DOMAIN[APP_CODES.DATAFLOWS][env]}/api/account/request-access`,
48
+ params: {
49
+ _user_id: userId,
50
+ _account_id: accountId,
51
+ _token: token,
52
+ },
53
+ });
54
+ // return get(response, 'data.data.hasAccess', false);
55
+ }
56
+ catch (error) {
57
+ return Promise.reject(error);
58
+ }
59
+ },
22
60
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antscorp/antsomi-ui",
3
- "version": "1.3.5-beta.849",
3
+ "version": "1.3.5-beta.850",
4
4
  "description": "An enterprise-class UI design language and React UI library.",
5
5
  "sideEffects": [
6
6
  "dist/*",