#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
action.allEventToProfilePropertiesAction.description=Copies all event properties directly to profile properties
action.allEventToProfilePropertiesAction.name=Copy all event properties to profile properties
action.evaluateProfileSegmentsAction.description=Calculates the segments that the current profile belongs to
action.evaluateProfileSegmentsAction.name=Evaluate profile segments
action.eventToProfilePropertyAction.description=Copies an event property to a profile property
action.eventToProfilePropertyAction.name=Copy event property to profile property
action.incrementInterestsValuesAction.description=Merge profile profiles based on a property with a shared identifying value
action.incrementInterestsValuesAction.name=Merge profile profiles based on a property with a shared identifying value
action.mergeProfilesOnPropertyAction.description=Merge profile profiles based on a property with a shared identifying value
action.mergeProfilesOnPropertyAction.mergeProfilesOnProperty=Merge profile profiles based on property
action.mergeProfilesOnPropertyAction.name=Merge profile profiles
action.sendEventAction.name=Send event
action.setEventOccurenceCountAction.name=Set event occurrence count
action.setPropertyAction.description=Sets profile property to a predefined value
action.setPropertyAction.name=Set profile property
action.setPropertyAction.setProperty=Set property
action.setPropertyAction.to=to
condition.booleanCondition.and=AND
condition.booleanCondition.description=Logical AND/OR operator
condition.booleanCondition.name=AND/OR
condition.booleanCondition.or=OR
condition.eventPropertyCondition.name=Event property
condition.eventTypeCondition.description=A configured event condition
condition.eventTypeCondition.eventNamed=Event named
condition.eventTypeCondition.hasOccurred=has occurred.
condition.eventTypeCondition.name=Event
condition.formEventCondition.name=Form event
condition.geoLocationByPointSessionCondition.name=Geolocation by point
condition.geoLocationSessionCondition.country=Country
condition.geoLocationSessionCondition.name=Geolocation by country
condition.geoLocationSessionCondition.oneOf=one of
condition.goalMatchCondition.name=Goal match
condition.loginEventCondition.description=A condition to match event logins
condition.loginEventCondition.name=Login event
condition.matchAllCondition.description=Match all profiles
condition.matchAllCondition.name=Match all
condition.newVisitorCondition.name=New visitor
condition.notCondition.description=Logical not operator / invert condition
condition.notCondition.name=Not
condition.notCondition.not=Does not match the following condition
condition.pageViewEventCondition.description=A page has been viewed
condition.pageViewEventCondition.hasBeenViewed=has been viewed
condition.pageViewEventCondition.name=Page view event
condition.pageViewEventCondition.pagePath=Page path
condition.pageViewEventCondition.pageWithUrl=Page with URL
condition.pageViewEventCondition.viewed=Page viewed in language
condition.profileInterestCondition.name=Profile interest
condition.profileInterestCondition.profileInterestIn=Profile interest in
condition.profilePropertyCondition.description=A condition on a profile property
condition.profilePropertyCondition.name=Profile property
condition.profileSegmentCondition.description=The profile is in a segment
condition.profileSegmentCondition.name=Profile segment
condition.profileSegmentCondition.profileMatches=Profile matches
condition.profileSegmentCondition.profileMatches.all=all these segments
condition.profileSegmentCondition.profileMatches.none=none of these segments
condition.profileSegmentCondition.profileMatches.some=some of these segments
condition.profileUpdatedEventCondition.description=A profile profile has been updated
condition.profileUpdatedEventCondition.name=Updated profile event
condition.propertyCondition.event=Event
condition.propertyCondition.is=is
condition.propertyCondition.profile=Profile
condition.propertyCondition.session=Session
condition.returningVisitorCondition.name=Returning visitor
condition.sessionCreatedEventCondition.description=A profile session has been created
condition.sessionCreatedEventCondition.name=Session created event
condition.sessionDurationCondition.description=The session duration
condition.sessionDurationCondition.max=Maximum session duration (seconds)
condition.sessionDurationCondition.min=Minimum session duration (seconds)
condition.sessionDurationCondition.name=Session duration
condition.sessionPropertyCondition.name=Session property
