diff --git a/README.md b/README.md index 37ae93c9..3dea0dd7 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,26 @@ Video analysis and modeling tool built on the Open Source Physics (OSP) framewor This code requires the OSP Core Library available in the OpenSourcePhysics/osp repository. -Optional Xuggle video engine support is available in the OpenSourcePhysics/video-engines repository. Without a video engine Tracker will only open images (JPEG, PNG) and animated GIFs. +Optional video engine support (FFMPeg on Win/OSX/linux, QuickTime on Win/OSX) is available in the OpenSourcePhysics/video-engines repository. Without a video engine Tracker will only open images (JPEG, PNG) and animated GIFs. Note: Tracker includes classes to handle apple events that to compile require the Apple Java Extensions library (AppleJavaExtensions.jar) which can be downloaded here. + + +Installation +============ + +DEB-based: + +``` +sudo sh -c "echo 'deb http://download.opensuse.org/repositories/home:/NickKolok:/osptracker/xUbuntu_16.04/ /' > /etc/apt/sources.list.d/home:NickKolok:osptracker.list" +wget -nv https://download.opensuse.org/repositories/home:NickKolok:osptracker/xUbuntu_16.04/Release.key -O Release.key +sudo apt-key add - < Release.key +sudo add-apt-repository ppa:jonathonf/ffmpeg-4 +sudo apt-get update +sudo apt-get install osptracker +``` + +(you may need to enable `universe` repo in some Ubuntu versions to install `ffmpeg`). + +RPM-based: +see https://software.opensuse.org//download.html?project=home%3ANickKolok%3Aosptracker&package=osptracker diff --git a/src/org/opensourcephysics/cabrillo/tracker/AnalyticParticle.java b/src/org/opensourcephysics/cabrillo/tracker/AnalyticParticle.java index 84661a24..5a4c590f 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/AnalyticParticle.java +++ b/src/org/opensourcephysics/cabrillo/tracker/AnalyticParticle.java @@ -93,7 +93,7 @@ protected void reset() { dt = trackerPanel.getPlayer().getMeanStepDuration() / (1000*tracePtsPerStep); VideoClip clip = trackerPanel.getPlayer().getVideoClip(); // find last frame included in both model and clip - int end = Math.min(getEndFrame(), clip.getLastFrameNumber()); + int end = Math.min(getEndFrame(), clip.getFrameCount()-1); while (end>getStartFrame() && !clip.includesFrame(end)) { end--; } @@ -119,7 +119,7 @@ protected void reset() { // mark a step at firstFrameInClip steps.setLength(firstFrameInClip+1); PositionStep step = (PositionStep)getStep(firstFrameInClip); - for (int i = 0; i>> trackFrameData - = new HashMap>>(); - private int lineSpread = -1; // positive for 1D, negative for 2D tracking + static boolean neverPause = true; // TODO: to core, make not static + + static { + //TODO: can it be moved to initialization of static members? + dotted = new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 8, DOTTED_LINE, 0); + dashed = new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 8, DASHED_LINE, 0); + selectionShape = solidBold.createStrokedShape(hitRect); + format.setMinimumIntegerDigits(1); + format.setMinimumFractionDigits(1); + format.setMaximumFractionDigits(1); + String path = "/org/opensourcephysics/cabrillo/tracker/resources/images/green_light.gif"; //$NON-NLS-1$ + searchIcon = ResourceLoader.getIcon(path); + path = "/org/opensourcephysics/cabrillo/tracker/resources/images/red_light.gif"; //$NON-NLS-1$ + stopIcon = ResourceLoader.getIcon(path); + path = "/org/opensourcephysics/cabrillo/tracker/resources/images/gray_light.gif"; //$NON-NLS-1$ + graySearchIcon = ResourceLoader.getIcon(path); + } + + // instance fields + private TrackerPanel trackerPanel; + private Wizard wizard; + private double minMaskRadius = 4; + private Handle maskHandle = new Handle(); + private Corner maskCorner = new Corner(); + private TPoint maskCenter = new TPoint(); + private Handle searchHandle = new Handle(); + private Corner searchCorner = new Corner(); + private TPoint searchCenter = new TPoint(); + private Rectangle2D searchRect2D = new Rectangle2D.Double(); + private Shape searchShape, maskShape, matchShape; + private Shape searchHitShape, maskHitShape; + private Mark mark; // draws the mask, target and/or search area + private Point[] screenPoints = {new Point()}; // used for footprints + private boolean maskVisible, targetVisible, searchVisible; + private Runnable stepper; + private boolean stepping, active, paused, marking; + private int autoskipsRemained = 0; private boolean isInteracting; - private double[][] derivatives1 = new double[predictionLookback-1][]; - private double[][] derivatives2 = new double[predictionLookback-1][]; - private double[][] derivatives3 = new double[predictionLookback-1][]; - - - /** - * Constructs an AutoTracker for a specified TrackerPanel. - * - * @param panel the TrackerPanel - */ - public AutoTracker(TrackerPanel panel) { - trackerPanel = panel; - trackerPanel.addDrawable(this); - trackerPanel.addPropertyChangeListener("selectedpoint", this); //$NON-NLS-1$ - trackerPanel.addPropertyChangeListener("selectedtrack", this); //$NON-NLS-1$ - trackerPanel.addPropertyChangeListener("track", this); //$NON-NLS-1$ - trackerPanel.addPropertyChangeListener("clear", this); //$NON-NLS-1$ - trackerPanel.addPropertyChangeListener("video", this); //$NON-NLS-1$ - trackerPanel.addPropertyChangeListener("stepnumber", this); //$NON-NLS-1$ - stepper = new Runnable() { - public void run() { - TTrack track = getTrack(); - if (!active || track==null) { - return; - } - // if never pausing, don't look ahead - boolean moveSearchArea = !neverPause; - if (markCurrentFrame(moveSearchArea) || neverPause) { - // successfully found/marked a good match - if (!canStep()) { // reached the end - stop(true, true); - return; - } - if (stepping) { // move to the next step - wizard.refreshInfo(); - repaint(); - trackerPanel.getPlayer().step(); - return; - } - // not stepping, so stop - stop(true, true); - } - else { // failed to find or mark a match, so pause or stop - if (!stepping) - stop(true, false); - else { - paused = true; - if (track instanceof PointMass) { - PointMass pointMass = (PointMass)track; - pointMass.updateDerivatives(); - } - track.firePropertyChange("steps", null, null); //$NON-NLS-1$ - wizard.refreshGUI(); - } - } - repaint(); - } - }; + + private AutoTrackerControl control = new TrackerPanelControl(); + private AutoTrackerFeedback feedback = new TrackerPanelFeedback(); + public AutoTrackerCore core = new AutoTrackerCore(control, feedback); + + private AutoTrackerOptions options = null; + + /** + * Constructs an AutoTracker for a specified TrackerPanel. + * + * @param panel the TrackerPanel + */ + public AutoTracker(TrackerPanel panel) { + trackerPanel = panel; + trackerPanel.addDrawable(this); + trackerPanel.addPropertyChangeListener("selectedpoint", this); //$NON-NLS-1$ + trackerPanel.addPropertyChangeListener("selectedtrack", this); //$NON-NLS-1$ + trackerPanel.addPropertyChangeListener("track", this); //$NON-NLS-1$ + trackerPanel.addPropertyChangeListener("clear", this); //$NON-NLS-1$ + trackerPanel.addPropertyChangeListener("video", this); //$NON-NLS-1$ + trackerPanel.addPropertyChangeListener("stepnumber", this); //$NON-NLS-1$ + + options = core.options; // TODO: do we need this? + + options.changes.addPropertyChangeListener("maskWidth", propertyChangeEvent -> refreshCurrentMask()); + options.changes.addPropertyChangeListener("maskHeight", propertyChangeEvent -> refreshCurrentMask()); + options.changes.addPropertyChangeListener("maskShapeType", propertyChangeEvent -> + refreshKeyFrame(core.getFrame(control.getFrameNumber()).getKeyFrame())); + + + stepper = new Runnable() { + public void run() { + TTrack track = getTrack(); + if (!active || track == null) { + return; + } + // if never pausing, don't look ahead + boolean moveSearchArea = !neverPause; + if (markCurrentFrame(moveSearchArea) || neverPause) { + // successfully found/marked a good match + if (!control.canStep()) { // reached the end + stop(true, true); + return; + } + if (stepping) { // move to the next step + wizard.refreshInfo(); + repaint(); + control.step(); + return; + } + // not stepping, so stop + stop(true, true); + } else { // failed to find or mark a match, so pause or stop + if (!stepping) + stop(true, false); + else { + paused = true; + if (track instanceof PointMass) { + PointMass pointMass = (PointMass) track; + pointMass.updateDerivatives(); + } + track.firePropertyChange("steps", null, null); //$NON-NLS-1$ + wizard.refreshGUI(); + } + } + repaint(); + } + }; wizard = new Wizard(); - // place near top right corner of frame - Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); - TFrame frame = trackerPanel.getTFrame(); - Point frameLoc = frame.getLocationOnScreen(); - int w = wizard.getWidth()+8; - int x = Math.min(screen.width-w, frameLoc.x+frame.getWidth()-w); - int y = trackerPanel.getLocationOnScreen().y; - wizard.setLocation(x, y); - } - - /** - * Sets the track to mark when matches are found. - * - * @param newTrack the track - */ - protected void setTrack(TTrack newTrack) { - if (newTrack!=null && !newTrack.isAutoTrackable()) - newTrack = null; - TTrack track = getTrack(); - if (track==newTrack) return; - if (track!=null) { - track.removePropertyChangeListener("step", this); //$NON-NLS-1$ - track.removePropertyChangeListener("name", this); //$NON-NLS-1$ - track.removePropertyChangeListener("color", this); //$NON-NLS-1$ - track.removePropertyChangeListener("footprint", this); //$NON-NLS-1$ - } - track = newTrack; - if (track!=null) { - trackID = track.getID(); - trackerPanel.setSelectedTrack(track); - track.addPropertyChangeListener("step", this); //$NON-NLS-1$ - track.addPropertyChangeListener("name", this); //$NON-NLS-1$ - track.addPropertyChangeListener("color", this); //$NON-NLS-1$ - track.addPropertyChangeListener("footprint", this); //$NON-NLS-1$ - track.setVisible(true); - int n = trackerPanel.getFrameNumber(); - FrameData frame = getFrame(n); + } + + + /** + * For external purposes + * TODO: should be redundant + * + * @return current track + */ + public TTrack getTrack() { + return core.getTrack(); + } + + public FrameData getFrame(int n) { + return core.getFrame(n); + } + + /** + * Sets the track to mark when matches are found. + * + * @param newTrack the track + */ + protected void setTrack(TTrack newTrack) { + if (newTrack != null && !newTrack.isAutoTrackable()) + newTrack = null; + TTrack track = getTrack(); + if (track == newTrack) + return; + feedback.onTrackUnbind(track); + track = newTrack; + if (track != null) { + core.trackID = track.getID(); + feedback.setSelectedTrack(track); + feedback.onTrackBind(track); + int n = control.getFrameNumber(); + FrameData frame = getFrame(n); TPoint[] searchPts = frame.getSearchPoints(true); if (searchPts != null) setSearchPoints(searchPts[0], searchPts[1]); - } - else { - trackID = -1; - } - wizard.refreshGUI(); - } - - /** - * Adds a key frame for a given track point and mask center position. - * - * @param p the track point - * @param x the mask center x - * @param y the mask center y - */ - protected void addKeyFrame(TPoint p, double x, double y) { - int n = trackerPanel.getFrameNumber(); - Target target = new Target(); - Shape mask = new Ellipse2D.Double(); - maskCenter.setLocation(x, y); - maskCorner.setLocation(x+defaultMaskSize[0], y+defaultMaskSize[1]); - searchCenter.setLocation(x, y); - searchCorner.setLocation(x+defaultSearchSize[0], y+defaultSearchSize[1]); - Map frames = getFrameData(); - KeyFrame keyFrame = new KeyFrame(p, mask, target); - frames.put(n, keyFrame); - clearSearchPointsDownstream(); - refreshSearchRect(); - refreshKeyFrame(keyFrame); - getWizard().setVisible(true); -// getWizard().refreshGUI(); -// search(false, false); // don't skip this frame and don't keep stepping - trackerPanel.repaint(); - } - - /** - * Starts the search process. - * - * @param startWithThis true to search the current frame - * @param keepGoing true to continue stepping after the first search - */ - protected void search(boolean startWithThis, boolean keepGoing) { - stepping = stepping || keepGoing; - wizard.changed = false; - active = true; // actively searching - paused = false; - if (!startWithThis || markCurrentFrame(false) || neverPause) { - if (canStep() && (!startWithThis||stepping)) { - trackerPanel.getPlayer().step(); - return; - } - if (startWithThis && !stepping) { // mark this frame only - active = false; - } - // reached end frame, so stop - else { - stop(true, true); - } - } - else { - // tried to mark this frame and failed - paused = true; - } - getWizard().refreshGUI(); - getWizard().helpButton.requestFocusInWindow(); - repaint(); - } - - /** - * Stops the search process. - * - * @param now true to stop now - * @param update true to update derivatives - */ - protected void stop(boolean now, boolean update) { - stepping = false; // don't keep stepping - active = !now && !paused; - paused = false; - wizard.prepareForFixedSearch(false); - wizard.refreshGUI(); - if (update) { - TTrack track = getTrack(); + } else { + core.trackID = -1; + } + feedback.onSetTrack(); + } + + /** + * Starts the search process. + * + * @param startWithThis true to search the current frame + * @param keepGoing true to continue stepping after the first search + */ + protected void search(boolean startWithThis, boolean keepGoing) { + stepping = stepping || keepGoing; + wizard.changed = false; + active = true; // actively searching + paused = false; + if (!startWithThis || markCurrentFrame(false) || neverPause) { + if (control.canStep() && (!startWithThis || stepping)) { + control.step(); + return; + } + if (startWithThis && !stepping) { // mark this frame only + active = false; + } + // reached end frame, so stop + else { + stop(true, true); + } + } else { + // tried to mark this frame and failed + paused = true; + } + getWizard().refreshGUI(); + getWizard().helpButton.requestFocusInWindow(); + repaint(); + } + + /** + * Stops the search process. + * + * @param now true to stop now + * @param update true to update derivatives + */ + protected void stop(boolean now, boolean update) { + stepping = false; // don't keep stepping + active = !now && !paused; + paused = false; + wizard.prepareForFixedSearch(false); + wizard.refreshGUI(); + if (update) { + TTrack track = getTrack(); if (track instanceof PointMass) { - PointMass pointMass = (PointMass)track; + PointMass pointMass = (PointMass) track; pointMass.updateDerivatives(); } - track.firePropertyChange("steps", null, null); //$NON-NLS-1$ - } - } - - /** - * Marks a new step in the current frame if a match is found. - * - * @param predictLoc true to use look-ahead prediction for setting the search loc - * @return true if a new step was marked - */ - public boolean markCurrentFrame(boolean predictLoc) { - TTrack track = getTrack(); - if (track==null) return false; - trackerPanel.setSelectedTrack(track); - int n = trackerPanel.getFrameNumber(); - FrameData frame = getFrame(n); - KeyFrame keyFrame = frame.getKeyFrame(); - if (keyFrame!=null && !track.isStepComplete(n)) { - TPoint p = findMatchTarget(predictLoc); - double[] peakWidthAndHeight = frame.getMatchWidthAndHeight(); - if (p!=null - && (Double.isInfinite(peakWidthAndHeight[1]) - || peakWidthAndHeight[1]>=goodMatch)) { - marking = true; - track.autoTrackerMarking = track.isAutoAdvance(); - p = track.autoMarkAt(n, p.x, p.y); - frame.setAutoMarkPoint(p); - track.autoTrackerMarking = false; - return true; - } - if (p==null) { - frame.setMatchIcon(null); - } - } - return false; - } - - /** - * Gets the predicted target point in a specified video frame, - * based on previously marked steps. - * - * @param frameNumber the frame number - * @return the predicted target - */ - public TPoint getPredictedMatchTarget(int frameNumber) { - boolean success = false; - VideoClip clip = trackerPanel.getPlayer().getVideoClip(); - int stepNumber = clip.frameToStep(frameNumber); - - // get position data at previous steps - TPoint[] prevPoints = new TPoint[predictionLookback]; - TTrack track = getTrack(); - if (stepNumber>0 && track!=null) { - for (int j = 0; j= 0) { - int n = clip.stepToFrame(stepNumber-j-1); - FrameData frame = getFrame(n); - if (track.steps.isAutofill() && !frame.searched) - prevPoints[j] = null; - else { - prevPoints[j] = frame.getMarkedPoint(); - } - } - } - } - - // return null (no prediction) if there is no recent position data - if (prevPoints[0]==null) - return null; - - // set predictedTarget to prev position - predictedTarget.setLocation(prevPoints[0].getX(), prevPoints[0].getY()); - if (!lookAhead || prevPoints[1]==null) { - // no recent velocity or acceleration data available - success = true; - } - - if (!success) { - // get derivatives - double[][] veloc = getDerivatives(prevPoints, 1); - double[][] accel = getDerivatives(prevPoints, 2); - double[][] jerk = getDerivatives(prevPoints, 3); - - double vxmax=0, vxmean=0, vymax=0, vymean=0; - int n = 0; - for (int i=0; i< veloc.length; i++) { - if (veloc[i]!=null) { - n++; - vxmax = Math.max(vxmax, Math.abs(veloc[i][0])); - vxmean += veloc[i][0]; - vymax = Math.max(vymax, Math.abs(veloc[i][1])); - vymean += veloc[i][1]; - } + track.firePropertyChange("steps", null, null); //$NON-NLS-1$ + } + } + + /** + * Called when a position has been marked + * + * @param n Frame number + * @param p Marked point + * @return + */ + public boolean onMarked(int n, TPoint p) { + TTrack track = getTrack(); + if (track == null) return false; + track.autoTrackerMarking = track.isAutoAdvance(); + p = track.autoMarkAt(n, p.x, p.y); + getFrame(n).setAutoMarkPoint(p); + track.autoTrackerMarking = false; + return true; + } + + /** + * Called when a frame has been skipped + * + * @param n Frame number + * @return + */ + public boolean onSkipped(int n) { + getTrack().skippedStepWarningSuppress = true; + return true; + } + + /** + * @param n Frame number + * @return true if current frame should not be marked + */ + public boolean isStepComplete(int n) { + return getTrack().isStepComplete(n); + } + + public boolean prepareMarking(int frameNumber) { + TTrack track = getTrack(); + if (track == null) return false; + feedback.setSelectedTrack(track); + return true; + } + + /** + * Marks a new step in the current frame if a match is found. + * + * @param predictLoc true to use look-ahead prediction for setting the search loc + * @return true if a new step was marked or skipped automatically + */ + public boolean markCurrentFrame(boolean predictLoc) { + int n = control.getFrameNumber(); + if (!prepareMarking(n)) { + return false; + } + FrameData frame = getFrame(n); + KeyFrame keyFrame = frame.getKeyFrame(); + if (keyFrame != null && !isStepComplete(n)) { + TPoint p = findMatchTarget(predictLoc); + double[] peakWidthAndHeight = frame.getMatchWidthAndHeight(); + if (p != null + && (Double.isInfinite(peakWidthAndHeight[1]) + || options.isMatchGood(peakWidthAndHeight[1])) + ) { + marking = true; + + boolean result = onMarked(n, p); + + // We can perform autoskips if needed + autoskipsRemained = options.getAutoskipCount(); + return result; } - vxmean = Math.abs(vxmean/n); - vymean = Math.abs(vymean/n); - - double axmax=0, axmean=0, aymax=0, aymean=0; - n = 0; - for (int i=0; i< accel.length; i++) { - if (accel[i]!=null) { - n++; - axmax = Math.max(axmax, Math.abs(accel[i][0])); - axmean += accel[i][0]; - aymax = Math.max(aymax, Math.abs(accel[i][1])); - aymean += accel[i][1]; + if (p == null) { + if (autoskipsRemained > 0) { + autoskipsRemained--; + return onSkipped(n); } + frame.setMatchIcon(null); } - axmean = Math.abs(axmean/n); - aymean = Math.abs(aymean/n); - - double jxmax=0, jxmean=0, jymax=0, jymean=0; - n = 0; - for (int i=0; i< jerk.length; i++) { - if (jerk[i]!=null) { - n++; - jxmax = Math.max(jxmax, Math.abs(jerk[i][0])); - jxmean += jerk[i][0]; - jymax = Math.max(jymax, Math.abs(jerk[i][1])); - jymean += jerk[i][1]; - } + } + return false; + } + + /** + * Finds the match target, if any. Also saves search center and corner. + * + * @param predict true to predict the location before searching + * @return the match target, or null if no match is found + */ + public TPoint findMatchTarget(boolean predict) { + int n = control.getFrameNumber(); + FrameData frame = getFrame(n); + // if predicting, move searchRect to predicted location + if (predict) { + TPoint prediction = core.getPredictedMatchTarget(n); + if (prediction != null) { + TPoint p = core.getMatchCenter(prediction); + setSearchPoints(p, null); } - jxmean = Math.abs(jxmean/n); - jymean = Math.abs(jymean/n); - - boolean xVelocValid = prevPoints[2]==null || Math.abs(accel[0][0]) -1 && i != track.getTargetIndex()) { + track.setTargetIndex(i); + + // get frame for new index and reposition search points and mask + frame = getFrame(n); + TPoint[] searchPts = frame.getSearchPoints(true); + if (searchPts != null) + setSearchPoints(searchPts[0], searchPts[1]); + + keyFrame = frame.getKeyFrame(); + if (keyFrame != null) { + maskCenter.setLocation(keyFrame.getMaskPoints()[0]); + maskCorner.setLocation(keyFrame.getMaskPoints()[1]); + } + + wizard.refreshGUI(); + needsRepaint = true; } - else if (prev instanceof Handle || prev instanceof Target) { - needsRepaint = true; - } } - Step step = trackerPanel.getSelectedStep(); - TPoint next = (TPoint)e.getNewValue(); - if (next==maskHandle || next==maskCorner - || next==searchHandle || next==searchCorner - || (keyFrame!=null && next==keyFrame.getTarget())) { - trackerPanel.setSelectedTrack(track); - needsRepaint = true; - } - else if (next!=null && step!=null && step.getTrack()==track) { - int i = step.getPointIndex(next); - if (i>-1 && i!=track.getTargetIndex()) { - track.setTargetIndex(i); - - // get frame for new index and reposition search points and mask - frame = getFrame(n); - TPoint[] searchPts = frame.getSearchPoints(true); - if (searchPts != null) - setSearchPoints(searchPts[0], searchPts[1]); - - keyFrame = frame.getKeyFrame(); - if (keyFrame!=null) { - maskCenter.setLocation(keyFrame.getMaskPoints()[0]); - maskCorner.setLocation(keyFrame.getMaskPoints()[1]); - } - - wizard.refreshGUI(); - needsRepaint = true; - } - } if (needsRepaint) repaint(); - } - else if (name.equals("selectedtrack") && wizard!=null) { //$NON-NLS-1$ + } else if (name.equals("selectedtrack") && wizard != null) { //$NON-NLS-1$ wizard.refreshGUI(); - } - else if (name.equals("track") && e.getOldValue()!=null) { //$NON-NLS-1$ + } else if (name.equals("track") && e.getOldValue() != null) { //$NON-NLS-1$ // track has been deleted - TTrack deletedTrack = (TTrack)e.getOldValue(); - trackFrameData.remove(deletedTrack); - if (deletedTrack==track) { - setTrack(null); - } - } - else if (name.equals("clear")) { //$NON-NLS-1$ + TTrack deletedTrack = (TTrack) e.getOldValue(); + // TODO: move the trackFrameData operations to core + core.trackFrameData.remove(deletedTrack); + if (deletedTrack == track) { + setTrack(null); + } + } else if (name.equals("clear")) { //$NON-NLS-1$ // tracks have been cleared - trackFrameData.clear(); - setTrack(null); + core.trackFrameData.clear(); + setTrack(null); } - - if (wizard==null || !wizard.isVisible()) return; - + + if (wizard == null || !wizard.isVisible()) return; + if (name.equals("video") || name.equals("name") //$NON-NLS-1$ //$NON-NLS-2$ || name.equals("color") || name.equals("footprint")) { //$NON-NLS-1$ //$NON-NLS-2$ - wizard.refreshGUI(); - } - else if (track==null && name.equals("stepnumber")) { //$NON-NLS-1$ + wizard.refreshGUI(); + } else if (track == null && name.equals("stepnumber")) { //$NON-NLS-1$ wizard.refreshGUI(); } - if (track==null || trackerPanel.getVideo()==null) { - return; - } + if (track == null || trackerPanel.getVideo() == null) { + return; + } if (name.equals("step") && wizard.isVisible()) { //$NON-NLS-1$ if (!marking) { // not marked by this autotracker - n = ((Integer)e.getNewValue()).intValue(); - frame = getFrame(n); - frame.decided = true; // point dragged by user? - if (track.getStep(n)==null) { // step was deleted + n = ((Integer) e.getNewValue()).intValue(); + frame = getFrame(n); + frame.decided = true; // point dragged by user? + if (track.getStep(n) == null) { // step was deleted frame.clear(); - } - else if (!frame.isKeyFrame()) { // step was marked or moved - frame.setMatchIcon(null); + } else if (!frame.isKeyFrame()) { // step was marked or moved + frame.setMatchIcon(null); paused = false; } } wizard.refreshGUI(); marking = false; - } - else if (name.equals("stepnumber")) { //$NON-NLS-1$ + } else if (name.equals("stepnumber")) { //$NON-NLS-1$ TPoint[] searchPts = frame.getSearchPoints(true); if (searchPts != null) setSearchPoints(searchPts[0], searchPts[1]); - else if (lookAhead && keyFrame!=null) { - TPoint prediction = getPredictedMatchTarget(n); - if (prediction != null) { - setSearchPoints(getMatchCenter(prediction), null); - // save search center and corner points - TPoint[] pts = new TPoint[] {new TPoint(searchCenter), new TPoint(searchCorner)}; - frame.setSearchPoints(pts); - } - else { - repaint(); - } + else if (options.isLookAhead() && keyFrame != null) { + TPoint prediction = core.getPredictedMatchTarget(n); + if (prediction != null) { + setSearchPoints(core.getMatchCenter(prediction), null); + // save search center and corner points + TPoint[] pts = new TPoint[]{new TPoint(searchCenter), new TPoint(searchCorner)}; + frame.setSearchPoints(pts); + } else { + repaint(); + } } if (active && !paused) { // actively tracking - if (SwingUtilities.isEventDispatchThread()) - stepper.run(); - else - SwingUtilities.invokeLater(stepper); - } - else if (stepping) { // user set the frame number, so stop stepping + if (SwingUtilities.isEventDispatchThread()) + stepper.run(); + else + SwingUtilities.invokeLater(stepper); + } else if (stepping) { // user set the frame number, so stop stepping stop(true, false); - } - else wizard.refreshGUI(); + } else wizard.refreshGUI(); } } - - // implements Interactive & Measurable methods - public void setEnabled(boolean enabled) {} - public boolean isEnabled() {return true;} - public void setXY(double x, double y) {} - public void setX(double x) {} - public void setY(double y) {} - public double getX() {return 0;} - public double getY() {return 0;} - public double getXMin() {return 0;} - public double getXMax() {return 0;} - public double getYMin() {return 0;} - public double getYMax() {return 0;} - public boolean isMeasured() {return false;} - + //_______________________________ protected methods _________________________ - /** - * Finds the target for the best match found within the specified - * searchRect. Also saves match width, height, center and corner. - * - * @param searchRect the search rectangle - * @return the target, or null if no match found - */ - protected TPoint findMatchTarget(Rectangle searchRect) { - Video video = trackerPanel.getVideo(); - if (video == null) return null; - TemplateMatcher matcher = getTemplateMatcher(); - if (matcher == null) return null; - int n = trackerPanel.getFrameNumber(); - FrameData frame = getFrame(n); - frame.decided = false; // default - - // set template to be matched - matcher.setTemplate(frame.getTemplateToMatch()); - - // get location, width and height of match - TPoint p = null; - BufferedImage image = video.getImage(); - if (lineSpread>=0) { - double theta = trackerPanel.getCoords().getAngle(n); - double x0 = trackerPanel.getCoords().getOriginX(n); - double y0 = trackerPanel.getCoords().getOriginY(n); - p = matcher.getMatchLocation(image, searchRect, x0, y0, theta, lineSpread); // may be null - } - else { - p = matcher.getMatchLocation(image, searchRect); // may be null - } - double[] matchWidthAndHeight = matcher.getMatchWidthAndHeight(); - if (matchWidthAndHeight[1]=goodMatch) { - buildEvolvedTemplate(frame); - return getMatchTarget(center); - } - - return null; - } - - /** - * Builds an evolved template based on data in the specified FrameData - * and the current video image. - * - * @param frame the FrameData frame - */ - protected void buildEvolvedTemplate(FrameData frame) { - TPoint[] matchPts = frame.getMatchPoints(); - if (matchPts==null) return; // can't build template without a match -// System.out.println("building evolved for "+frame.getFrameNumber()); - TemplateMatcher matcher = getTemplateMatcher(); - matcher.setTemplate(frame.getTemplate()); - matcher.setWorkingPixels(frame.getWorkingPixels()); + /** + * Finds the target for the best match found within the specified + * searchRect. Also saves match width, height, center and corner. + * + * @param searchRect the search rectangle + * @return the target, or null if no match found + */ + protected TPoint findMatchTarget(Rectangle searchRect) { + if (!control.isVideoValid()) return null; + TemplateMatcher matcher = core.getTemplateMatcher(); + if (matcher == null) return null; + int n = control.getFrameNumber(); + FrameData frame = getFrame(n); + frame.decided = false; // default + + // set template to be matched + matcher.setTemplate(frame.getTemplateToMatch()); + + // get location, width and height of match + TPoint p = null; + BufferedImage image = control.getImage(); + if (options.getLineSpread() >= 0) { + double theta = control.getCoords().getAngle(n); + double x0 = control.getCoords().getOriginX(n); + double y0 = control.getCoords().getOriginY(n); + p = matcher.getMatchLocation(image, searchRect, x0, y0, theta, options.getLineSpread()); // may be null + } else { + p = matcher.getMatchLocation(image, searchRect); // may be null + } + double[] matchWidthAndHeight = matcher.getMatchWidthAndHeight(); + if (!options.isMatchGood(matchWidthAndHeight[1]) && frame.isAutoMarked()) { + frame.trackPoint = null; + } + + // save match data and searched frames + frame.setMatchWidthAndHeight(matchWidthAndHeight); + frame.searched = true; + // if p is null or match is poor, then clear match points + if (p == null || !options.isMatchPossible(matchWidthAndHeight[1])) { + frame.setMatchPoints(null); + return null; + } + + // successfully found good or possible match: save match data + frame.setMatchImage(matcher.getMatchImage()); Rectangle rect = frame.getKeyFrame().getMask().getBounds(); - // get new image to rebuild template - int x = (int)Math.round(matchPts[2].getX()); - int y = (int)Math.round(matchPts[2].getY()); - BufferedImage source = trackerPanel.getVideo().getImage(); - BufferedImage matchImage = new BufferedImage( - rect.width, rect.height, BufferedImage.TYPE_INT_RGB); - matchImage.createGraphics().drawImage(source, -x, -y, null); - matcher.buildTemplate(matchImage, evolveAlpha, 0); - matcher.setIndex(frame.getFrameNumber()); + TPoint center = new TPoint(p.x + maskCenter.x - rect.getX(), p.y + maskCenter.y - rect.getY()); + TPoint corner = new TPoint( + center.x + options.getMaskWidth() / 2, + center.y + options.getMaskHeight() / 2 + ); + frame.setMatchPoints(new TPoint[]{center, corner, p}); + + // if good match found then build evolved template and return match target + if (options.isMatchGood(matchWidthAndHeight[1])) { + core.buildEvolvedTemplate(frame); + return core.getMatchTarget(center); + } + + return null; + } + + /** + * Refreshes current position of the mask corner + * according to current position of mask center + * and the information from AutoTrackerOptions object. + */ + private void refreshCurrentMask() { + maskCorner.setXY( + maskCenter.x + options.getMaskWidth() / (2 * cornerFactor), + maskCenter.y + options.getMaskHeight() / (2 * cornerFactor) + ); + } + + + /** + * Erases the current mark. + */ + protected void erase() { + if (mark != null) + trackerPanel.addDirtyRegion(mark.getBounds(false)); // old bounds + mark = null; + } + + /** + * Repaints this object. + */ + protected void repaint() { + erase(); + if (getMark() != null) + trackerPanel.addDirtyRegion(mark.getBounds(false)); // new bounds + trackerPanel.repaintDirtyRegion(); + } + + /** + * Disposes of this autotracker. + */ + protected void dispose() { + trackerPanel.removeDrawable(this); + trackerPanel.removePropertyChangeListener("selectedpoint", this); //$NON-NLS-1$ + trackerPanel.removePropertyChangeListener("selectedtrack", this); //$NON-NLS-1$ + trackerPanel.removePropertyChangeListener("track", this); //$NON-NLS-1$ + trackerPanel.removePropertyChangeListener("clear", this); //$NON-NLS-1$ + trackerPanel.removePropertyChangeListener("video", this); //$NON-NLS-1$ + trackerPanel.removePropertyChangeListener("stepnumber", this); //$NON-NLS-1$ + setTrack(null); + core.trackFrameData.clear(); + wizard.dispose(); + trackerPanel.autoTracker = null; + trackerPanel = null; + } + + @Override + public void finalize() { + OSPLog.finer(getClass().getSimpleName() + " recycled by garbage collector"); //$NON-NLS-1$ } - - /** - * Creates a TemplateMatcher based on the current image and mask. - * - * @return a newly created template matcher, or null if no video image exists - */ - protected TemplateMatcher createTemplateMatcher() { - Video video = trackerPanel.getVideo(); - int n = trackerPanel.getFrameNumber(); - FrameData frame = getFrame(n); - KeyFrame keyFrame = frame.getKeyFrame(); - if (video!=null && keyFrame!=null) { - // create template image - Shape mask = keyFrame.getMask(); - BufferedImage source = video.getImage(); - Rectangle rect = mask.getBounds(); - BufferedImage templateImage = new BufferedImage( - rect.width, rect.height, BufferedImage.TYPE_INT_RGB); - templateImage.createGraphics().drawImage(source, -rect.x, -rect.y, null); - // translate mask to (0, 0) relative to template - transform.setToTranslation(-rect.x, -rect.y); - Shape templateRegion = transform.createTransformedShape(mask); - return new TemplateMatcher(templateImage, templateRegion); - } - return null; - } - - // indexFrameData maps point index to frameData - protected Map> getIndexFrameData() { - TTrack track = getTrack(); - Map> indexFrameData = trackFrameData.get(track); - if (indexFrameData==null) { - indexFrameData = new TreeMap>(); - trackFrameData.put(track, indexFrameData); - } - return indexFrameData; - } - - // frameData maps frame number to individual FrameData objects - protected Map getFrameData(int index) { - Map frameData = getIndexFrameData().get(index); - if (frameData==null) { - frameData = new TreeMap(); - getIndexFrameData().put(index, frameData); - } - return frameData; - } - - protected Map getFrameData() { - TTrack track = getTrack(); - int index = track==null? 0: track.getTargetIndex(); - return getFrameData(index); - } - - protected FrameData getFrame(int frameNumber) { - FrameData frame = getFrameData().get(frameNumber); - if (frame==null) { - TTrack track = getTrack(); - int index = track==null? 0: track.getTargetIndex(); - frame = new FrameData(index, frameNumber); - getFrameData().put(frameNumber, frame); - } - return frame; - } - - protected int getIndex(TPoint p) { - int n = p.getFrameNumber(trackerPanel); - TTrack track = getTrack(); - Step step = track.getStep(n); // non-null if marked - if (step!=null) { - for (int i=0; i< step.points.length; i++) { - if (p.equals(step.points[i])) { - return i; - } - } - } - return -1; - } - - protected TTrack getTrack() { - return TTrack.getTrack(trackID); - } - - /** - * Erases the current mark. - */ - protected void erase() { - if (mark != null) - trackerPanel.addDirtyRegion(mark.getBounds(false)); // old bounds - mark = null; - } - - /** - * Repaints this object. - */ - protected void repaint() { - erase(); - if (getMark() != null) - trackerPanel.addDirtyRegion(mark.getBounds(false)); // new bounds - trackerPanel.repaintDirtyRegion(); - } - - /** - * Disposes of this autotracker. - */ - protected void dispose() { - trackerPanel.removeDrawable(this); - trackerPanel.removePropertyChangeListener("selectedpoint", this); //$NON-NLS-1$ - trackerPanel.removePropertyChangeListener("selectedtrack", this); //$NON-NLS-1$ - trackerPanel.removePropertyChangeListener("track", this); //$NON-NLS-1$ - trackerPanel.removePropertyChangeListener("clear", this); //$NON-NLS-1$ - trackerPanel.removePropertyChangeListener("video", this); //$NON-NLS-1$ - trackerPanel.removePropertyChangeListener("stepnumber", this); //$NON-NLS-1$ - setTrack(null); - trackFrameData.clear(); - wizard.dispose(); - trackerPanel.autoTracker = null; - trackerPanel = null; - } - - @Override - public void finalize() { - OSPLog.finer(getClass().getSimpleName()+" recycled by garbage collector"); //$NON-NLS-1$ - } - - /** - * Gets the drawing mark. - * - * @return the mark - */ - protected Mark getMark() { - int n = trackerPanel.getFrameNumber(); - FrameData frame = getFrame(n); - KeyFrame keyFrame = frame.getKeyFrame(); - final TTrack track = getTrack(); - if (track==null || keyFrame==null) return null; - if (mark==null) { - int k = getStatusCode(n); - // refresh target icon on wizard label - Color c = track.getFootprint().getColor(); - target_footprint.setColor(c); - inactive_target_footprint.setColor(c); - corner_footprint.setColor(c); - // define marks for center, corners, target and selection - Mark searchCornerMark=null, maskCornerMark=null, - targetMark=null, selectionMark=null; - // set up transform - AffineTransform toScreen = trackerPanel.getPixelTransform(); - if (!trackerPanel.isDrawingInImageSpace()) { - toScreen.concatenate(trackerPanel.getCoords().getToWorldTransform(n)); - } - // get selected point and define the corresponding screen point - final TPoint selection = trackerPanel.getSelectedPoint(); - Point selectionPt = null; - // refresh search and mask draw and hit shapes - try { + /** + * Gets the drawing mark. + * + * @return the mark + */ + protected Mark getMark() { + int n = control.getFrameNumber(); + FrameData frame = getFrame(n); + KeyFrame keyFrame = frame.getKeyFrame(); + final TTrack track = getTrack(); + if (track == null || keyFrame == null) return null; + if (mark == null) { + int k = core.getStatusCode(n); + // refresh target icon on wizard label + Color c = track.getFootprint().getColor(); + target_footprint.setColor(c); + inactive_target_footprint.setColor(c); + corner_footprint.setColor(c); + // define marks for center, corners, target and selection + Mark searchCornerMark = null, maskCornerMark = null, + targetMark = null, selectionMark = null; + // set up transform + AffineTransform toScreen = trackerPanel.getPixelTransform(); + if (!trackerPanel.isDrawingInImageSpace()) { + toScreen.concatenate(trackerPanel.getCoords().getToWorldTransform(n)); + } + // get selected point and define the corresponding screen point + final TPoint selection = trackerPanel.getSelectedPoint(); + Point selectionPt = null; + // refresh search and mask draw and hit shapes + try { searchShape = toScreen.createTransformedShape(searchRect2D); searchHitShape = solid.createStrokedShape(searchShape); maskShape = toScreen.createTransformedShape(keyFrame.getMask()); @@ -1145,1846 +870,1323 @@ protected Mark getMark() { } catch (Exception e) { return null; } - // check to see if a handle is selected - if (selection == maskHandle) - selectionPt = maskVisible? maskHandle.getScreenPosition(trackerPanel): null; - else if (selection == searchHandle) - selectionPt = searchVisible? searchHandle.getScreenPosition(trackerPanel): null; - // create mask corner mark - if (frame.isKeyFrame()) { - maskCenter.setLocation(keyFrame.getMaskPoints()[0]); - maskCorner.setLocation(keyFrame.getMaskPoints()[1]); - } - screenPoints[0] = maskCorner.getScreenPosition(trackerPanel); - if (selection == maskCorner) { - selectionPt = maskVisible? screenPoints[0]: null; - } - else { - maskCornerMark = corner_footprint.getMark(screenPoints); - } - // create search corner mark - screenPoints[0] = searchCorner.getScreenPosition(trackerPanel); - if (selection == searchCorner) { - selectionPt = searchVisible? screenPoints[0]: null; - } - else { - searchCornerMark = corner_footprint.getMark(screenPoints); - } - // create target mark - screenPoints[0] = keyFrame.getTarget().getScreenPosition(trackerPanel); - if (selection == keyFrame.getTarget()) - selectionPt = targetVisible? screenPoints[0]: null; - else { - targetMark = target_footprint.getMark(screenPoints); - } - // if a match has been found, create match shapes - TPoint[] matchPts = frame.getMatchPoints(); - if (matchPts == null || frame.isKeyFrame() || k==5) - matchShape = null; - else { - Point p1 = matchPts[0].getScreenPosition(trackerPanel); - Point p2 = maskCenter.getScreenPosition(trackerPanel); - transform.setToTranslation(p1.x-p2.x, p1.y-p2.y); - matchShape = toScreen.createTransformedShape(getMatchShape(matchPts)); - screenPoints[0] = getMatchTarget(matchPts[0]).getScreenPosition(trackerPanel); + // check to see if a handle is selected + if (selection == maskHandle) + selectionPt = maskVisible ? maskHandle.getScreenPosition(trackerPanel) : null; + else if (selection == searchHandle) + selectionPt = searchVisible ? searchHandle.getScreenPosition(trackerPanel) : null; + // create mask corner mark + if (frame.isKeyFrame()) { + maskCenter.setLocation(keyFrame.getMaskPoints()[0]); + maskCorner.setLocation(keyFrame.getMaskPoints()[1]); + } + screenPoints[0] = maskCorner.getScreenPosition(trackerPanel); + if (selection == maskCorner) { + selectionPt = maskVisible ? screenPoints[0] : null; + } else { + maskCornerMark = corner_footprint.getMark(screenPoints); + } + // create search corner mark + screenPoints[0] = searchCorner.getScreenPosition(trackerPanel); + if (selection == searchCorner) { + selectionPt = searchVisible ? screenPoints[0] : null; + } else { + searchCornerMark = corner_footprint.getMark(screenPoints); + } + // create target mark + screenPoints[0] = keyFrame.getTarget().getScreenPosition(trackerPanel); + if (selection == keyFrame.getTarget()) + selectionPt = targetVisible ? screenPoints[0] : null; + else { + targetMark = target_footprint.getMark(screenPoints); + } + // if a match has been found, create match shapes + TPoint[] matchPts = frame.getMatchPoints(); + if (matchPts == null || frame.isKeyFrame() || k == 5) + matchShape = null; + else { + Point p1 = matchPts[0].getScreenPosition(trackerPanel); + Point p2 = maskCenter.getScreenPosition(trackerPanel); + transform.setToTranslation(p1.x - p2.x, p1.y - p2.y); + matchShape = toScreen.createTransformedShape(getMatchShape(matchPts, frame)); + screenPoints[0] = core.getMatchTarget(matchPts[0]).getScreenPosition(trackerPanel); // matchTargetMark = inactive_target_footprint.getMark(screenPoints); - } - // if anything is selected, create a selection mark - if (selectionPt != null) { - transform.setToTranslation(selectionPt.x, selectionPt.y); - final Shape selectedShape - = transform.createTransformedShape(selectionShape); - selectionMark = new Mark() { - public void draw(Graphics2D g, boolean highlighted) { - g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); - g.fill(selectedShape); - } - public Rectangle getBounds(boolean highlighted) { - return selectedShape.getBounds(); - } - }; - } - // create final mark - final Mark markMaskCorner = maskCornerMark; - final Mark markSearchCorner = searchCornerMark; - final Mark markTarget = targetMark; - final Mark markSelection = selectionMark; - mark = new Mark() { - public void draw(Graphics2D g, boolean highlighted) { - Paint gpaint = g.getPaint(); - Color c = track.getFootprint().getColor(); - g.setPaint(c); - g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); - BasicStroke stroke = (BasicStroke)g.getStroke(); - int n = trackerPanel.getFrameNumber(); - FrameData frame = getFrame(n); - boolean isKeyFrame = frame!=null && frame.isKeyFrame(); - if (targetVisible) { - // draw the target - if (isKeyFrame) { - if (markTarget != null) - markTarget.draw(g, false); - } - } - if (matchShape!=null && !isKeyFrame) { - g.setStroke(dotted); - g.draw(matchShape); - } - if (maskVisible && isKeyFrame) { - g.setStroke(stroke); - g.draw(maskShape); - if (markMaskCorner != null) - markMaskCorner.draw(g, false); - } - if (searchVisible || !isKeyFrame) { - // draw the searchRect - g.setStroke(dashed); - g.draw(searchShape); - if (markSearchCorner != null) - markSearchCorner.draw(g, false); - } - // draw the selected point - if (markSelection != null) markSelection.draw(g, false); - g.setStroke(stroke); - g.setPaint(gpaint); - } - public Rectangle getBounds(boolean highlighted) { - Rectangle bounds = searchShape.getBounds(); - if (markMaskCorner != null) bounds.add(markMaskCorner.getBounds(highlighted)); - if (markSearchCorner != null) bounds.add(markSearchCorner.getBounds(highlighted)); - if (markTarget != null) bounds.add(markTarget.getBounds(highlighted)); - if (markSelection != null) bounds.add(markSelection.getBounds(highlighted)); - if (maskVisible) bounds.add(maskShape.getBounds()); - if (matchShape != null) { - bounds.add(matchShape.getBounds()); + } + // if anything is selected, create a selection mark + if (selectionPt != null) { + transform.setToTranslation(selectionPt.x, selectionPt.y); + final Shape selectedShape + = transform.createTransformedShape(selectionShape); + selectionMark = new Mark() { + public void draw(Graphics2D g, boolean highlighted) { + g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + g.fill(selectedShape); + } + + public Rectangle getBounds(boolean highlighted) { + return selectedShape.getBounds(); + } + }; + } + // create final mark + final Mark markMaskCorner = maskCornerMark; + final Mark markSearchCorner = searchCornerMark; + final Mark markTarget = targetMark; + final Mark markSelection = selectionMark; + mark = new Mark() { + public void draw(Graphics2D g, boolean highlighted) { + Paint gpaint = g.getPaint(); + Color c = track.getFootprint().getColor(); + g.setPaint(c); + g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + BasicStroke stroke = (BasicStroke) g.getStroke(); + int n = control.getFrameNumber(); + FrameData frame = getFrame(n); + boolean isKeyFrame = frame != null && frame.isKeyFrame(); + if (targetVisible) { + // draw the target + if (isKeyFrame) { + if (markTarget != null) + markTarget.draw(g, false); + } + } + if (matchShape != null && !isKeyFrame) { + g.setStroke(dotted); + g.draw(matchShape); + } + if (maskVisible && isKeyFrame) { + g.setStroke(stroke); + g.draw(maskShape); + if (markMaskCorner != null) + markMaskCorner.draw(g, false); + } + if (searchVisible || !isKeyFrame) { + // draw the searchRect + g.setStroke(dashed); + g.draw(searchShape); + if (markSearchCorner != null) + markSearchCorner.draw(g, false); + } + // draw the selected point + if (markSelection != null) markSelection.draw(g, false); + g.setStroke(stroke); + g.setPaint(gpaint); + } + + public Rectangle getBounds(boolean highlighted) { + Rectangle bounds = searchShape.getBounds(); + if (markMaskCorner != null) bounds.add(markMaskCorner.getBounds(highlighted)); + if (markSearchCorner != null) bounds.add(markSearchCorner.getBounds(highlighted)); + if (markTarget != null) bounds.add(markTarget.getBounds(highlighted)); + if (markSelection != null) bounds.add(markSelection.getBounds(highlighted)); + if (maskVisible) bounds.add(maskShape.getBounds()); + if (matchShape != null) { + bounds.add(matchShape.getBounds()); // bounds.add(matchTargetMark.getBounds(highlighted)); - } - return bounds; - } - }; - } - return mark; - } - - /** - * Returns the target for a specified match center point. - * - * @param center the center point - * @return the target - */ - protected TPoint getMatchTarget(TPoint center) { - int n = trackerPanel.getFrameNumber(); - double[] offset = getFrame(n).getTargetOffset(); - return new TPoint(center.x+offset[0], center.y+offset[1]); - } - - /** - * Returns the center point for a specified match target. - * - * @param target the target - * @return the center - */ - protected TPoint getMatchCenter(TPoint target) { - int n = trackerPanel.getFrameNumber(); - double[] offset = getFrame(n).getTargetOffset(); - return new TPoint(target.x-offset[0], target.y-offset[1]); - } - - /** - * Deletes the match data at a specified frame number. - * - * @param n the frame number - */ - protected void delete(int n) { + } + return bounds; + } + }; + } + return mark; + } + + + /** + * Deletes the match data at a specified frame number. + * + * @param n the frame number + */ + protected void delete(int n) { trackerPanel.repaint(); - FrameData frame = getFrame(n); - frame.clear(); - } - - /** - * Clears all existing steps and match data for the current point index. - */ - protected void reset() { + FrameData frame = getFrame(n); + frame.clear(); + } + + /** + * Clears all existing steps and match data for the current point index. + */ + protected void reset() { mark = null; // clear all frames and identify the key frame - Map frameData = getFrameData(); + Map frameData = core.getFrameData(); KeyFrame keyFrame = null; ArrayList toRemove = new ArrayList(); - for (int i: frameData.keySet()) { + for (int i : frameData.keySet()) { FrameData frame = frameData.get(i); frame.clear(); - if (keyFrame==null && frame.isKeyFrame()) - keyFrame = (KeyFrame)frame; + if (keyFrame == null && frame.isKeyFrame()) + keyFrame = (KeyFrame) frame; toRemove.add(i); } - for (int i: toRemove) { + for (int i : toRemove) { frameData.remove(i); } // delete all steps unless always marked - TTrack track = getTrack(); - boolean isAlwaysMarked = track.steps.isAutofill() || track instanceof CoordAxes; - if (!isAlwaysMarked) { + TTrack track = getTrack(); + boolean isAlwaysMarked = track.steps.isAutofill() || track instanceof CoordAxes; + if (!isAlwaysMarked) { for (int n = 0; n < track.getSteps().length; n++) { track.steps.setStep(n, null); } - } + } stop(true, true); - // set the step number to key frame - if (keyFrame!=null) { - int n = keyFrame.getFrameNumber(); - VideoPlayer player = trackerPanel.getPlayer(); - player.setStepNumber(player.getVideoClip().frameToStep(n)); - } - repaint(); - } - - /** - * Refreshes the key frame to reflect current center and corner positions. - * - * @param keyFrame the KeyFrame - */ - protected void refreshKeyFrame(KeyFrame keyFrame) { - Shape mask = keyFrame.getMask(); - if (mask instanceof Ellipse2D.Double) { - // prevent the mask from being too small to contain any pixels - keyFrame.getMaskPoints()[0].setLocation(maskCenter); - keyFrame.getMaskPoints()[1].setLocation(maskCorner); - Ellipse2D.Double ellipse = (Ellipse2D.Double)mask; + // set the step number to key frame + if (keyFrame != null) { + int n = keyFrame.getFrameNumber(); + VideoPlayer player = trackerPanel.getPlayer(); + player.setStepNumber(player.getVideoClip().frameToStep(n)); + } + repaint(); + } + + + // GUI ? + + /** + * Refreshes the key frame to reflect current center and corner positions. + * + * @param keyFrame the KeyFrame + */ + protected void refreshKeyFrame(KeyFrame keyFrame) { + Shape mask = keyFrame.getMask(); + if (mask instanceof RectangularShape) { + // prevent the mask from being too small to contain any pixels + keyFrame.getMaskPoints()[0].setLocation(maskCenter); + keyFrame.getMaskPoints()[1].setLocation(maskCorner); + RectangularShape ellipse = (RectangularShape) mask; double sin = maskCenter.sin(maskCorner); double cos = maskCenter.cos(maskCorner); if (Double.isNaN(sin)) { sin = -0.707; cos = 0.707; } - double d = Math.max(minMaskRadius, maskCenter.distance(maskCorner)); - double dx = d*cornerFactor*cos; - double dy = -d*cornerFactor*sin; - if (Math.abs(dx) < 1) { - if (dx > 0) dx = 1; - else dx = -1; - } - if (Math.abs(dy) < 1) { - if (dy > 0) dy = 1; - else dy = -1; - } - ellipse.setFrameFromCenter(maskCenter.x, maskCenter.y, - maskCenter.x + dx, maskCenter.y + dy); - } - wizard.replaceIcons(keyFrame); - // get the marked point and set target position AFTER refreshing keyFrame - TPoint p = keyFrame.getMarkedPoint(); - if (p!=null) - keyFrame.getTarget().setXY(p.getX(), p.getY()); - search(true, false); // search this frame only + double d = Math.max(minMaskRadius, maskCenter.distance(maskCorner)); + double dx = d * cornerFactor * cos; + double dy = -d * cornerFactor * sin; + if (Math.abs(dx) < 1) { + if (dx > 0) dx = 1; + else dx = -1; + } + if (Math.abs(dy) < 1) { + if (dy > 0) dy = 1; + else dy = -1; + } + ellipse.setFrameFromCenter(maskCenter.x, maskCenter.y, + maskCenter.x + dx, maskCenter.y + dy); + } + //options.setMaskWidth (2*(maskCorner.x- maskCenter.x)); + //options.setMaskHeight(2*(maskCorner.y- maskCenter.y)); + wizard.replaceIcons(keyFrame); + // get the marked point and set target position AFTER refreshing keyFrame + TPoint p = keyFrame.getMarkedPoint(); + if (p != null) + keyFrame.getTarget().setXY(p.getX(), p.getY()); + search(true, false); // search this frame only repaint(); wizard.repaint(); - } - - protected BufferedImage createMagnifiedImage(BufferedImage source) { - BufferedImage image = new BufferedImage( - templateIconMagnification*source.getWidth(), - templateIconMagnification*source.getHeight(), - BufferedImage.TYPE_INT_ARGB); - image.createGraphics().drawImage(source, 0, 0, image.getWidth(), image.getHeight(), null); - return image; - } - - /** - * Gets the match shape for the specified center and frame corner positions. - * - * @param pts TPoint[] {center, frame corner} - * @return a shape suitable for drawing - */ - protected Shape getMatchShape(TPoint[] pts) { - if (match instanceof Ellipse2D.Double) { - Ellipse2D.Double ellipse = (Ellipse2D.Double)match; - ellipse.setFrameFromCenter(pts[0], pts[1]); - return ellipse; - } - return null; - } - - /** - * Determines the status code for a given frame. The status codes are: - * 0: a key frame - * 1: automarked with a good match - * 2: possible match, not marked - * 3: searched but no match found - * 4: unable to search--search area outside image or x-axis - * 5: manually marked by the user - * 6: match accepted by the user - * 7: never searched - * 8: possible match but previously marked - * 9: no match found but previously marked - * 10: calibration tool possible match - * - * @param n the frame number - * @return the status code - */ - protected int getStatusCode(int n) { - FrameData frame = getFrame(n); - if (frame.isKeyFrame()) return 0; // key frame - double[] widthAndHeight = frame.getMatchWidthAndHeight(); - if (frame.isMarked()) { // frame is marked (includes always-marked tracks like axes, calibration points, etc) - if (frame.isAutoMarked()) { // automarked - if (widthAndHeight[1]> goodMatch) return 1; // automarked with good match - return 6; // accepted by user - } - // not automarked - TTrack track = getTrack(); - boolean isCalibrationTool = track instanceof CoordAxes - || track instanceof OffsetOrigin - || track instanceof Calibration; - if (track instanceof TapeMeasure) { - TapeMeasure tape = (TapeMeasure)track; - isCalibrationTool = !tape.isReadOnly(); - } - if (frame.searched) { - if (isCalibrationTool) { - if (widthAndHeight[1]>possibleMatch) return 8; // possible match for calibration - return 9; // no match found, existing mark or calibration - } - if (frame.decided) return 5; // manually marked by user - if (widthAndHeight[1]>possibleMatch) return 8; // possible match, already marked - return 9; // no match found, existing mark or calibration - } - return 7; // never searched - } - if (frame.searched) { // frame unmarked but searched - if (widthAndHeight[1] frameData = getFrameData(); - for (Integer i: frameData.keySet()) { - if (i<=n) continue; - FrameData frame = frameData.get(i); - if (frame.isKeyFrame()) // only to the next key frame - break; - frame.setSearchPoints(null); - } - - } - - protected boolean moveRectIntoImage(Rectangle2D searchRect) { - // if needed, modify search rectangle to keep it within the video image - BufferedImage image = trackerPanel.getVideo().getImage(); - int w = image.getWidth(); - int h = image.getHeight(); - Point2D corner = new Point2D.Double(searchRect.getX(), searchRect.getY()); - Dimension dim = new Dimension((int)searchRect.getWidth(), (int)searchRect.getHeight()); - - boolean changed = false; - // reduce size if needed - if (w < dim.width || h < dim.height) { - changed = true; - dim.setSize(Math.min(w, dim.width), Math.min(h, dim.height)); - searchRect.setFrame(corner, dim); - } - - // move corner point if needed - double x = Math.max(0, corner.getX()); - x = Math.min(x, w-dim.width); - double y = Math.max(0, corner.getY()); - y = Math.min(y, h-dim.height); - if (x!=corner.getX() || y!=corner.getY()) { - changed = true; - corner.setLocation(x, y); - searchRect.setFrame(corner, dim); - } - - return changed; - } - - /** - * Gets the available derivatives of the specified order. These are NOT time - * derivatives, but simply differences in pixel units: order 1 is deltaPosition, - * order 2 is change in deltaPosition, order 3 is change in order 2. Note the - * TPoint positions are in image units, not world units. - * - * @param positions an array of positions - * @param order may be 1 (v), 2 (a) or 3 (jerk) - * @return the derivative data - */ - protected double[][] getDerivatives(TPoint[] positions, int order) { - // return null if insufficient data - if (positions.length=positions.length-1) { - derivatives1[i] = null; - continue; - } - TPoint loc0 = positions[i+1]; - TPoint loc1 = positions[i]; - if (loc0==null || loc1==null) { - derivatives1[i] = null; - continue; - } - double x = loc1.getX() -loc0.getX(); - double y = loc1.getY() -loc0.getY(); - derivatives1[i] = new double[] {x, y}; - } - return derivatives1; - } - else if (order==2) { // acceleration - for (int i=0; i=positions.length-2) { - derivatives2[i] = null; - continue; - } - TPoint loc0 = positions[i+2]; - TPoint loc1 = positions[i+1]; - TPoint loc2 = positions[i]; - if (loc0==null || loc1==null || loc2==null) { - derivatives2[i] = null; - continue; - } - double x = loc2.getX() - 2*loc1.getX() + loc0.getX(); - double y = loc2.getY() - 2*loc1.getY() + loc0.getY(); - derivatives2[i] = new double[] {x, y}; - } - return derivatives2; - } - else if (order==3) { // jerk - for (int i=0; i=positions.length-3) { - derivatives3[i] = null; - continue; - } - TPoint loc0 = positions[i+3]; - TPoint loc1 = positions[i+2]; - TPoint loc2 = positions[i+1]; - TPoint loc3 = positions[i]; - if (loc0==null || loc1==null || loc2==null || loc3==null) { - derivatives3[i] = null; - continue; - } - double x = loc3.getX() - 3*loc2.getX() + 3*loc1.getX() - loc0.getX(); - double y = loc3.getY() - 3*loc2.getY() + 3*loc1.getY() - loc0.getY(); - derivatives3[i] = new double[] {x, y}; - } - return derivatives3; - } - return null; - } - + } + + + // GUI + + /** + * Gets the match shape for the specified center and frame corner positions. + * + * @param pts TPoint[] {center, frame corner} + * @param frame + * @return a shape suitable for drawing + */ + protected Shape getMatchShape(TPoint[] pts, FrameData frame) { + Shape match = frame.getKeyFrame().getMask(); + if (match instanceof RectangularShape) { + RectangularShape ellipse = (RectangularShape) ((RectangularShape) match).clone(); + ellipse.setFrameFromCenter(pts[0], pts[1]); + return ellipse; + } + return null; + } + + // GUI + protected boolean isDrawingKeyFrameFor(TTrack track, int index) { + int n = control.getFrameNumber(); + if (getTrack() == track && wizard.isVisible() && getFrame(n).isKeyFrame()) { + FrameData frame = getFrame(n); + return frame.getIndex() == index; + } + return false; + } + //____________________ inner TPoint classes ______________________ - /** - * An edge point used for translation. - */ - protected class Handle extends TPoint { - - /** - * Overrides TPoint setXY method. - * - * @param x the x coordinate - * @param y the y coordinate - */ - public void setXY(double x, double y) { - double dx = x-getX(); - double dy = y-getY(); - super.setXY(x, y); - int n = trackerPanel.getFrameNumber(); - if (this == searchHandle) { - searchCenter.x += dx; - searchCenter.y += dy; - searchCorner.x += dx; - searchCorner.y += dy; - refreshSearchRect(); - wizard.setChanged(); - } - else { - maskCenter.x += dx; - maskCenter.y += dy; - maskCorner.x += dx; - maskCorner.y += dy; - KeyFrame keyFrame = getFrame(n).getKeyFrame(); - keyFrame.getMaskPoints()[0].setLocation(maskCenter); - keyFrame.getMaskPoints()[1].setLocation(maskCorner); - Target target = keyFrame.getTarget(); - keyFrame.setTargetOffset(target.x-maskCenter.x, target.y-maskCenter.y); - refreshKeyFrame(keyFrame); - } - clearSearchPointsDownstream(); - } - - /** - * Sets the location of this point to the specified screen position. - * - * @param x the x screen position - * @param y the y screen position - * @param vidPanel the trackerPanel doing the drawing - */ - public void setScreenLocation(int x, int y, VideoPanel vidPanel) { - if (screenPt == null) screenPt = new Point(); - if (worldPt == null) worldPt = new Point2D.Double(); - screenPt.setLocation(x, y); - AffineTransform toScreen = vidPanel.getPixelTransform(); - try { - toScreen.inverseTransform(screenPt, worldPt); - } catch(NoninvertibleTransformException ex) { - ex.printStackTrace(); - } - setLocation(worldPt); - repaint(); - } - } - - /** - * A corner point used for resizing. - */ - protected class Corner extends TPoint { - - /** - * Overrides TPoint setXY method. - * - * @param x the x coordinate - * @param y the y coordinate - */ - public void setXY(double x, double y) { - super.setXY(x, y); - int n = trackerPanel.getFrameNumber(); - if (this == searchCorner) { - refreshSearchRect(); - wizard.setChanged(); - } - else { - refreshKeyFrame(getFrame(n).getKeyFrame()); - } - clearSearchPointsDownstream(); - } - } - - /** - * A point that defines the target location relative to the mask center. - * Tracks are "marked" at this point when auto-tracking. - */ - protected class Target extends TPoint { - - /** - * Overrides TPoint setXY method. - * - * @param x the x coordinate - * @param y the y coordinate - */ - public void setXY(double x, double y) { - super.setXY(x, y); - int n = trackerPanel.getFrameNumber(); - FrameData frame = getFrame(n); - KeyFrame keyFrame = frame.getKeyFrame(); - keyFrame.setTargetOffset(x-maskCenter.x, y-maskCenter.y); - TTrack track = getTrack(); - track.autoTrackerMarking = track.isAutoAdvance(); + /** + * An edge point used for translation. + */ + protected class Handle extends TPoint { + + /** + * Overrides TPoint setXY method. + * + * @param x the x coordinate + * @param y the y coordinate + */ + public void setXY(double x, double y) { + double dx = x - getX(); + double dy = y - getY(); + super.setXY(x, y); + if (this == searchHandle) { + searchCenter.x += dx; + searchCenter.y += dy; + searchCorner.x += dx; + searchCorner.y += dy; + refreshSearchRect(); + wizard.setChanged(); + } else { + maskCenter.x += dx; + maskCenter.y += dy; + maskCorner.x += dx; + maskCorner.y += dy; + int n = trackerPanel.getFrameNumber(); + KeyFrame keyFrame = getFrame(n).getKeyFrame(); + keyFrame.getMaskPoints()[0].setLocation(maskCenter); + keyFrame.getMaskPoints()[1].setLocation(maskCorner); + TPoint target = keyFrame.getTarget(); + keyFrame.setTargetOffset(target.x - maskCenter.x, target.y - maskCenter.y); + refreshKeyFrame(keyFrame); + } + core.clearSearchPointsDownstream(); + } + + /** + * Sets the location of this point to the specified screen position. + * + * @param x the x screen position + * @param y the y screen position + * @param vidPanel the trackerPanel doing the drawing + */ + public void setScreenLocation(int x, int y, VideoPanel vidPanel) { + if (screenPt == null) screenPt = new Point(); + if (worldPt == null) worldPt = new Point2D.Double(); + screenPt.setLocation(x, y); + AffineTransform toScreen = vidPanel.getPixelTransform(); + try { + toScreen.inverseTransform(screenPt, worldPt); + } catch (NoninvertibleTransformException ex) { + ex.printStackTrace(); + } + setLocation(worldPt); + repaint(); + } + } + + /** + * A corner point used for resizing. + */ + protected class Corner extends TPoint { + + /** + * Overrides TPoint setXY method. + * + * @param x the x coordinate + * @param y the y coordinate + */ + public void setXY(double x, double y) { + super.setXY(x, y); + if (this == searchCorner) { + refreshSearchRect(); + wizard.setChanged(); + } else { // this == maskCorner + options.setMaskWidth((maskCorner.x - maskCenter.x) * (2 * cornerFactor)); + options.setMaskHeight((maskCorner.y - maskCenter.y) * (2 * cornerFactor)); + int n = trackerPanel.getFrameNumber(); + refreshKeyFrame(getFrame(n).getKeyFrame()); + } + core.clearSearchPointsDownstream(); + } + } + + /** + * A point that defines the target location relative to the mask center. + * Tracks are "marked" at this point when auto-tracking. + */ + protected class Target extends TPoint { + + /** + * Overrides TPoint setXY method. + * + * @param x the x coordinate + * @param y the y coordinate + */ + public void setXY(double x, double y) { + super.setXY(x, y); + int n = trackerPanel.getFrameNumber(); + FrameData frame = getFrame(n); + KeyFrame keyFrame = frame.getKeyFrame(); + keyFrame.setTargetOffset(x - maskCenter.x, y - maskCenter.y); + TTrack track = getTrack(); + track.autoTrackerMarking = track.isAutoAdvance(); TPoint p = track.autoMarkAt(n, getX(), getY()); frame.setAutoMarkPoint(p); track.autoTrackerMarking = false; repaint(); track.repaint(); - } - } - - /** - * A class to hold frame data. - */ - protected class FrameData { - - private int index, frameNum, templateAlpha, matcherHashCode; - private double[] targetOffset = {0, 0}; - private double[] matchWidthAndHeight; - private TPoint[] matchPoints; - private TPoint[] searchPoints; - TPoint trackPoint; - private double[] autoMarkLoc; - private BufferedImage template; - private Icon templateIcon; // shows template used for search - private Icon matchIcon; // only if match is found - boolean searched; // true when searched - boolean decided; // true when accepted, skipped or marked point is dragged; assumed false for calibration tools and axes - int[] workingPixels; - - FrameData(int pointIndex, int frameNumber) { - index = pointIndex; - frameNum = frameNumber; - } - - FrameData(KeyFrame keyFrame) { - index = keyFrame.getIndex(); - frameNum = keyFrame.getFrameNumber(); - matchWidthAndHeight = keyFrame.getMatchWidthAndHeight(); - matchPoints = keyFrame.getMatchPoints(); - searchPoints = keyFrame.getSearchPoints(false); - targetOffset = keyFrame.getTargetOffset(); - matchIcon = keyFrame.getMatchIcon(); - templateIcon = keyFrame.getTemplateIcon(); - autoMarkLoc = keyFrame.getAutoMarkLoc(); - trackPoint = keyFrame.trackPoint; - searched = keyFrame.searched; - } - - int getFrameNumber() { - return frameNum; - } - - Icon getTemplateIcon() { - return templateIcon; - } - - void setTemplateIcon(Icon icon) { - templateIcon = icon; - } - - Icon getMatchIcon() { - return matchIcon; - } - - void setMatchIcon(Icon icon) { - matchIcon = icon; - } - - /** - * Sets the template to the current template of a TemplateMatcher. - * - * @param matcher the template matcher - */ - void setTemplate(TemplateMatcher matcher) { - template = matcher.getTemplate(); - templateAlpha = matcher.getAlphas()[0]; - workingPixels = matcher.getWorkingPixels(workingPixels); - matcherHashCode = matcher.hashCode(); - // refresh icons - setMatchIcon(null); - BufferedImage img = createMagnifiedImage(template); - setTemplateIcon(new ImageIcon(img)); - } - - /** - * Returns the template to match. Replaces the existing template if - * a new one exists. - */ - BufferedImage getTemplateToMatch() { - if (template==null || newTemplateExists()) { - // replace current template with new one - setTemplate(getTemplateMatcher()); - } - return template; - } - - /** - * Returns true if the evolved template is both different and appropriate. - */ - boolean newTemplateExists() { - if (isKeyFrame()) return false; - TemplateMatcher matcher = getTemplateMatcher(); - if (matcher==null) return false; - boolean different = matcher.getAlphas()[0]!=templateAlpha - || matcher.hashCode()!=matcherHashCode; - boolean appropriate = matcher.getIndex() frames = getFrameData(index); - for (int i=frameNum; i>=0; i--) { - FrameData frame = frames.get(i); - if (frame!=null) { - if (frame.searchPoints!=null || frame.isKeyFrame()) { - return frame.searchPoints; - } - } - } - return null; - } - - void setMatchPoints(TPoint[] points) { - matchPoints = points; - } - - TPoint[] getMatchPoints() { - return matchPoints; - } - - void setMatchWidthAndHeight(double[] matchData) { - matchWidthAndHeight = matchData; - } - - double[] getMatchWidthAndHeight() { - return matchWidthAndHeight; - } - - KeyFrame getKeyFrame() { - if (this.isKeyFrame()) return (KeyFrame)this; - Map frames = getFrameData(index); - for (int i=frameNum; i>=0; i--) { - FrameData frame = frames.get(i); - if (frame!=null && frame.isKeyFrame()) - return (KeyFrame)frame; - } - return null; - } - - int getIndex() { - return index; - } - - boolean isMarked() { - TTrack track = getTrack(); - return track!=null && track.getStep(frameNum)!=null; - } - - boolean isAutoMarked() { - if (autoMarkLoc==null || trackPoint==null) return false; - if (trackPoint instanceof CoordAxes.AnglePoint) { - ImageCoordSystem coords = trackerPanel.getCoords(); - double theta = coords.getAngle(frameNum); - CoordAxes.AnglePoint p = (CoordAxes.AnglePoint)trackPoint; - return Math.abs(theta-p.getAngle())<0.001; - } - // return false if trackPoint has moved from marked location by more than 0.01 pixels - return Math.abs(autoMarkLoc[0]-trackPoint.getX())<0.01 - && Math.abs(autoMarkLoc[1]-trackPoint.getY())<0.01; - } - - void setAutoMarkPoint(TPoint point) { - trackPoint = point; - autoMarkLoc = point==null? null: new double[] {point.getX(), point.getY()}; - } - - double[] getAutoMarkLoc() { - return autoMarkLoc; - } - - boolean isKeyFrame() { - return false; - } - - TPoint getMarkedPoint() { - if (!isMarked()) return null; - if (trackPoint!=null) return trackPoint; - TTrack track = getTrack(); - return track.getMarkedPoint(frameNum, index); - } - - void clear() { - matchPoints = null; - matchWidthAndHeight = null; - matchIcon = null; - autoMarkLoc = null; - searched = false; - decided = false; - trackPoint = null; - workingPixels = null; - matcherHashCode = 0; - if (!isKeyFrame()) { - searchPoints = null; - templateIcon = null; - templateAlpha = 0; - template = null; - } - } - } - - /** - * A class to hold keyframe data. - */ - protected class KeyFrame extends FrameData { - - private Shape mask; - private Target target; - private TPoint[] maskPoints = {new TPoint(), new TPoint()}; - private TemplateMatcher matcher; - - KeyFrame(TPoint keyPt, Shape mask, Target target) { - super(AutoTracker.this.getIndex(keyPt), keyPt.getFrameNumber(trackerPanel)); - this.mask = mask; - this.target = target; - maskPoints[0].setLocation(maskCenter); - maskPoints[1].setLocation(maskCorner); - } - - boolean isKeyFrame() { - return true; - } - - Shape getMask() { - return mask; - } - - Target getTarget() { - return target; - } - - TPoint[] getMaskPoints() { - return maskPoints; - } - - void setTemplateMatcher(TemplateMatcher matcher) { - this.matcher = matcher; - } - - boolean isFirstKeyFrame() { - Map frames = getFrameData(getIndex()); - for (int i=getFrameNumber()-1; i>=0; i--) { - FrameData frame = frames.get(i); - if (frame!=null && frame.isKeyFrame()) - return false; - } - return true; - } - - } - - /** - * A wizard to guide users of AutoTracker. - */ - protected class Wizard extends JDialog - implements PropertyChangeListener { - - // instance fields - private JButton startButton, searchNextButton, searchThisButton; - private JPopupMenu popup; - private JButton closeButton, helpButton, deleteButton, keyFrameButton; - private JButton acceptButton, skipButton; - private JSpinner evolveSpinner, acceptSpinner; - private JComboBox trackDropdown, pointDropdown; - private boolean isVisible, changed, hidePopup; - private JTextArea textPane; - protected JToolBar templateToolbar, searchToolbar, targetToolbar, imageToolbar, trackToolbar; - private JPanel startPanel, followupPanel, infoPanel, northPanel, targetPanel; - private JLabel templateImageLabel, matchImageLabel, acceptLabel, templateLabel; - private JLabel frameLabel, evolveRateLabel, searchLabel, targetLabel; - private JLabel pointLabel, trackLabel; - protected Dimension textPaneSize; - private JCheckBox lookAheadCheckbox, oneDCheckbox; - private Object mouseOverObj; - private MouseAdapter mouseOverListener; - private Timer timer; - private boolean ignoreChanges, isPrevValid, prevLookAhead, prevOneD; - private int prevEvolution; - - /** - * Constructs a Wizard. - */ - public Wizard() { - super(trackerPanel.getTFrame(), false); - createGUI(); - pack(); - } - - /** - * Responds to property change events. This listens for "tab" from TFrame. - * - * @param e the property change event - */ - public void propertyChange(PropertyChangeEvent e) { - if (e.getPropertyName().equals("tab")) { //$NON-NLS-1$ - if (trackerPanel != null && e.getNewValue() == trackerPanel) { - setVisible(isVisible); - } - else { - boolean vis = isVisible; - setVisible(false); - isVisible = vis; - } - } - } - - /** - * Sets the changed flag - */ - public void setChanged() { - if (!changed) { - changed = true; - refreshGUI(); - } - } - - - /** - * Overrides JDialog setVisible method. - * - * @param vis true to show this inspector - */ - public void setVisible(boolean vis) { - super.setVisible(vis); - TToolBar toolbar = TToolBar.getToolbar(trackerPanel); - toolbar.autotrackerButton.setSelected(vis); - isVisible = vis; - if (!vis) { - erase(); - trackerPanel.repaintDirtyRegion(); - } - else { - TTrack track = trackerPanel.getSelectedTrack(); - if (track!=null) setTrack(track); - } - refreshGUI(); - } - - /** - * Sets the font level. - * - * @param level the desired font level - */ - public void setFontLevel(int level) { - FontSizer.setFonts(this, FontSizer.getLevel()); - Object[] buttons = new Object[] {acceptButton, skipButton}; - FontSizer.setFonts(buttons, FontSizer.getLevel()); - // private JComboBox trackDropdown, pointDropdown; - JComboBox[] dropdowns = new JComboBox[] {trackDropdown, pointDropdown}; - for (JComboBox next: dropdowns) { - int n = next.getSelectedIndex(); - Object[] items = new Object[next.getItemCount()]; - for (int i=0; i=max) alpha = 255; - if (evolveRate<=0) alpha = 0; - evolveAlpha=alpha; - } - - /** - * Creates the visible components. - */ - protected void createGUI() { - TFrame frame = trackerPanel.getTFrame(); - if (frame != null) { - frame.addPropertyChangeListener("tab", this); //$NON-NLS-1$ - } -// setResizable(false); - KeyListener kl = new KeyAdapter() { - public void keyPressed(KeyEvent e) { - if (!trackerPanel.getPlayer().isEnabled()) return; - switch (e.getKeyCode()) { - case KeyEvent.VK_PAGE_UP: - if (e.isShiftDown()) { - int n = trackerPanel.getPlayer().getStepNumber()-5; - trackerPanel.getPlayer().setStepNumber(n); - } - else trackerPanel.getPlayer().back(); - break; - case KeyEvent.VK_PAGE_DOWN: - if (e.isShiftDown()) { - int n = trackerPanel.getPlayer().getStepNumber()+5; - trackerPanel.getPlayer().setStepNumber(n); - } - else trackerPanel.getPlayer().step(); - break; - case KeyEvent.VK_HOME: - trackerPanel.getPlayer().setStepNumber(0); - break; - case KeyEvent.VK_END: - VideoClip clip = trackerPanel.getPlayer().getVideoClip(); - trackerPanel.getPlayer().setStepNumber(clip.getStepCount()-1); - break; - case KeyEvent.VK_SHIFT: - if (!stepping) { - startButton.setText(TrackerRes.getString("AutoTracker.Wizard.Button.Options")); //$NON-NLS-1$); - } - break; - } - } - public void keyReleased(KeyEvent e) { - // handle shift key release when wizard takes focus from TrackerPanel - if (e.getKeyCode()==KeyEvent.VK_SHIFT) { - trackerPanel.isShiftKeyDown = false; - startButton.setText(stepping? - TrackerRes.getString("AutoTracker.Wizard.Button.Stop"): //$NON-NLS-1$ - TrackerRes.getString("AutoTracker.Wizard.Button.Search")); //$NON-NLS-1$); - } - } - }; - - int delay = 500; // 1/2 second delay for mouseover action - timer = new Timer(delay, new ActionListener() { - public void actionPerformed(ActionEvent e) { - refreshInfo(); - refreshDrawingFlags(); - erase(); - trackerPanel.repaint(); - } - }); - timer.setInitialDelay(delay); - - mouseOverListener = new MouseAdapter() { - public void mouseEntered(MouseEvent e) { - Component c = (Component)e.getSource(); - while (c.getParent()!=null) { - if (c==templateToolbar - || c==searchToolbar - || c==targetToolbar - || c==imageToolbar) { - mouseOverObj = c; - isInteracting = c==targetToolbar; - isInteracting = true; - break; - } - c = c.getParent(); - } - if (mouseOverObj==null) { - // refresh immediately - refreshInfo(); - refreshDrawingFlags(); - erase(); - trackerPanel.repaint(); - } - else { - // restart timer to refresh - timer.restart(); - } - } - public void mouseExited(MouseEvent e) { - // restart timer to refresh - timer.restart(); - mouseOverObj = null; - isInteracting = false; - } - }; - addWindowFocusListener(new java.awt.event.WindowAdapter() { - public void windowGainedFocus(java.awt.event.WindowEvent e) { - TTrack track = getTrack(); - if (track!=null) trackerPanel.setSelectedTrack(track); - } - }); - JPanel contentPane = new JPanel(new BorderLayout()); - setContentPane(contentPane); - - // create trackDropdown early since need it for spinners - trackDropdown = new JComboBox() { - public Dimension getPreferredSize() { - Dimension dim = super.getPreferredSize(); - dim.height-=1; - return dim; - } - }; - trackDropdown.addMouseListener(mouseOverListener); - for (int i = 0; i16); - search(true, false); // search this frame and stop - } - }); - searchThisButton.addKeyListener(kl); - startPanel.add(searchThisButton); - searchNextButton = new JButton(); - searchNextButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - neverPause = (e.getModifiers()>16); - search(false, false); // search next frame and stop - } - }); - searchNextButton.addKeyListener(kl); - startPanel.add(searchNextButton); - - // create followup panel - followupPanel = new JPanel(); - followupPanel.setBorder(BorderFactory.createEmptyBorder()); - followupPanel.setOpaque(false); - - // create template image toolbar - imageToolbar = new JToolBar(); - imageToolbar.setFloatable(false); - frameLabel = new JLabel(); - frameLabel.setOpaque(false); - frameLabel.setBorder(BorderFactory.createEmptyBorder(0, 6, 0, 6)); - - templateImageLabel = new JLabel(); - templateImageLabel.setBorder(BorderFactory.createEmptyBorder(0, 6, 0, 6)); - templateImageLabel.setIconTextGap(3); - templateImageLabel.setHorizontalTextPosition(SwingConstants.LEFT); - templateImageLabel.addMouseListener(mouseOverListener); - - matchImageLabel = new JLabel(); - matchImageLabel.setBorder(BorderFactory.createEmptyBorder(0, 6, 0, 6)); - matchImageLabel.setIconTextGap(3); - matchImageLabel.setHorizontalTextPosition(SwingConstants.LEFT); - matchImageLabel.addMouseListener(mouseOverListener); - - JPanel flowpanel = new JPanel(); - flowpanel.setOpaque(false); - flowpanel.setBorder(BorderFactory.createEmptyBorder()); - flowpanel.add(templateImageLabel); - flowpanel.add(matchImageLabel); - imageToolbar.add(frameLabel); - imageToolbar.add(flowpanel); - imageToolbar.addMouseListener(mouseOverListener); - - // create template toolbar - templateToolbar = new JToolBar(); - templateToolbar.setFloatable(false); - templateToolbar.addMouseListener(mouseOverListener); - templateLabel = new JLabel(); - templateLabel.setOpaque(false); - templateLabel.setBorder(BorderFactory.createEmptyBorder(0, 6, 0, 6)); - evolveRateLabel = new JLabel(); - evolveRateLabel.setOpaque(false); - evolveRateLabel.addMouseListener(mouseOverListener); - - SpinnerModel model = new SpinnerNumberModel(defaultEvolveRate, 0, maxEvolveRate, maxEvolveRate/20); - evolveSpinner = new TallSpinner(model, trackDropdown); - for (int i = 0; i=0); - oneDCheckbox.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - lineSpread = oneDCheckbox.isSelected()? 0: -1; - setChanged(); - if (oneDCheckbox.isSelected()) { - int n = trackerPanel.getFrameNumber(); - CoordAxes axes = trackerPanel.getAxes(); - KeyFrame frame = getFrame(n).getKeyFrame(); - if (frame!=null) { - n = frame.getFrameNumber(); - TPoint[] maskPts = frame.getMaskPoints(); - axes.getOrigin().setXY(maskPts[0].x, maskPts[0].y); - } - axes.setVisible(true); - } - trackerPanel.repaint(); - } - }); - lookAheadCheckbox = new JCheckBox(); - lookAheadCheckbox.addMouseListener(mouseOverListener); - lookAheadCheckbox.setOpaque(false); - lookAheadCheckbox.setSelected(lookAhead); - lookAheadCheckbox.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - lookAhead = lookAheadCheckbox.isSelected(); - setChanged(); - } - }); - flowpanel = new JPanel(); - flowpanel.setBorder(BorderFactory.createEmptyBorder(1, 0, 0, 0)); - flowpanel.setOpaque(false); - flowpanel.add(oneDCheckbox); - flowpanel.add(lookAheadCheckbox); - searchToolbar.add(searchLabel); - searchToolbar.add(flowpanel); - - // create target toolbar - targetToolbar = new JToolBar(); - targetToolbar.setFloatable(false); - targetToolbar.addMouseListener(mouseOverListener); - targetLabel = new JLabel(); - targetLabel.setOpaque(false); - targetLabel.setBorder(BorderFactory.createEmptyBorder(0, 6, 0, 6)); - - trackLabel = new JLabel(); - trackLabel.setOpaque(false); - - pointLabel = new JLabel(); - pointLabel.setOpaque(false); - pointLabel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0)); - - pointDropdown = new JComboBox() { - public Dimension getPreferredSize() { - Dimension dim = super.getPreferredSize(); - dim.height = trackDropdown.getPreferredSize().height; - return dim; - } - }; - pointDropdown.addMouseListener(mouseOverListener); - for (int i = 0; i frameData = getFrameData(); - int nextKey = -1; // later key frame, if any - - // if this is first key frame, look for later one - for (Integer i: frameData.keySet()) { - FrameData frame = frameData.get(i); - if (frame.isKeyFrame()) { // found first key frame - if (frame==keyFrame) { - // we are deleting the first key frame, so find the next, then confirm with user - for (int j: frameData.keySet()) { - if (j>i) { - FrameData next = frameData.get(j); - if (next.isKeyFrame()) { - nextKey = j; - break; - } - } - } - break; - } - } - } - - // replace keyframe with non-key frame - FrameData newFrame = new FrameData(keyFrame); - frameData.put(n, newFrame); - - // get earlier keyframe, if any - keyFrame = getFrame(n).getKeyFrame(); - if (keyFrame!=null) { // earlier keyframe exists - maskCenter.setLocation(keyFrame.getMaskPoints()[0]); - maskCorner.setLocation(keyFrame.getMaskPoints()[1]); - } - else { // no earlier key frame, so clear all matches up to nextKey - ArrayList toRemove = new ArrayList(); - for (int i: frameData.keySet()) { - if (nextKey>-1 && i>=nextKey) break; - FrameData frame = frameData.get(i); - frame.clear(); - toRemove.add(i); - } - for (int i: toRemove) { - frameData.remove(i); - } - } - - TTrack track = getTrack(); - if (track.getStep(n)==null) { - FrameData frame = getFrame(n); - if (frame!=null) { - frame.setTemplateIcon(null); - frame.setSearchPoints(null); - } - for (int i: frameData.keySet()) { - if (i<=n) continue; - frame = frameData.get(i); - if (!frame.isKeyFrame() && track.getStep(i)==null) - frame.clear(); - } - } - refreshGUI(); - AutoTracker.this.repaint(); - trackerPanel.repaint(); - } - }; - - final Action deleteThisAction = new AbstractAction() { - public void actionPerformed(ActionEvent e) { - // clear this match and step - int n = trackerPanel.getFrameNumber(); - Map frameData = getFrameData(); - FrameData frame = frameData.get(n); - if (!frame.isKeyFrame()) { - frameData.get(n).clear(); - frameData.remove(n); - } - else { - frame.clear(); - } - - TTrack track = getTrack(); - boolean isAlwaysMarked = track.steps.isAutofill() || track instanceof CoordAxes; - if (!isAlwaysMarked && track.getSteps().length>n) - track.getSteps()[n] = null; - refreshGUI(); - AutoTracker.this.repaint(); - track.dataValid = false; - track.firePropertyChange("data", null, track); //$NON-NLS-1$ - } - }; - - final Action deleteLaterAction = new AbstractAction() { - public void actionPerformed(ActionEvent e) { - // clear later matches and steps - int n = trackerPanel.getFrameNumber(); - ArrayList toRemove = new ArrayList(); - Map frameData = getFrameData(); - for (int i: frameData.keySet()) { - if (i<=n) continue; - FrameData frame = frameData.get(i); - frame.clear(); - toRemove.add(i); - } - for (int i: toRemove) { - frameData.remove(i); - } - TTrack track = getTrack(); - boolean isAlwaysMarked = track.steps.isAutofill() || track instanceof CoordAxes; - if (!isAlwaysMarked) { - Step[] steps = track.getSteps(); - for (int i = n+1; i < steps.length; i++) { - steps[i] = null; - } - } - refreshGUI(); - AutoTracker.this.repaint(); - track.dataValid = false; - track.firePropertyChange("data", null, track); //$NON-NLS-1$ - } - }; - - final Action deleteAllAction = new AbstractAction() { - public void actionPerformed(ActionEvent e) { - // clears all matches and steps - reset(); - } - }; - - deleteButton = new JButton(); - deleteButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - // first determine what can be deleted - int n = trackerPanel.getFrameNumber(); - TTrack track = getTrack(); - boolean isAlwaysMarked = track.steps.isAutofill() || track instanceof CoordAxes; - boolean hasThis = false; - boolean isKeyFrame = getFrame(n).isKeyFrame(); - - // count steps and look for this and later points/matches - int stepCount = 0; - boolean hasLater = false; - if (isAlwaysMarked) { - Map frameData = getFrameData(); - for (Integer i: frameData.keySet()) { - FrameData frame = frameData.get(i); - if (frame.trackPoint==null) continue; - hasLater = hasLater || i>n; - hasThis = hasThis || i==n; - stepCount++; - } - } - else { - hasThis = track.getStep(n)!=null; - Step[] steps = track.getSteps(); - for (int i = 0; i< steps.length; i++) { - if (steps[i]!=null) { - hasLater = hasLater || i>n; - stepCount++; - } - } - } - - // now build the popup menu with suitable delete items - JPopupMenu popup = new JPopupMenu(); - if (isKeyFrame) { - JMenuItem item = new JMenuItem(TrackerRes.getString("AutoTracker.Wizard.Menuitem.DeleteThisKeyFrame")); //$NON-NLS-1$ - popup.add(item); - item.addActionListener(deleteKeyFrameAction); - } - if (hasThis) { - JMenuItem item = new JMenuItem(isAlwaysMarked? - TrackerRes.getString("AutoTracker.Wizard.Menuitem.DeleteThisMatch"): //$NON-NLS-1$ - TrackerRes.getString("AutoTracker.Wizard.Menuitem.DeleteThis")); //$NON-NLS-1$ - popup.add(item); - item.addActionListener(deleteThisAction); - } - if (hasLater) { - JMenuItem item = new JMenuItem(isAlwaysMarked? - TrackerRes.getString("AutoTracker.Wizard.Menuitem.DeleteLaterMatches"): //$NON-NLS-1$ - TrackerRes.getString("AutoTracker.Wizard.Menuitem.DeleteLater")); //$NON-NLS-1$ - popup.add(item); - item.addActionListener(deleteLaterAction); - } - if (stepCount>0 && !(stepCount==1 && hasThis)) { - JMenuItem item = new JMenuItem(TrackerRes.getString("AutoTracker.Wizard.Menuitem.DeleteAll")); //$NON-NLS-1$ - popup.add(item); - item.addActionListener(deleteAllAction); - } - FontSizer.setFonts(popup, FontSizer.getLevel()); - popup.show(deleteButton, 0, deleteButton.getHeight()); - } - }); - deleteButton.addKeyListener(kl); - - keyFrameButton = new JButton(); - keyFrameButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - // find all key frames - ArrayList keyFrames = new ArrayList(); - Map frameData = getFrameData(); - for (Integer i: frameData.keySet()) { - FrameData frame = frameData.get(i); - if (frame.isKeyFrame()) - keyFrames.add(i); - } - Action keyAction = new AbstractAction() { - public void actionPerformed(ActionEvent e) { - int i = Integer.parseInt(e.getActionCommand()); - VideoClip clip = trackerPanel.getPlayer().getVideoClip(); - trackerPanel.getPlayer().setStepNumber(clip.frameToStep(i)); - } - }; - JPopupMenu popup = new JPopupMenu(); - for (Integer i: keyFrames) { - String s = TrackerRes.getString("AutoTracker.Label.Frame"); //$NON-NLS-1$ - JMenuItem item = new JMenuItem(s+" "+i); //$NON-NLS-1$ - item.addActionListener(keyAction); - item.setActionCommand(String.valueOf(i)); - popup.add(item); - } - FontSizer.setFonts(popup, FontSizer.getLevel()); - popup.show(keyFrameButton, 0, keyFrameButton.getHeight()); - } - }); - keyFrameButton.addKeyListener(kl); - - // assemble content - infoPanel = new JPanel(new BorderLayout()) { - public Dimension getPreferredSize() { - if (textPaneSize!=null) return textPaneSize; - return super.getPreferredSize(); - } - }; - Border empty = BorderFactory.createEmptyBorder(4, 6, 4, 6); - Border etch = BorderFactory.createEtchedBorder(); - infoPanel.setBorder(BorderFactory.createCompoundBorder(etch, empty)); - infoPanel.setBackground(textPane.getBackground()); - infoPanel.add(textPane, BorderLayout.CENTER); - infoPanel.add(followupPanel, BorderLayout.SOUTH); - - JPanel controlPanel = new JPanel(new GridLayout(0, 1)); - controlPanel.add(templateToolbar); - controlPanel.add(searchToolbar); - controlPanel.add(targetToolbar); - - northPanel = new JPanel(new BorderLayout()); - northPanel.add(startPanel, BorderLayout.NORTH); - northPanel.add(imageToolbar, BorderLayout.SOUTH); - - JPanel center = new JPanel(new BorderLayout()); - center.add(controlPanel, BorderLayout.NORTH); - center.add(infoPanel, BorderLayout.CENTER); - - JPanel south = new JPanel(new FlowLayout()); - south.add(helpButton); - south.add(keyFrameButton); - south.add(deleteButton); - south.add(closeButton); - - contentPane.add(northPanel, BorderLayout.NORTH); - contentPane.add(center, BorderLayout.CENTER); - contentPane.add(south, BorderLayout.SOUTH); - - refreshGUI(); - } - - /** - * Refreshes the preferred size of the text pane. - */ - protected void refreshTextPaneSize() { - textPaneSize = null; - followupPanel.removeAll(); - followupPanel.add(acceptButton); - textPane.setText(getTemplateInstructions()); - Dimension dim = infoPanel.getPreferredSize(); - textPane.setText(getTargetInstructions()); - dim.height = Math.max(dim.height, infoPanel.getPreferredSize().height); - textPane.setText(getSearchInstructions()); - dim.height = Math.max(dim.height, infoPanel.getPreferredSize().height); - dim.height += 6; - textPaneSize = dim; - refreshButtons(); - refreshInfo(); - } - - /** - * Refreshes the titles and labels. - */ - protected void refreshStrings() { - Runnable runner = new Runnable() { - public void run() { - int n = trackerPanel.getFrameNumber(); - FrameData frame = getFrame(n); - FrameData keyFrame = frame.getKeyFrame(); - - // set titles and labels of GUI elements - String title = TrackerRes.getString("AutoTracker.Wizard.Title"); //$NON-NLS-1$ - TTrack track = getTrack(); - if (track!=null) { - int index = track.getTargetIndex(); - title += ": "+track.getName()+" "+track.getTargetDescription(index); //$NON-NLS-1$ //$NON-NLS-2$ - } - setTitle(title); - - frameLabel.setText(TrackerRes.getString("AutoTracker.Label.Frame")+" "+n+":"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - searchLabel.setText( - TrackerRes.getString("AutoTracker.Label.Search") + ":"); //$NON-NLS-1$ //$NON-NLS-2$ - targetLabel.setText( - TrackerRes.getString("AutoTracker.Label.Target")+":"); //$NON-NLS-1$ //$NON-NLS-2$ - templateLabel.setText( - TrackerRes.getString("AutoTracker.Label.Template")+":"); //$NON-NLS-1$ //$NON-NLS-2$ - acceptLabel.setText(TrackerRes.getString("AutoTracker.Label.Automark")); //$NON-NLS-1$ - trackLabel.setText(TrackerRes.getString("AutoTracker.Label.Track")); //$NON-NLS-1$ - pointLabel.setText(TrackerRes.getString("AutoTracker.Label.Point")); //$NON-NLS-1$ - evolveRateLabel.setText(TrackerRes.getString("AutoTracker.Label.EvolutionRate")); //$NON-NLS-1$ - closeButton.setText(TrackerRes.getString("Dialog.Button.Close")); //$NON-NLS-1$ - helpButton.setText(TrackerRes.getString("Dialog.Button.Help")); //$NON-NLS-1$ - acceptButton.setText(TrackerRes.getString("AutoTracker.Wizard.Button.Accept")); //$NON-NLS-1$ - keyFrameButton.setText(TrackerRes.getString("AutoTracker.Wizard.Button.ShowKeyFrame")); //$NON-NLS-1$ - deleteButton.setText(TrackerRes.getString("AutoTracker.Wizard.Button.Delete")); //$NON-NLS-1$ - oneDCheckbox.setText(TrackerRes.getString("AutoTracker.Wizard.Checkbox.XAxis")); //$NON-NLS-1$ - lookAheadCheckbox.setText(TrackerRes.getString("AutoTracker.Wizard.Checkbox.LookAhead")); //$NON-NLS-1$ - matchImageLabel.setText(frame.getMatchIcon()==null? null: - TrackerRes.getString("AutoTracker.Label.Match")); //$NON-NLS-1$ - templateImageLabel.setText(keyFrame==null? null: - TrackerRes.getString("AutoTracker.Label.Template")); //$NON-NLS-1$ - - if (trackerPanel.getVideo()!=null) { - boolean running = stepping && !paused; - startButton.setIcon(stepping? stopIcon: searchIcon); - startButton.setText(stepping? - TrackerRes.getString("AutoTracker.Wizard.Button.Stop"): //$NON-NLS-1$ - TrackerRes.getString("AutoTracker.Wizard.Button.Search")); //$NON-NLS-1$ + item.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + hidePopup = false; + // get match score data string + String matchScore = getMatchDataString(); + // copy to the clipboard + Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + StringSelection stringSelection = new StringSelection(matchScore); + clipboard.setContents(stringSelection, stringSelection); + } + }); + popup.add(item); + } + hidePopup = true; + FontSizer.setFonts(popup, FontSizer.getLevel()); + popup.show(startButton, 0, startButton.getHeight()); + } else { + searchAction.actionPerformed(e); + } + } + }); + startButton.addKeyListener(kl); + startButton.addMouseMotionListener(new MouseAdapter() { + @Override + public void mouseMoved(MouseEvent e) { + startButton.setText(e.isShiftDown() && !stepping ? + TrackerRes.getString("AutoTracker.Wizard.Button.Options") : //$NON-NLS-1$ + stepping ? + TrackerRes.getString("AutoTracker.Wizard.Button.Stop") : //$NON-NLS-1$ + TrackerRes.getString("AutoTracker.Wizard.Button.Search")); //$NON-NLS-1$); + } + }); + startPanel.add(startButton); + searchThisButton = new JButton(); + searchThisButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + neverPause = (e.getModifiers() > 16); + search(true, false); // search this frame and stop + } + }); + searchThisButton.addKeyListener(kl); + startPanel.add(searchThisButton); + searchNextButton = new JButton(); + searchNextButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + neverPause = (e.getModifiers() > 16); + search(false, false); // search next frame and stop + } + }); + searchNextButton.addKeyListener(kl); + startPanel.add(searchNextButton); + + // create followup panel + followupPanel = new JPanel(); + followupPanel.setBorder(BorderFactory.createEmptyBorder()); + followupPanel.setOpaque(false); + + // create template image toolbar + imageToolbar = new JToolBar(); + imageToolbar.setFloatable(false); + frameLabel = new JLabel(); + frameLabel.setOpaque(false); + frameLabel.setBorder(BorderFactory.createEmptyBorder(0, 6, 0, 6)); + + templateImageLabel = new JLabel(); + templateImageLabel.setBorder(BorderFactory.createEmptyBorder(0, 6, 0, 6)); + templateImageLabel.setIconTextGap(3); + templateImageLabel.setHorizontalTextPosition(SwingConstants.LEFT); + templateImageLabel.addMouseListener(mouseOverListener); + + matchImageLabel = new JLabel(); + matchImageLabel.setBorder(BorderFactory.createEmptyBorder(0, 6, 0, 6)); + matchImageLabel.setIconTextGap(3); + matchImageLabel.setHorizontalTextPosition(SwingConstants.LEFT); + matchImageLabel.addMouseListener(mouseOverListener); + + JPanel flowpanel = new JPanel(); + flowpanel.setOpaque(false); + flowpanel.setBorder(BorderFactory.createEmptyBorder()); + flowpanel.add(templateImageLabel); + flowpanel.add(matchImageLabel); + imageToolbar.add(frameLabel); + imageToolbar.add(flowpanel); + imageToolbar.addMouseListener(mouseOverListener); + + // create template toolbar + templateToolbar = new JToolBar(); + templateToolbar.setFloatable(false); + templateToolbar.addMouseListener(mouseOverListener); + templateLabel = new JLabel(); + templateLabel.setOpaque(false); + templateLabel.setBorder(BorderFactory.createEmptyBorder(0, 6, 0, 6)); + evolveRateLabel = new JLabel(); + evolveRateLabel.setOpaque(false); + evolveRateLabel.addMouseListener(mouseOverListener); + + SpinnerModel model = new SpinnerNumberModel(defaultEvolveRate, 0, options.maxEvolveRate, options.maxEvolveRate / 20); + evolveSpinner = new TallSpinner(model, trackDropdown); + evolveSpinner.addMouseListenerToAll(mouseOverListener); + evolveSpinner.getTextField().setFormatterFactory(new JFormattedTextField.AbstractFormatterFactory() { + public JFormattedTextField.AbstractFormatter getFormatter(JFormattedTextField tf) { + JFormattedTextField.AbstractFormatter formatter + = new JFormattedTextField.AbstractFormatter() { + public String valueToString(Object value) throws ParseException { + return value.toString() + "%"; //$NON-NLS-1$ + } + + public Object stringToValue(String text) throws ParseException { + return Integer.parseInt(text.substring(0, text.length() - 1)); + } + }; + return formatter; + } + }); + + ChangeListener listener = new ChangeListener() { + public void stateChanged(ChangeEvent e) { + if (ignoreChanges) return; + Integer i = (Integer) evolveSpinner.getValue(); + options.setEvolveAlphaFromRate(i); + int n = trackerPanel.getFrameNumber(); + FrameData frame = getFrame(n); + core.buildEvolvedTemplate(frame); + if (frame.isKeyFrame()) + refreshKeyFrame((KeyFrame) frame); + stop(true, false); + setChanged(); + } + }; + evolveSpinner.addChangeListener(listener); + options.setEvolveAlphaFromRate((Integer) evolveSpinner.getValue()); // TODO: redundant? + + acceptLabel = new JLabel(); + acceptLabel.setOpaque(false); + acceptLabel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0)); + model = new SpinnerNumberModel(options.getGoodMatch(), options.getPossibleMatch(), 10, 1); + acceptSpinner = new TallSpinner(model, trackDropdown); + acceptSpinner.addMouseListenerToAll(mouseOverListener); + listener = new ChangeListener() { + public void stateChanged(ChangeEvent e) { + options.setGoodMatch((Integer) acceptSpinner.getValue()); // TODO: accept strings + setChanged(); + } + }; + acceptSpinner.addChangeListener(listener); + + templateWidthLabel = new JLabel("Width"); + templateWidthLabel.setOpaque(false); + templateWidthLabel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0)); + model = new SpinnerNumberModel(options.getMaskWidth(), 1, 1000, 1); + templateWidthSpinner = new TallSpinner(model, trackDropdown); + templateWidthSpinner.addMouseListenerToAll(mouseOverListener); + listener = new ChangeListener() { + public void stateChanged(ChangeEvent e) { + options.setMaskWidth((Double) templateWidthSpinner.getValue()); // TODO: accept strings + setChanged(); + } + }; + templateWidthSpinner.addChangeListener(listener); + templateWidthSpinner.getTextField().setEnabled(true); + options.changes.addPropertyChangeListener("maskWidth", new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent propertyChangeEvent) { + templateWidthSpinner.setValue(options.getMaskWidth()); + } + }); + + templateHeightLabel = new JLabel("Height"); + templateHeightLabel.setOpaque(false); + templateHeightLabel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0)); + model = new SpinnerNumberModel(options.getMaskHeight(), 1, 1000, 1); + templateHeightSpinner = new TallSpinner(model, trackDropdown); + templateHeightSpinner.addMouseListenerToAll(mouseOverListener); + listener = new ChangeListener() { + public void stateChanged(ChangeEvent e) { + options.setMaskHeight((Double) templateHeightSpinner.getValue()); // TODO: accept strings + setChanged(); + } + }; + templateHeightSpinner.addChangeListener(listener); + templateHeightSpinner.getTextField().setEnabled(true); + options.changes.addPropertyChangeListener("maskHeight", new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent propertyChangeEvent) { + templateHeightSpinner.setValue(options.getMaskHeight()); + } + }); + + rectShapeCheckbox = new JCheckBox("Rectangular"); + rectShapeCheckbox.addMouseListener(mouseOverListener); + rectShapeCheckbox.setOpaque(false); + rectShapeCheckbox.setSelected(options.getMaskShapeType() == 1); + rectShapeCheckbox.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + options.setMaskShapeType(rectShapeCheckbox.isSelected() ? 1 : 0); + setChanged(); + } + }); + geometryToolbar = new JToolBar(); + geometryToolbar.setFloatable(false); + geometryToolbar.addMouseListener(mouseOverListener); + + JPanel geompanel = new JPanel(); + geometryToolbar.add(geompanel); + geompanel.add(templateWidthLabel); + geompanel.add(templateWidthSpinner); + geompanel.add(templateHeightLabel); + geompanel.add(templateHeightSpinner); + geompanel.add(rectShapeCheckbox); + + autoskipLabel = new JLabel(); + autoskipLabel.setOpaque(false); + autoskipLabel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0)); + model = new SpinnerNumberModel(options.getAutoskipCount(), 0, 10, 1); + autoskipSpinner = new TallSpinner(model, trackDropdown); + autoskipSpinner.addMouseListenerToAll(mouseOverListener); + listener = new ChangeListener() { + public void stateChanged(ChangeEvent e) { + options.setAutoskipCount((Integer) autoskipSpinner.getValue()); + setChanged(); + } + }; + autoskipSpinner.addChangeListener(listener); + + + flowpanel = new JPanel(); + flowpanel.setOpaque(false); + flowpanel.add(evolveRateLabel); + flowpanel.add(evolveSpinner); + flowpanel.add(acceptLabel); + flowpanel.add(acceptSpinner); + + templateToolbar.add(templateLabel); + templateToolbar.add(flowpanel); + + autoskipToolbar = new JToolBar(); + autoskipToolbar.setFloatable(false); + autoskipToolbar.addMouseListener(mouseOverListener); + flowpanel = new JPanel(); + flowpanel.setOpaque(false); + flowpanel.add(autoskipLabel); + flowpanel.add(autoskipSpinner); + autoskipToolbar.add(flowpanel); + + + // create search toolbar + searchToolbar = new JToolBar(); + searchToolbar.setFloatable(false); + searchToolbar.addMouseListener(mouseOverListener); + searchLabel = new JLabel(); + searchLabel.setOpaque(false); + searchLabel.setBorder(BorderFactory.createEmptyBorder(0, 6, 0, 6)); + oneDCheckbox = new JCheckBox(); + oneDCheckbox.addMouseListener(mouseOverListener); + oneDCheckbox.setOpaque(false); + oneDCheckbox.setSelected(options.getLineSpread() >= 0); + oneDCheckbox.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + options.setLineSpread(oneDCheckbox.isSelected() ? 0 : -1); + setChanged(); + if (oneDCheckbox.isSelected()) { + int n = trackerPanel.getFrameNumber(); + CoordAxes axes = trackerPanel.getAxes(); + KeyFrame frame = getFrame(n).getKeyFrame(); + if (frame != null) { + n = frame.getFrameNumber(); + TPoint[] maskPts = frame.getMaskPoints(); + axes.getOrigin().setXY(maskPts[0].x, maskPts[0].y); + } + axes.setVisible(true); + } + trackerPanel.repaint(); + } + }); + lookAheadCheckbox = new JCheckBox(); + lookAheadCheckbox.addMouseListener(mouseOverListener); + lookAheadCheckbox.setOpaque(false); + lookAheadCheckbox.setSelected(options.isLookAhead()); + lookAheadCheckbox.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + options.setLookAhead(lookAheadCheckbox.isSelected()); + setChanged(); + } + }); + flowpanel = new JPanel(); + flowpanel.setBorder(BorderFactory.createEmptyBorder(1, 0, 0, 0)); + flowpanel.setOpaque(false); + flowpanel.add(oneDCheckbox); + flowpanel.add(lookAheadCheckbox); + searchToolbar.add(searchLabel); + searchToolbar.add(flowpanel); + + // create target toolbar + targetToolbar = new JToolBar(); + targetToolbar.setFloatable(false); + targetToolbar.addMouseListener(mouseOverListener); + targetLabel = new JLabel(); + targetLabel.setOpaque(false); + targetLabel.setBorder(BorderFactory.createEmptyBorder(0, 6, 0, 6)); + + trackLabel = new JLabel(); + trackLabel.setOpaque(false); + + pointLabel = new JLabel(); + pointLabel.setOpaque(false); + pointLabel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0)); + + pointDropdown = new JComboBox() { + public Dimension getPreferredSize() { + Dimension dim = super.getPreferredSize(); + dim.height = trackDropdown.getPreferredSize().height; + return dim; + } + }; + pointDropdown.addMouseListener(mouseOverListener); + for (int i = 0; i < pointDropdown.getComponentCount(); i++) { + pointDropdown.getComponent(i).addMouseListener(mouseOverListener); + } + pointDropdown.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if ("refresh".equals(pointDropdown.getName())) return; //$NON-NLS-1$ + String item = (String) pointDropdown.getSelectedItem(); + if (item != null) { + stop(true, false); + TTrack track = getTrack(); + track.setTargetIndex(item); + int n = trackerPanel.getFrameNumber(); + FrameData frame = getFrame(n); + TPoint[] searchPts = frame.getSearchPoints(true); + if (searchPts != null) + setSearchPoints(searchPts[0], searchPts[1]); + refreshGUI(); + } + } + }); + + targetPanel = new JPanel(); + targetPanel.setOpaque(false); + targetPanel.add(trackLabel); + targetPanel.add(trackDropdown); + targetPanel.add(pointLabel); + targetPanel.add(pointDropdown); + targetToolbar.add(targetLabel); + targetToolbar.add(targetPanel); + + // create text area for hints + textPane = new JTextArea(); + textPane.setEditable(false); + textPane.setLineWrap(true); + textPane.setWrapStyleWord(true); + textPane.setBorder(BorderFactory.createEmptyBorder()); + textPane.setForeground(Color.blue); + textPane.addKeyListener(kl); + textPane.addMouseListener(mouseOverListener); + + // create buttons + closeButton = new JButton(); + closeButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + stop(true, true); // stop after the next search + setVisible(false); + } + }); + closeButton.addKeyListener(kl); + + helpButton = new JButton(); + helpButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + trackerPanel.getTFrame().showHelp("autotracker", 0); //$NON-NLS-1$ + } + }); + helpButton.addKeyListener(kl); + + acceptButton = new JButton(); + acceptButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + marking = true; + int n = control.getFrameNumber(); + core.forceAccept(n); + if (stepping && control.canStep()) { + paused = false; + control.step(); + } else { + stop(true, true); + } + } + }); + acceptButton.addKeyListener(kl); + + skipButton = new JButton(); + skipButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + // set decided flag + int n = trackerPanel.getFrameNumber(); + FrameData frame = getFrame(n); + frame.decided = true; + // eliminate match icon? + //frame.setMatchIcon(null); + // step to the next frame if possible + if (control.canStep()) { + paused = false; + control.step(); + } else { + stop(true, false); + } + } + }); + skipButton.addKeyListener(kl); + + final Action deleteKeyFrameAction = new AbstractAction() { + public void actionPerformed(ActionEvent e) { + KeyFrame keyFrame = core.deleteKeyFrame(control.getFrameNumber()); + + if (keyFrame != null) { // earlier keyframe exists + maskCenter.setLocation(keyFrame.getMaskPoints()[0]); + maskCorner.setLocation(keyFrame.getMaskPoints()[1]); + } + + refreshGUI(); + AutoTracker.this.repaint(); + trackerPanel.repaint(); + } + }; + + final Action deleteThisAction = new AbstractAction() { + public void actionPerformed(ActionEvent e) { + // clear this match and step + int n = trackerPanel.getFrameNumber(); + core.deleteFrame(n); + refreshGUI(); + AutoTracker.this.repaint(); + } + }; + + final Action deleteLaterAction = new AbstractAction() { + public void actionPerformed(ActionEvent e) { + // clear later matches and steps + int n = trackerPanel.getFrameNumber(); + core.deleteLater(n); + refreshGUI(); + AutoTracker.this.repaint(); + } + }; + + final Action deleteAllAction = new AbstractAction() { + public void actionPerformed(ActionEvent e) { + // clears all matches and steps + reset(); + } + }; + + deleteButton = new JButton(); + deleteButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + // first determine what can be deleted + int n = trackerPanel.getFrameNumber(); + boolean[] summary = core.getDeletableSummary(n); + boolean + isAlwaysMarked = summary[0], + isKeyFrame = summary[1], + hasThis = summary[2], + hasLater = summary[3], + hasNotOnlyThis = summary[4]; + + // now build the popup menu with suitable delete items + JPopupMenu popup = new JPopupMenu(); + if (isKeyFrame) { + JMenuItem item = new JMenuItem(TrackerRes.getString("AutoTracker.Wizard.Menuitem.DeleteThisKeyFrame")); //$NON-NLS-1$ + popup.add(item); + item.addActionListener(deleteKeyFrameAction); + } + if (hasThis) { + JMenuItem item = new JMenuItem(isAlwaysMarked ? + TrackerRes.getString("AutoTracker.Wizard.Menuitem.DeleteThisMatch") : //$NON-NLS-1$ + TrackerRes.getString("AutoTracker.Wizard.Menuitem.DeleteThis")); //$NON-NLS-1$ + popup.add(item); + item.addActionListener(deleteThisAction); + } + if (hasLater) { + JMenuItem item = new JMenuItem(isAlwaysMarked ? + TrackerRes.getString("AutoTracker.Wizard.Menuitem.DeleteLaterMatches") : //$NON-NLS-1$ + TrackerRes.getString("AutoTracker.Wizard.Menuitem.DeleteLater")); //$NON-NLS-1$ + popup.add(item); + item.addActionListener(deleteLaterAction); + } + if (hasNotOnlyThis) { + JMenuItem item = new JMenuItem(TrackerRes.getString("AutoTracker.Wizard.Menuitem.DeleteAll")); //$NON-NLS-1$ + popup.add(item); + item.addActionListener(deleteAllAction); + } + FontSizer.setFonts(popup, FontSizer.getLevel()); + popup.show(deleteButton, 0, deleteButton.getHeight()); + } + }); + deleteButton.addKeyListener(kl); + + keyFrameButton = new JButton(); + keyFrameButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + // find all key frames + ArrayList keyFrames = core.listKeyFrames(); + Action keyAction = new AbstractAction() { + public void actionPerformed(ActionEvent e) { + int i = Integer.parseInt(e.getActionCommand()); + VideoClip clip = trackerPanel.getPlayer().getVideoClip(); + trackerPanel.getPlayer().setStepNumber(clip.frameToStep(i)); + } + }; + JPopupMenu popup = new JPopupMenu(); + for (Integer i : keyFrames) { + String s = TrackerRes.getString("AutoTracker.Label.Frame"); //$NON-NLS-1$ + JMenuItem item = new JMenuItem(s + " " + i); //$NON-NLS-1$ + item.addActionListener(keyAction); + item.setActionCommand(String.valueOf(i)); + popup.add(item); + } + FontSizer.setFonts(popup, FontSizer.getLevel()); + popup.show(keyFrameButton, 0, keyFrameButton.getHeight()); + } + }); + keyFrameButton.addKeyListener(kl); + + // assemble content + infoPanel = new JPanel(new BorderLayout()) { + public Dimension getPreferredSize() { + if (textPaneSize != null) return textPaneSize; + return super.getPreferredSize(); + } + }; + Border empty = BorderFactory.createEmptyBorder(4, 6, 4, 6); + Border etch = BorderFactory.createEtchedBorder(); + infoPanel.setBorder(BorderFactory.createCompoundBorder(etch, empty)); + infoPanel.setBackground(textPane.getBackground()); + infoPanel.add(textPane, BorderLayout.CENTER); + infoPanel.add(followupPanel, BorderLayout.SOUTH); + + JPanel controlPanel = new JPanel(new GridLayout(0, 1)); + controlPanel.add(templateToolbar); + controlPanel.add(geometryToolbar); + controlPanel.add(autoskipToolbar); + controlPanel.add(searchToolbar); + controlPanel.add(targetToolbar); + + northPanel = new JPanel(new BorderLayout()); + northPanel.add(startPanel, BorderLayout.NORTH); + northPanel.add(imageToolbar, BorderLayout.SOUTH); + + JPanel center = new JPanel(new BorderLayout()); + center.add(controlPanel, BorderLayout.NORTH); + center.add(infoPanel, BorderLayout.CENTER); + + JPanel south = new JPanel(new FlowLayout()); + south.add(helpButton); + south.add(keyFrameButton); + south.add(deleteButton); + south.add(closeButton); + + contentPane.add(northPanel, BorderLayout.NORTH); + contentPane.add(center, BorderLayout.CENTER); + contentPane.add(south, BorderLayout.SOUTH); + + refreshGUI(); + } + + /** + * Refreshes the preferred size of the text pane. + */ + protected void refreshTextPaneSize() { + textPaneSize = null; + followupPanel.removeAll(); + followupPanel.add(acceptButton); + textPane.setText(getTemplateInstructions()); + Dimension dim = infoPanel.getPreferredSize(); + textPane.setText(getTargetInstructions()); + dim.height = Math.max(dim.height, infoPanel.getPreferredSize().height); + textPane.setText(getSearchInstructions()); + dim.height = Math.max(dim.height, infoPanel.getPreferredSize().height); + dim.height += 6; + textPaneSize = dim; + refreshButtons(); + refreshInfo(); + } + + /** + * Refreshes the titles and labels. + */ + protected void refreshStrings() { + Runnable runner = new Runnable() { + public void run() { + int n = trackerPanel.getFrameNumber(); + FrameData frame = getFrame(n); + FrameData keyFrame = frame.getKeyFrame(); + + // set titles and labels of GUI elements + String title = TrackerRes.getString("AutoTracker.Wizard.Title"); //$NON-NLS-1$ + TTrack track = getTrack(); + if (track != null) { + int index = track.getTargetIndex(); + title += ": " + track.getName() + " " + track.getTargetDescription(index); //$NON-NLS-1$ //$NON-NLS-2$ + } + setTitle(title); + + frameLabel.setText(TrackerRes.getString("AutoTracker.Label.Frame") + " " + n + ":"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + searchLabel.setText( + TrackerRes.getString("AutoTracker.Label.Search") + ":"); //$NON-NLS-1$ //$NON-NLS-2$ + targetLabel.setText( + TrackerRes.getString("AutoTracker.Label.Target") + ":"); //$NON-NLS-1$ //$NON-NLS-2$ + templateLabel.setText( + TrackerRes.getString("AutoTracker.Label.Template") + ":"); //$NON-NLS-1$ //$NON-NLS-2$ + acceptLabel.setText(TrackerRes.getString("AutoTracker.Label.Automark")); //$NON-NLS-1$ + trackLabel.setText(TrackerRes.getString("AutoTracker.Label.Track")); //$NON-NLS-1$ + pointLabel.setText(TrackerRes.getString("AutoTracker.Label.Point")); //$NON-NLS-1$ + evolveRateLabel.setText(TrackerRes.getString("AutoTracker.Label.EvolutionRate")); //$NON-NLS-1$ + autoskipLabel.setText(TrackerRes.getString("AutoTracker.Label.Autoskip")); //$NON-NLS-1$ + closeButton.setText(TrackerRes.getString("Dialog.Button.Close")); //$NON-NLS-1$ + helpButton.setText(TrackerRes.getString("Dialog.Button.Help")); //$NON-NLS-1$ + acceptButton.setText(TrackerRes.getString("AutoTracker.Wizard.Button.Accept")); //$NON-NLS-1$ + keyFrameButton.setText(TrackerRes.getString("AutoTracker.Wizard.Button.ShowKeyFrame")); //$NON-NLS-1$ + deleteButton.setText(TrackerRes.getString("AutoTracker.Wizard.Button.Delete")); //$NON-NLS-1$ + oneDCheckbox.setText(TrackerRes.getString("AutoTracker.Wizard.Checkbox.XAxis")); //$NON-NLS-1$ + lookAheadCheckbox.setText(TrackerRes.getString("AutoTracker.Wizard.Checkbox.LookAhead")); //$NON-NLS-1$ + matchImageLabel.setText(frame.getMatchIcon() == null ? null : + TrackerRes.getString("AutoTracker.Label.Match")); //$NON-NLS-1$ + templateImageLabel.setText(keyFrame == null ? null : + TrackerRes.getString("AutoTracker.Label.Template")); //$NON-NLS-1$ + + if (trackerPanel.getVideo() != null) { + boolean running = stepping && !paused; + startButton.setIcon(stepping ? stopIcon : searchIcon); + startButton.setText(stepping ? + TrackerRes.getString("AutoTracker.Wizard.Button.Stop") : //$NON-NLS-1$ + TrackerRes.getString("AutoTracker.Wizard.Button.Search") //$NON-NLS-1$ + ); startButton.setToolTipText(TrackerRes.getString("AutoTracker.Wizard.Button.Search.Tooltip")); //$NON-NLS-1$ FontSizer.setFonts(startButton, FontSizer.getLevel()); searchThisButton.setText(TrackerRes.getString("AutoTracker.Wizard.Button.SearchThis")); //$NON-NLS-1$ @@ -2993,684 +2195,737 @@ public void run() { searchNextButton.setText(TrackerRes.getString("AutoTracker.Wizard.Button.SearchNext")); //$NON-NLS-1$ searchNextButton.setEnabled(!running); searchNextButton.setToolTipText(TrackerRes.getString("AutoTracker.Wizard.Button.SearchNext.Tooltip")); //$NON-NLS-1$ - } - - // set label sizes - FontRenderContext frc = new FontRenderContext(null, false, false); - Font font = frameLabel.getFont(); - int w = 0; - Rectangle2D rect = font.getStringBounds(searchLabel.getText()+" ", frc); //$NON-NLS-1$ - w = Math.max(w, (int) rect.getWidth()+4); - rect = font.getStringBounds(frameLabel.getText()+" ", frc); //$NON-NLS-1$ - w = Math.max(w, (int) rect.getWidth()+4); - rect = font.getStringBounds(templateLabel.getText()+" ", frc); //$NON-NLS-1$ - w = Math.max(w, (int) rect.getWidth()+4); - rect = font.getStringBounds(targetLabel.getText()+" ", frc); //$NON-NLS-1$ - w = Math.max(w, (int) rect.getWidth()+4); - Dimension labelSize = new Dimension(w, 20); - frameLabel.setPreferredSize(labelSize); - templateLabel.setPreferredSize(labelSize); - searchLabel.setPreferredSize(labelSize); - targetLabel.setPreferredSize(labelSize); - } - }; - if (SwingUtilities.isEventDispatchThread()) runner.run(); - else SwingUtilities.invokeLater(runner); - } - - /** - * Refreshes the buttons and layout. - */ - protected void refreshButtons() { - Runnable runner = new Runnable() { - public void run() { - int n = trackerPanel.getFrameNumber(); - FrameData frame = getFrame(n); - TTrack track = getTrack(); - - // enable the search buttons - int code = getStatusCode(n); - KeyFrame keyFrame = frame.getKeyFrame(); - boolean initialized = keyFrame!=null && track!=null; - boolean notStepping = paused || !stepping; - boolean stable = frame.searched && !frame.newTemplateExists(); - boolean canSearchThis = !stable || code==5 || (changed&&code!=0) || (frame==keyFrame && frame.getMarkedPoint()==null); - startButton.setEnabled(initialized); - searchThisButton.setEnabled(initialized && notStepping && canSearchThis); - searchNextButton.setEnabled(initialized && canStep() && notStepping); - - // refresh template image labels and panel - if (templateImageLabel.getIcon()==null && matchImageLabel.getIcon()==null) { - templateImageLabel.setText(TrackerRes.getString("AutoTracker.Label.NoTemplate")); //$NON-NLS-1$ - matchImageLabel.setText(null); - imageToolbar.setPreferredSize(templateToolbar.getPreferredSize()); - templateImageLabel.setBorder(BorderFactory.createEmptyBorder(3, 0, 0, 0)); - } - else { - imageToolbar.setPreferredSize(null); - templateImageLabel.setBorder(null); - } - - // refresh the delete and keyframe buttons - boolean deleteButtonEnabled = track!=null; - if (deleteButtonEnabled) { - boolean isAlwaysMarked = track.steps.isAutofill() || track instanceof CoordAxes; - if (isAlwaysMarked) { - boolean hasFrameData = false; - Map frameData = getFrameData(); - for (Integer i: frameData.keySet()) { - FrameData next = frameData.get(i); - if (next.trackPoint!=null) { - hasFrameData = true; - break; - } - } - deleteButtonEnabled = hasFrameData || frame==keyFrame; - } - else { - deleteButtonEnabled = frame==keyFrame || !track.isEmpty(); - } - } - - deleteButton.setEnabled(deleteButtonEnabled); - keyFrameButton.setEnabled(keyFrame!=null); - + } + + // set label sizes + FontRenderContext frc = new FontRenderContext(null, false, false); + Font font = frameLabel.getFont(); + int w = 0; + Rectangle2D rect = font.getStringBounds(searchLabel.getText() + " ", frc); //$NON-NLS-1$ + w = Math.max(w, (int) rect.getWidth() + 4); + rect = font.getStringBounds(frameLabel.getText() + " ", frc); //$NON-NLS-1$ + w = Math.max(w, (int) rect.getWidth() + 4); + rect = font.getStringBounds(templateLabel.getText() + " ", frc); //$NON-NLS-1$ + w = Math.max(w, (int) rect.getWidth() + 4); + rect = font.getStringBounds(targetLabel.getText() + " ", frc); //$NON-NLS-1$ + w = Math.max(w, (int) rect.getWidth() + 4); + Dimension labelSize = new Dimension(w, 20); + frameLabel.setPreferredSize(labelSize); + templateLabel.setPreferredSize(labelSize); + searchLabel.setPreferredSize(labelSize); + targetLabel.setPreferredSize(labelSize); + } + }; + if (SwingUtilities.isEventDispatchThread()) runner.run(); + else SwingUtilities.invokeLater(runner); + } + + /** + * Refreshes the buttons and layout. + */ + protected void refreshButtons() { + Runnable runner = new Runnable() { + public void run() { + int n = trackerPanel.getFrameNumber(); + FrameData frame = getFrame(n); + TTrack track = getTrack(); + + // enable the search buttons + int code = core.getStatusCode(n); + KeyFrame keyFrame = frame.getKeyFrame(); + boolean initialized = keyFrame != null && track != null; + boolean notStepping = paused || !stepping; + boolean stable = frame.searched && !frame.newTemplateExists(); + boolean canSearchThis = !stable || code == 5 || (changed && code != 0) || (frame == keyFrame && frame.getMarkedPoint() == null); + startButton.setEnabled(initialized); + searchThisButton.setEnabled(initialized && notStepping && canSearchThis); + searchNextButton.setEnabled(initialized && control.canStep() && notStepping); + + // refresh template image labels and panel + if (templateImageLabel.getIcon() == null && matchImageLabel.getIcon() == null) { + templateImageLabel.setText(TrackerRes.getString("AutoTracker.Label.NoTemplate")); //$NON-NLS-1$ + matchImageLabel.setText(null); + imageToolbar.setPreferredSize(templateToolbar.getPreferredSize()); + templateImageLabel.setBorder(BorderFactory.createEmptyBorder(3, 0, 0, 0)); + } else { + imageToolbar.setPreferredSize(null); + templateImageLabel.setBorder(null); + } + + // refresh the delete and keyframe buttons + + deleteButton.setEnabled(core.isDeletable(n)); + keyFrameButton.setEnabled(keyFrame != null); + // rebuild followup panel followupPanel.removeAll(); - if (code==2 || code==8) { // possible match - acceptButton.setText(TrackerRes.getString("AutoTracker.Wizard.Button.Accept")); //$NON-NLS-1$ - followupPanel.add(acceptButton); + if (code == 2 || code == 8) { // possible match + acceptButton.setText(TrackerRes.getString("AutoTracker.Wizard.Button.Accept")); //$NON-NLS-1$ + followupPanel.add(acceptButton); } - if (code==2 || code==3 || code==4 || code==8 || code==9) { // searched but not automarked - skipButton.setText(TrackerRes.getString("AutoTracker.Wizard.Button.Skip")); //$NON-NLS-1$ - followupPanel.add(skipButton); + if (code == 2 || code == 3 || code == 4 || code == 8 || code == 9) { // searched but not automarked + skipButton.setText(TrackerRes.getString("AutoTracker.Wizard.Button.Skip")); //$NON-NLS-1$ + followupPanel.add(skipButton); } - repaint(); - } - }; - if (SwingUtilities.isEventDispatchThread()) runner.run(); - else SwingUtilities.invokeLater(runner); - } - - /** - * Refreshes the drawing flags. - */ - protected void refreshDrawingFlags() { - // refresh drawing flags - if (mouseOverObj==templateToolbar || mouseOverObj==imageToolbar) { - // show mask and search - maskVisible = true; - targetVisible = searchVisible = false; - } - else if (mouseOverObj==targetToolbar) { - // show target - targetVisible = true; - searchVisible = maskVisible = false; - } - else if (mouseOverObj==searchToolbar) { - // show searchRect and mask - searchVisible = true; - targetVisible = maskVisible = false; - } - else { - searchVisible = targetVisible = maskVisible = true; - } - } - - /** - * Refreshes the visible components of this wizard. - */ - protected void refreshGUI() { - TTrack track = getTrack(); - if (track!=null && this.isVisible()) - track.setMarkByDefault(false); - Runnable runner = new Runnable() { - public void run() { - if (trackerPanel==null) return; - refreshDropdowns(); - refreshStrings(); - refreshIcons(); - refreshButtons(); - refreshInfo(); - refreshDrawingFlags(); - pack(); - if (textPaneSize==null) - refreshTextPaneSize(); - } - }; - if (SwingUtilities.isEventDispatchThread()) runner.run(); - else SwingUtilities.invokeLater(runner); - } - - /** - * Refreshes the dropdown lists. - */ - protected void refreshDropdowns() { - // refresh trackDropdown - Object toSelect = null; - trackDropdown.setName("refresh"); //$NON-NLS-1$ - trackDropdown.removeAllItems(); - TTrack track = getTrack(); - for (TTrack next: trackerPanel.getTracks()) { - if (!next.isAutoTrackable()) continue; - Icon icon = next.getFootprint().getIcon(21, 16); - Object[] item = new Object[] {icon, next.getName()}; - trackDropdown.addItem(item); - if (next==track) { - toSelect = item; - } - } - if (track==null) { - Object[] emptyItem = new Object[] {null, " "}; //$NON-NLS-1$ - trackDropdown.insertItemAt(emptyItem, 0); - toSelect = emptyItem; - } - // select desired item - if (toSelect!=null) { - trackDropdown.setSelectedItem(toSelect); - } - trackDropdown.setName(null); - - // refresh pointDropdown - toSelect = null; - pointDropdown.setName("refresh"); //$NON-NLS-1$ - pointDropdown.removeAllItems(); - if (track!=null) { - int target = track.getTargetIndex(); - toSelect = track.getTargetDescription(target); - for (int i = 0; i=0) - buf.append(TrackerRes.getString("AutoTracker.Info.SearchOnAxis")); //$NON-NLS-1$ - else - buf.append(TrackerRes.getString("AutoTracker.Info.Search")); //$NON-NLS-1$ - buf.append("\n\n"); //$NON-NLS-1$ - buf.append(TrackerRes.getString("AutoTracker.Info.Title.Settings")); //$NON-NLS-1$ - buf.append(": "); //$NON-NLS-1$ - buf.append(TrackerRes.getString("AutoTracker.Info.Search.Instructions")); //$NON-NLS-1$ - buf.append("\n\n"); //$NON-NLS-1$ - buf.append(TrackerRes.getString("AutoTracker.Info.Title.Tip")); //$NON-NLS-1$ - buf.append(": "); //$NON-NLS-1$ - buf.append(TrackerRes.getString("AutoTracker.Info.Search.Tip")); //$NON-NLS-1$ - return buf.toString(); - } - - /** - * Returns the target instructions. - * - * @return the instructions - */ - protected String getTargetInstructions() { - StringBuffer buf = new StringBuffer(); - buf.append(TrackerRes.getString("AutoTracker.Info.Target")); //$NON-NLS-1$ - buf.append("\n\n"); //$NON-NLS-1$ - buf.append(TrackerRes.getString("AutoTracker.Info.Title.Settings")); //$NON-NLS-1$ - buf.append(": "); //$NON-NLS-1$ - buf.append(TrackerRes.getString("AutoTracker.Info.Target.Instructions")); //$NON-NLS-1$ - return buf.toString(); - } - - /** - * Returns the status text for a given frame number and status code. - * - * @param code the status code (integer 0-9) - * @param n the frame number - * @param peakWidthAndHeight the match data - * @return the status text - */ - protected String getStatusInfo(int code, int n, double[] peakWidthAndHeight) { - StringBuffer buf = new StringBuffer(); - buf.append(TrackerRes.getString("AutoTracker.Info.Frame")+" "+n); //$NON-NLS-1$ //$NON-NLS-2$ - switch(code) { - case 0: // keyframe - textPane.setForeground(Color.blue); - buf.append(" ("); //$NON-NLS-1$ - buf.append(TrackerRes.getString("AutoTracker.Info.KeyFrame").toLowerCase()); //$NON-NLS-1$ - buf.append("): "); //$NON-NLS-1$ - buf.append(TrackerRes.getString("AutoTracker.Info.KeyFrame.Instructions1")); //$NON-NLS-1$ - buf.append("\n\n"); //$NON-NLS-1$ - buf.append(TrackerRes.getString("AutoTracker.Info.KeyFrame.Instructions2")); //$NON-NLS-1$ - buf.append(" "); //$NON-NLS-1$ - buf.append(TrackerRes.getString("AutoTracker.Info.MouseOver.Instructions")); //$NON-NLS-1$ - break; - case 1: // good match was found and marked - textPane.setForeground(Color.green.darker()); - buf.append(" ("+TrackerRes.getString("AutoTracker.Info.MatchScore")); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append(" "+format.format(peakWidthAndHeight[1])+"): "); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append(TrackerRes.getString("AutoTracker.Info.Match")); //$NON-NLS-1$ - break; - case 2: // possible match was found, not marked - textPane.setForeground(Color.red); - buf.append(" ("+TrackerRes.getString("AutoTracker.Info.MatchScore")); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append(" "+format.format(peakWidthAndHeight[1])+"): "); //$NON-NLS-1$ //$NON-NLS-2$ - if (lineSpread>=0) { - buf.append(TrackerRes.getString("AutoTracker.Info.PossibleOnAxis")+"\n"); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.Accept")); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.RetryOnAxis")); //$NON-NLS-1$ //$NON-NLS-2$ - } - else { - buf.append(TrackerRes.getString("AutoTracker.Info.Possible")+"\n"); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.Accept")); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.Retry")); //$NON-NLS-1$ //$NON-NLS-2$ - } - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.Mark")); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.NewKeyFrame")); //$NON-NLS-1$ //$NON-NLS-2$ - if (canStep()) - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.Skip")); //$NON-NLS-1$ //$NON-NLS-2$ - break; - case 3: // no match was found - textPane.setForeground(Color.red); - buf.append(": "); //$NON-NLS-1$ - if (lineSpread>=0) { - buf.append(TrackerRes.getString("AutoTracker.Info.NoMatchOnAxis")+"\n"); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.RetryOnAxis")); //$NON-NLS-1$ //$NON-NLS-2$ - } - else { - buf.append(TrackerRes.getString("AutoTracker.Info.NoMatch")+"\n"); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.Retry")); //$NON-NLS-1$ //$NON-NLS-2$ - } - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.Mark")); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.NewKeyFrame")); //$NON-NLS-1$ //$NON-NLS-2$ - if (canStep()) - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.Skip")); //$NON-NLS-1$ //$NON-NLS-2$ - break; - case 4: // searchRect failed (no video image or x-axis inside) - textPane.setForeground(Color.red); - buf.append(": "); //$NON-NLS-1$ - if (lineSpread>=0) { // 1D tracking - buf.append(TrackerRes.getString("AutoTracker.Info.OutsideXAxis")+"\n"); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.RetryOnAxis")); //$NON-NLS-1$ //$NON-NLS-2$ - } - else { // 2D tracking - buf.append(TrackerRes.getString("AutoTracker.Info.Outside")+"\n"); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.Retry")); //$NON-NLS-1$ //$NON-NLS-2$ - } - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.Mark")); //$NON-NLS-1$ //$NON-NLS-2$ - if (canStep()) - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.Skip")); //$NON-NLS-1$ //$NON-NLS-2$ - break; - case 5: // target marked manually - textPane.setForeground(Color.blue); - buf.append(": "); //$NON-NLS-1$ - buf.append(TrackerRes.getString("AutoTracker.Info.MarkedByUser")); //$NON-NLS-1$ - break; - case 6: // match accepted - textPane.setForeground(Color.green.darker()); - buf.append(" ("+TrackerRes.getString("AutoTracker.Info.MatchScore")); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append(" "+format.format(peakWidthAndHeight[1])+"): "); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append(TrackerRes.getString("AutoTracker.Info.Accepted")); //$NON-NLS-1$ - break; - case 7: // not searched or marked - textPane.setForeground(Color.blue); - buf.append(" ("); //$NON-NLS-1$ - buf.append(TrackerRes.getString("AutoTracker.Info.Unsearched")); //$NON-NLS-1$ - buf.append("): "); //$NON-NLS-1$ - buf.append(TrackerRes.getString("AutoTracker.Info.Instructions")); //$NON-NLS-1$ - buf.append(" "); //$NON-NLS-1$ - buf.append(TrackerRes.getString("AutoTracker.Info.GetStarted")); //$NON-NLS-1$ - buf.append("\n\n"); //$NON-NLS-1$ - buf.append(TrackerRes.getString("AutoTracker.Info.MouseOver.Instructions")); //$NON-NLS-1$ - break; - case 8: // possible match found, existing mark or calibration tool - textPane.setForeground(Color.blue); - buf.append(" ("+TrackerRes.getString("AutoTracker.Info.MatchScore")); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append(" "+format.format(peakWidthAndHeight[1])+"): "); //$NON-NLS-1$ //$NON-NLS-2$ - if (lineSpread>=0) { - buf.append(TrackerRes.getString("AutoTracker.Info.PossibleReplace")+"\n"); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.Replace")); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.Keep")); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.RetryOnAxis")); //$NON-NLS-1$ //$NON-NLS-2$ - } - else { - buf.append(TrackerRes.getString("AutoTracker.Info.PossibleReplace")+"\n"); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.Replace")); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.Keep")); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.Retry")); //$NON-NLS-1$ //$NON-NLS-2$ - } - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.NewKeyFrame")); //$NON-NLS-1$ //$NON-NLS-2$ - break; - case 9: // no match found, existing mark or calibration tool - textPane.setForeground(Color.red); - buf.append(": "); //$NON-NLS-1$ - if (lineSpread>=0) { - buf.append(TrackerRes.getString("AutoTracker.Info.NoMatchOnAxis")+"\n"); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.RetryOnAxis")); //$NON-NLS-1$ //$NON-NLS-2$ - } - else { - buf.append(TrackerRes.getString("AutoTracker.Info.NoMatch")+"\n"); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.Retry")); //$NON-NLS-1$ //$NON-NLS-2$ - } - if (canStep()) - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.Keep")); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.NewKeyFrame")); //$NON-NLS-1$ //$NON-NLS-2$ - break; - case 10: // no match found, already marked - textPane.setForeground(Color.red); - buf.append(": "); //$NON-NLS-1$ - if (lineSpread>=0) { - buf.append(TrackerRes.getString("AutoTracker.Info.NoMatchOnAxis")+"\n"); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.RetryOnAxis")); //$NON-NLS-1$ //$NON-NLS-2$ - } - else { - buf.append(TrackerRes.getString("AutoTracker.Info.NoMatch")+"\n"); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.Retry")); //$NON-NLS-1$ //$NON-NLS-2$ - } - if (canStep()) - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.Keep")); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("\n"+TrackerRes.getString("AutoTracker.Info.NewKeyFrame")); //$NON-NLS-1$ //$NON-NLS-2$ - break; - } - return buf.toString(); - } - - protected void prepareForFixedSearch(boolean fixed) { - ignoreChanges = true; - if (fixed) { - prevEvolution = (Integer)evolveSpinner.getValue(); - prevLookAhead = lookAheadCheckbox.isSelected(); - prevOneD = oneDCheckbox.isSelected(); - isPrevValid = true; - evolveSpinner.setValue(0); - lookAheadCheckbox.setSelected(false); - oneDCheckbox.setSelected(false); - } - else if (isPrevValid) { - isPrevValid = false; - evolveSpinner.setValue(prevEvolution); - lookAheadCheckbox.setSelected(prevLookAhead); - oneDCheckbox.setSelected(prevOneD); - } - evolveSpinner.setEnabled(!fixed); - evolveRateLabel.setEnabled(!fixed); - lookAheadCheckbox.setEnabled(!fixed); - oneDCheckbox.setEnabled(!fixed); - JFormattedTextField tf = ((JSpinner.DefaultEditor)evolveSpinner.getEditor()).getTextField(); - tf.setDisabledTextColor(fixed? Color.GRAY.brighter(): Color.BLACK); - ignoreChanges = false; - } - - } - - /** - * Gets the match data as a delimited string with "columns" for frame number, match score, - * target x and target y. - */ - protected String getMatchDataString() { - // create string buffer to collect match score data - StringBuffer buf = new StringBuffer(); - buf.append(getTrack().getName()+"_"+wizard.pointDropdown.getSelectedItem()); //$NON-NLS-1$ - buf.append(XML.NEW_LINE); - buf.append(TrackerRes.getString("ThumbnailDialog.Label.FrameNumber")+TrackerIO.getDelimiter()+TrackerRes.getString("AutoTracker.Match.Score")); //$NON-NLS-1$ //$NON-NLS-2$ - String tar = "_"+TrackerRes.getString("AutoTracker.Label.Target").toLowerCase(); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append(TrackerIO.getDelimiter()+"x"+tar+TrackerIO.getDelimiter()+"y"+tar); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append(XML.NEW_LINE); - Map frameData = getFrameData(); - NumberFormat scoreFormat = NumberFormat.getInstance(); - scoreFormat.setMaximumFractionDigits(1); - scoreFormat.setMinimumFractionDigits(1); - DecimalFormat xFormat = (DecimalFormat)NumberFormat.getInstance(); - DecimalFormat yFormat = (DecimalFormat)NumberFormat.getInstance(); - DataTable table = null; - TableCellRenderer xRenderer = null, yRenderer = null; - TMenuBar menubar = TMenuBar.getMenuBar(trackerPanel); - TreeMap dataViews = menubar.getDataViews(); - for (int key: dataViews.keySet()) { - TableTrackView view = dataViews.get(key); - if (view.getTrack()==getTrack()) { - table = view.getDataTable(); - String pattern = table.getFormatPattern("x"); //$NON-NLS-1$ - if (pattern==null || pattern.equals("")) { //$NON-NLS-1$ - xRenderer = table.getDefaultRenderer(Double.class); - } - else { - xFormat.applyPattern(pattern); - } - pattern = table.getFormatPattern("y"); //$NON-NLS-1$ - if (pattern==null || pattern.equals("")) { //$NON-NLS-1$ - yRenderer = table.getDefaultRenderer(Double.class); - } - else { - yFormat.applyPattern(pattern); - } - break; - } - } - for (Integer i: frameData.keySet()) { - FrameData next = frameData.get(i); - if (next==null || next.getMatchWidthAndHeight()==null) continue; - double score = next.getMatchWidthAndHeight()[1]; - String value = Double.isInfinite(score)? String.valueOf(score): scoreFormat.format(score); - buf.append(next.getFrameNumber()+TrackerIO.getDelimiter()+value); - TPoint[] pts = next.getMatchPoints(); - if (pts!=null) { - TPoint p = pts[0]; // center of the match - p = getMatchTarget(p); // target position - Point2D pt = p.getWorldPosition(trackerPanel); - String xval = xFormat.format(pt.getX()); - String yval = yFormat.format(pt.getY()); - if (xRenderer!=null) { - Component c = xRenderer.getTableCellRendererComponent(table, pt.getX(), false, false, 0, 0); - if (c instanceof JLabel) { - xval = ((JLabel)c).getText().trim(); - } - } - if (yRenderer!=null) { - Component c = yRenderer.getTableCellRendererComponent(table, pt.getY(), false, false, 0, 0); - if (c instanceof JLabel) { - yval = ((JLabel)c).getText().trim(); - } - } - buf.append(TrackerIO.getDelimiter()+xval+TrackerIO.getDelimiter()+yval); - } - buf.append(XML.NEW_LINE); - } - return buf.toString(); - } - - /** - * Spinner with same preferred height as another component. - */ - class TallSpinner extends JSpinner { - Component comp; - TallSpinner(SpinnerModel model, Component heightComponent) { - super(model); - comp = heightComponent; - } - public Dimension getPreferredSize() { - Dimension dim = super.getPreferredSize(); - dim.height=comp.getPreferredSize().height; - return dim; - } - } - - /** - * Spinner model to continuously cycle through all choices - */ - static class SpinnerTumbleModel extends SpinnerListModel { - SpinnerTumbleModel(ArrayList values) { - super(values); - } - public Object getNextValue() { - Object value = super.getNextValue(); - if((value==null)&&(getList().size()>0)) { - value = getList().get(0); - } - return value; - } - public Object getPreviousValue() { - Object value = super.getPreviousValue(); - int n = getList().size(); - if((value==null)&&(n>0)) { - value = getList().get(n-1); - } - return value; - } - } -} + repaint(); + } + }; + if (SwingUtilities.isEventDispatchThread()) runner.run(); + else SwingUtilities.invokeLater(runner); + } + + /** + * Refreshes the drawing flags. + */ + protected void refreshDrawingFlags() { + // refresh drawing flags + if (mouseOverObj == templateToolbar || mouseOverObj == imageToolbar) { + // show mask and search + maskVisible = true; + targetVisible = searchVisible = false; + } else if (mouseOverObj == targetToolbar) { + // show target + targetVisible = true; + searchVisible = maskVisible = false; + } else if (mouseOverObj == searchToolbar) { + // show searchRect and mask + searchVisible = true; + targetVisible = maskVisible = false; + } else { + searchVisible = targetVisible = maskVisible = true; + } + } + + /** + * Refreshes the visible components of this wizard. + */ + protected void refreshGUI() { + TTrack track = getTrack(); + if (track != null && this.isVisible()) { + track.setMarkByDefault(false); + } + Runnable runner = new Runnable() { + public void run() { + if (trackerPanel == null) return; + refreshDropdowns(); + refreshStrings(); + refreshIcons(); + refreshButtons(); + refreshInfo(); + refreshDrawingFlags(); + pack(); + if (textPaneSize == null) { + refreshTextPaneSize(); + } + } + }; + if (SwingUtilities.isEventDispatchThread()) runner.run(); + else SwingUtilities.invokeLater(runner); + } + + /** + * Refreshes the dropdown lists. + */ + protected void refreshDropdowns() { + // refresh trackDropdown + Object toSelect = null; + trackDropdown.setName("refresh"); //$NON-NLS-1$ + trackDropdown.removeAllItems(); + TTrack track = getTrack(); + for (TTrack next : trackerPanel.getTracks()) { + if (!next.isAutoTrackable()) continue; + Icon icon = next.getFootprint().getIcon(21, 16); + Object[] item = new Object[]{icon, next.getName()}; + trackDropdown.addItem(item); + if (next == track) { + toSelect = item; + } + } + if (track == null) { + Object[] emptyItem = new Object[]{null, " "}; //$NON-NLS-1$ + trackDropdown.insertItemAt(emptyItem, 0); + toSelect = emptyItem; + } + // select desired item + if (toSelect != null) { + trackDropdown.setSelectedItem(toSelect); + } + trackDropdown.setName(null); + + // refresh pointDropdown + toSelect = null; + pointDropdown.setName("refresh"); //$NON-NLS-1$ + pointDropdown.removeAllItems(); + if (track != null) { + int target = track.getTargetIndex(); + toSelect = track.getTargetDescription(target); + for (int i = 0; i < track.getStepLength(); i++) { + String s = track.getTargetDescription(i); + if (track.isAutoTrackable(i) && s != null) { + pointDropdown.addItem(s); + } + } + } else { + pointDropdown.addItem(" "); //$NON-NLS-1$ + } + if (toSelect != null) { + pointDropdown.setSelectedItem(toSelect); + } + pointDropdown.setName(""); //$NON-NLS-1$ + + Runnable runner = new Runnable() { + public void run() { + startButton.requestFocusInWindow(); + } + }; + SwingUtilities.invokeLater(runner); + } + + /** + * Refreshes the template icons. + */ + protected void refreshIcons() { + Runnable runner = new Runnable() { + public void run() { + TTrack track = getTrack(); + if (core.getTemplateMatcher() == null || track == null) { + templateImageLabel.setIcon(null); + matchImageLabel.setIcon(null); + return; + } + int n = trackerPanel.getFrameNumber(); + FrameData frame = getFrame(n); + // set match icon + Icon icon = frame.getMatchIcon(); + matchImageLabel.setIcon(icon); + // set template icon + icon = frame.getTemplateIcon(); + if (icon == null) { + frame.getTemplateToMatch(); // loads new template and sets template icon + icon = frame.getTemplateIcon(); + } + templateImageLabel.setIcon(icon); + } + }; + if (SwingUtilities.isEventDispatchThread()) runner.run(); + else SwingUtilities.invokeLater(runner); + + } + + /** + * Replaces the template icons with new ones. + * + * @param keyFrame the key frame with the template matcher + */ + protected void replaceIcons(final KeyFrame keyFrame) { + Runnable runner = new Runnable() { + public void run() { + TTrack track = getTrack(); + if (trackerPanel.getVideo() == null || track == null) { + templateImageLabel.setIcon(null); + matchImageLabel.setIcon(null); + return; + } + keyFrame.setTemplateMatcher(null); // triggers creation of new matcher + TemplateMatcher matcher = core.getTemplateMatcher(); // creates new matcher + if (matcher != null) { + // initialize keyFrame and matcher + keyFrame.setTemplate(matcher); // also sets template icon + Icon icon = keyFrame.getTemplateIcon(); + keyFrame.setMatchIcon(icon); + matchImageLabel.setIcon(icon); + templateImageLabel.setIcon(icon); + pack(); + } + } + }; + if (SwingUtilities.isEventDispatchThread()) runner.run(); + else SwingUtilities.invokeLater(runner); + + } + + /** + * Refreshes the info displayed in the textpane. + */ + protected void refreshInfo() { + // red warning if no video + if (trackerPanel.getVideo() == null) { + textPane.setForeground(Color.red); + textPane.setText(TrackerRes.getString("AutoTracker.Info.NoVideo")); //$NON-NLS-1$ + return; + } + + // blue instructions if no track + textPane.setForeground(Color.blue); + TTrack track = getTrack(); + if (track == null) { + textPane.setText(TrackerRes.getString("AutoTracker.Info.SelectTrack")); //$NON-NLS-1$ + return; + } + + // blue instructions if no key frame + int n = trackerPanel.getFrameNumber(); + FrameData frame = getFrame(n); + KeyFrame keyFrame = frame.getKeyFrame(); + if (keyFrame == null) { + String s = TrackerRes.getString("AutoTracker.Info.GetStarted"); //$NON-NLS-1$ + s += " " + TrackerRes.getString("AutoTracker.Info.MouseOver.Instructions"); //$NON-NLS-1$ //$NON-NLS-2$ + textPane.setText(s); + if (mouseOverObj == null) return; + } + + // colored instructions if mouseOverObj not null + textPane.setForeground(new Color(140, 80, 80)); + if (mouseOverObj == templateToolbar || mouseOverObj == imageToolbar) { + textPane.setText(getTemplateInstructions()); + return; + } + if (mouseOverObj == targetToolbar) { + textPane.setText(getTargetInstructions()); + return; + } + if (mouseOverObj == searchToolbar) { + textPane.setText(getSearchInstructions()); + return; + } + + // actively searching: show frame status + textPane.setForeground(Color.blue); + int code = core.getStatusCode(n); + double[] peakWidthAndHeight = frame.getMatchWidthAndHeight(); + textPane.setText(getStatusInfo(code, n, peakWidthAndHeight)); + } + + /** + * Returns the template instructions. + * + * @return the instructions + */ + protected String getTemplateInstructions() { + StringBuffer buf = new StringBuffer(); + buf.append(TrackerRes.getString("AutoTracker.Info.Mask1")); //$NON-NLS-1$ + buf.append(" "); //$NON-NLS-1$ + buf.append(TrackerRes.getString("AutoTracker.Info.GetStarted")); //$NON-NLS-1$ + buf.append("\n\n"); //$NON-NLS-1$ + buf.append(TrackerRes.getString("AutoTracker.Info.Mask2")); //$NON-NLS-1$ + buf.append("\n\n"); //$NON-NLS-1$ + buf.append(TrackerRes.getString("AutoTracker.Info.Title.Settings")); //$NON-NLS-1$ + buf.append(": "); //$NON-NLS-1$ + buf.append(TrackerRes.getString("AutoTracker.Info.Mask.Instructions")); //$NON-NLS-1$ + buf.append("\n\n"); //$NON-NLS-1$ + buf.append(TrackerRes.getString("AutoTracker.Info.Title.Tip")); //$NON-NLS-1$ + buf.append(": "); //$NON-NLS-1$ + buf.append(TrackerRes.getString("AutoTracker.Info.Mask.Tip")); //$NON-NLS-1$ + return buf.toString(); + } + + /** + * Returns the search instructions. + * + * @return the instructions + */ + protected String getSearchInstructions() { + StringBuffer buf = new StringBuffer(); + if (options.getLineSpread() >= 0) + buf.append(TrackerRes.getString("AutoTracker.Info.SearchOnAxis")); //$NON-NLS-1$ + else + buf.append(TrackerRes.getString("AutoTracker.Info.Search")); //$NON-NLS-1$ + buf.append("\n\n"); //$NON-NLS-1$ + buf.append(TrackerRes.getString("AutoTracker.Info.Title.Settings")); //$NON-NLS-1$ + buf.append(": "); //$NON-NLS-1$ + buf.append(TrackerRes.getString("AutoTracker.Info.Search.Instructions")); //$NON-NLS-1$ + buf.append("\n\n"); //$NON-NLS-1$ + buf.append(TrackerRes.getString("AutoTracker.Info.Title.Tip")); //$NON-NLS-1$ + buf.append(": "); //$NON-NLS-1$ + buf.append(TrackerRes.getString("AutoTracker.Info.Search.Tip")); //$NON-NLS-1$ + return buf.toString(); + } + + /** + * Returns the target instructions. + * + * @return the instructions + */ + protected String getTargetInstructions() { + StringBuffer buf = new StringBuffer(); + buf.append(TrackerRes.getString("AutoTracker.Info.Target")); //$NON-NLS-1$ + buf.append("\n\n"); //$NON-NLS-1$ + buf.append(TrackerRes.getString("AutoTracker.Info.Title.Settings")); //$NON-NLS-1$ + buf.append(": "); //$NON-NLS-1$ + buf.append(TrackerRes.getString("AutoTracker.Info.Target.Instructions")); //$NON-NLS-1$ + return buf.toString(); + } + + /** + * Returns the status text for a given frame number and status code. + * + * @param code the status code (integer 0-9) + * @param n the frame number + * @param peakWidthAndHeight the match data + * @return the status text + */ + protected String getStatusInfo(int code, int n, double[] peakWidthAndHeight) { + StringBuffer buf = new StringBuffer(); + buf.append(TrackerRes.getString("AutoTracker.Info.Frame") + " " + n); //$NON-NLS-1$ //$NON-NLS-2$ + switch (code) { + //TODO: enum for codes, remove magic numbers + case 0: // keyframe + textPane.setForeground(Color.blue); + buf.append(" ("); //$NON-NLS-1$ + buf.append(TrackerRes.getString("AutoTracker.Info.KeyFrame").toLowerCase()); //$NON-NLS-1$ + buf.append("): "); //$NON-NLS-1$ + buf.append(TrackerRes.getString("AutoTracker.Info.KeyFrame.Instructions1")); //$NON-NLS-1$ + buf.append("\n\n"); //$NON-NLS-1$ + buf.append(TrackerRes.getString("AutoTracker.Info.KeyFrame.Instructions2")); //$NON-NLS-1$ + buf.append(" "); //$NON-NLS-1$ + buf.append(TrackerRes.getString("AutoTracker.Info.MouseOver.Instructions")); //$NON-NLS-1$ + break; + case 1: // good match was found and marked + textPane.setForeground(Color.green.darker()); + buf.append(" (" + TrackerRes.getString("AutoTracker.Info.MatchScore")); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append(" " + format.format(peakWidthAndHeight[1]) + "): "); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append(TrackerRes.getString("AutoTracker.Info.Match")); //$NON-NLS-1$ + break; + case 2: // possible match was found, not marked + textPane.setForeground(Color.red); + buf.append(" (" + TrackerRes.getString("AutoTracker.Info.MatchScore")); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append(" " + format.format(peakWidthAndHeight[1]) + "): "); //$NON-NLS-1$ //$NON-NLS-2$ + if (options.getLineSpread() >= 0) { + buf.append(TrackerRes.getString("AutoTracker.Info.PossibleOnAxis") + "\n"); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.Accept")); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.RetryOnAxis")); //$NON-NLS-1$ //$NON-NLS-2$ + } else { + buf.append(TrackerRes.getString("AutoTracker.Info.Possible") + "\n"); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.Accept")); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.Retry")); //$NON-NLS-1$ //$NON-NLS-2$ + } + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.Mark")); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.NewKeyFrame")); //$NON-NLS-1$ //$NON-NLS-2$ + if (control.canStep()) + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.Skip")); //$NON-NLS-1$ //$NON-NLS-2$ + break; + case 3: // no match was found + textPane.setForeground(Color.red); + buf.append(": "); //$NON-NLS-1$ + if (options.getLineSpread() >= 0) { + buf.append(TrackerRes.getString("AutoTracker.Info.NoMatchOnAxis") + "\n"); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.RetryOnAxis")); //$NON-NLS-1$ //$NON-NLS-2$ + } else { + buf.append(TrackerRes.getString("AutoTracker.Info.NoMatch") + "\n"); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.Retry")); //$NON-NLS-1$ //$NON-NLS-2$ + } + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.Mark")); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.NewKeyFrame")); //$NON-NLS-1$ //$NON-NLS-2$ + if (control.canStep()) + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.Skip")); //$NON-NLS-1$ //$NON-NLS-2$ + break; + case 4: // searchRect failed (no video image or x-axis inside) + textPane.setForeground(Color.red); + buf.append(": "); //$NON-NLS-1$ + if (options.getLineSpread() >= 0) { // 1D tracking + buf.append(TrackerRes.getString("AutoTracker.Info.OutsideXAxis") + "\n"); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.RetryOnAxis")); //$NON-NLS-1$ //$NON-NLS-2$ + } else { // 2D tracking + buf.append(TrackerRes.getString("AutoTracker.Info.Outside") + "\n"); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.Retry")); //$NON-NLS-1$ //$NON-NLS-2$ + } + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.Mark")); //$NON-NLS-1$ //$NON-NLS-2$ + if (control.canStep()) + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.Skip")); //$NON-NLS-1$ //$NON-NLS-2$ + break; + case 5: // target marked manually + textPane.setForeground(Color.blue); + buf.append(": "); //$NON-NLS-1$ + buf.append(TrackerRes.getString("AutoTracker.Info.MarkedByUser")); //$NON-NLS-1$ + break; + case 6: // match accepted + textPane.setForeground(Color.green.darker()); + buf.append(" (" + TrackerRes.getString("AutoTracker.Info.MatchScore")); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append(" " + format.format(peakWidthAndHeight[1]) + "): "); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append(TrackerRes.getString("AutoTracker.Info.Accepted")); //$NON-NLS-1$ + break; + case 7: // not searched or marked + textPane.setForeground(Color.blue); + buf.append(" ("); //$NON-NLS-1$ + buf.append(TrackerRes.getString("AutoTracker.Info.Unsearched")); //$NON-NLS-1$ + buf.append("): "); //$NON-NLS-1$ + buf.append(TrackerRes.getString("AutoTracker.Info.Instructions")); //$NON-NLS-1$ + buf.append(" "); //$NON-NLS-1$ + buf.append(TrackerRes.getString("AutoTracker.Info.GetStarted")); //$NON-NLS-1$ + buf.append("\n\n"); //$NON-NLS-1$ + buf.append(TrackerRes.getString("AutoTracker.Info.MouseOver.Instructions")); //$NON-NLS-1$ + break; + case 8: // possible match found, existing mark or calibration tool + textPane.setForeground(Color.blue); + buf.append(" (" + TrackerRes.getString("AutoTracker.Info.MatchScore")); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append(" " + format.format(peakWidthAndHeight[1]) + "): "); //$NON-NLS-1$ //$NON-NLS-2$ + if (options.getLineSpread() >= 0) { + buf.append(TrackerRes.getString("AutoTracker.Info.PossibleReplace") + "\n"); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.Replace")); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.Keep")); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.RetryOnAxis")); //$NON-NLS-1$ //$NON-NLS-2$ + } else { + buf.append(TrackerRes.getString("AutoTracker.Info.PossibleReplace") + "\n"); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.Replace")); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.Keep")); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.Retry")); //$NON-NLS-1$ //$NON-NLS-2$ + } + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.NewKeyFrame")); //$NON-NLS-1$ //$NON-NLS-2$ + break; + case 9: // no match found, existing mark or calibration tool + textPane.setForeground(Color.red); + buf.append(": "); //$NON-NLS-1$ + if (options.getLineSpread() >= 0) { + buf.append(TrackerRes.getString("AutoTracker.Info.NoMatchOnAxis") + "\n"); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.RetryOnAxis")); //$NON-NLS-1$ //$NON-NLS-2$ + } else { + buf.append(TrackerRes.getString("AutoTracker.Info.NoMatch") + "\n"); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.Retry")); //$NON-NLS-1$ //$NON-NLS-2$ + } + if (control.canStep()) + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.Keep")); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.NewKeyFrame")); //$NON-NLS-1$ //$NON-NLS-2$ + break; + case 10: // no match found, already marked + textPane.setForeground(Color.red); + buf.append(": "); //$NON-NLS-1$ + if (options.getLineSpread() >= 0) { + buf.append(TrackerRes.getString("AutoTracker.Info.NoMatchOnAxis") + "\n"); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.RetryOnAxis")); //$NON-NLS-1$ //$NON-NLS-2$ + } else { + buf.append(TrackerRes.getString("AutoTracker.Info.NoMatch") + "\n"); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.Retry")); //$NON-NLS-1$ //$NON-NLS-2$ + } + if (control.canStep()) + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.Keep")); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n" + TrackerRes.getString("AutoTracker.Info.NewKeyFrame")); //$NON-NLS-1$ //$NON-NLS-2$ + break; + } + return buf.toString(); + } + + /** + * Gets the match data as a delimited string with "columns" for frame number, match score, + * target x and target y. + */ + protected String getMatchDataString() { + // create string buffer to collect match score data + StringBuffer buf = new StringBuffer(); + buf.append(getTrack().getName() + "_" + wizard.pointDropdown.getSelectedItem()); //$NON-NLS-1$ + buf.append(XML.NEW_LINE); + buf.append(TrackerRes.getString("ThumbnailDialog.Label.FrameNumber") + TrackerIO.getDelimiter() + TrackerRes.getString("AutoTracker.Match.Score")); //$NON-NLS-1$ //$NON-NLS-2$ + String tar = "_" + TrackerRes.getString("AutoTracker.Label.Target").toLowerCase(); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append(TrackerIO.getDelimiter() + "x" + tar + TrackerIO.getDelimiter() + "y" + tar); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append(XML.NEW_LINE); + Map frameData = core.getFrameData(); + NumberFormat scoreFormat = NumberFormat.getInstance(); + scoreFormat.setMaximumFractionDigits(1); + scoreFormat.setMinimumFractionDigits(1); + DecimalFormat xFormat = (DecimalFormat) NumberFormat.getInstance(); + DecimalFormat yFormat = (DecimalFormat) NumberFormat.getInstance(); + DataTable table = null; + TableCellRenderer xRenderer = null, yRenderer = null; + TMenuBar menubar = TMenuBar.getMenuBar(trackerPanel); + TreeMap dataViews = menubar.getDataViews(); + for (int key : dataViews.keySet()) { + TableTrackView view = dataViews.get(key); + if (view.getTrack() == getTrack()) { + table = view.getDataTable(); + String pattern = table.getFormatPattern("x"); //$NON-NLS-1$ + if (pattern == null || pattern.equals("")) { //$NON-NLS-1$ + xRenderer = table.getDefaultRenderer(Double.class); + } else { + xFormat.applyPattern(pattern); + } + pattern = table.getFormatPattern("y"); //$NON-NLS-1$ + if (pattern == null || pattern.equals("")) { //$NON-NLS-1$ + yRenderer = table.getDefaultRenderer(Double.class); + } else { + yFormat.applyPattern(pattern); + } + break; + } + } + for (Integer i : frameData.keySet()) { + FrameData next = frameData.get(i); + if (next == null || next.getMatchWidthAndHeight() == null) continue; + double score = next.getMatchWidthAndHeight()[1]; + String value = Double.isInfinite(score) ? String.valueOf(score) : scoreFormat.format(score); + buf.append(next.getFrameNumber() + TrackerIO.getDelimiter() + value); + TPoint[] pts = next.getMatchPoints(); + if (pts != null) { + TPoint p = pts[0]; // center of the match + p = core.getMatchTarget(p); // target position + Point2D pt = p.getWorldPosition(trackerPanel); + String xval = xFormat.format(pt.getX()); + String yval = yFormat.format(pt.getY()); + if (xRenderer != null) { + Component c = xRenderer.getTableCellRendererComponent(table, pt.getX(), false, false, 0, 0); + if (c instanceof JLabel) { + xval = ((JLabel) c).getText().trim(); + } + } + if (yRenderer != null) { + Component c = yRenderer.getTableCellRendererComponent(table, pt.getY(), false, false, 0, 0); + if (c instanceof JLabel) { + yval = ((JLabel) c).getText().trim(); + } + } + buf.append(TrackerIO.getDelimiter() + xval + TrackerIO.getDelimiter() + yval); + } + buf.append(XML.NEW_LINE); + } + return buf.toString(); + } + + + protected void prepareForFixedSearch(boolean fixed) { + ignoreChanges = true; + if (fixed) { + prevEvolution = (Integer) evolveSpinner.getValue(); + prevLookAhead = lookAheadCheckbox.isSelected(); + prevOneD = oneDCheckbox.isSelected(); + isPrevValid = true; + evolveSpinner.setValue(0); + lookAheadCheckbox.setSelected(false); + oneDCheckbox.setSelected(false); + } else if (isPrevValid) { + isPrevValid = false; + evolveSpinner.setValue(prevEvolution); + lookAheadCheckbox.setSelected(prevLookAhead); + oneDCheckbox.setSelected(prevOneD); + } + evolveSpinner.setEnabled(!fixed); + evolveRateLabel.setEnabled(!fixed); + lookAheadCheckbox.setEnabled(!fixed); + oneDCheckbox.setEnabled(!fixed); + JFormattedTextField tf = ((JSpinner.DefaultEditor) evolveSpinner.getEditor()).getTextField(); + tf.setDisabledTextColor(fixed ? Color.GRAY.brighter() : Color.BLACK); + ignoreChanges = false; + } + + } + + //TODO: move to a separate class in the same package + protected class TrackerPanelControl implements AutoTrackerControl { + + @Override + public void step() { + trackerPanel.getPlayer().step(); + } + + @Override + public int getFrameNumber() { + return trackerPanel.getFrameNumber(); + } + + @Override + public int getFrameNumber(TPoint p) { + return p.getFrameNumber(trackerPanel); + } + + @Override + public BufferedImage getImage() { + return trackerPanel.getVideo().getImage(); + } + + @Override + public boolean canStep() { + VideoPlayer player = trackerPanel.getPlayer(); + int stepNumber = player.getStepNumber(); + if (!player.getVideoClip().reverse) { + int endStepNumber = player.getVideoClip().getStepCount() - 1; + return stepNumber < endStepNumber; + } else { + return stepNumber > 0; + } + } + + @Override + public boolean isReverse() { + return trackerPanel.getPlayer().getVideoClip().reverse; + } + + @Override + public int stepToFrame(int stepNumber) { + return trackerPanel.getPlayer().getVideoClip().stepToFrame(stepNumber); + } + + @Override + public int frameToStep(int frameNumber) { + return trackerPanel.getPlayer().getVideoClip().frameToStep(frameNumber); + } + + @Override + public int getFrameCount() { + return trackerPanel.getPlayer().getVideoClip().getFrameCount(); + } + + @Override + public ImageCoordSystem getCoords() { + return trackerPanel.getCoords(); + } + + @Override + public boolean isVideoValid() { + return trackerPanel.getVideo() != null; + } + + } + + class TrackerPanelFeedback extends AutoTrackerFeedback { + @Override + public void setSelectedTrack(TTrack track) { + trackerPanel.setSelectedTrack(track); + } + + @Override + public void onBeforeAddKeyframe(double x, double y) { + Target target = new Target(); + maskCenter.setLocation(x, y); + maskCorner.setLocation(x + options.getMaskWidth() / 2, y + options.getMaskHeight() / 2); + searchCenter.setLocation(x, y); + searchCorner.setLocation(x + defaultSearchSize[0], y + defaultSearchSize[1]); + } + + @Override + public void onAfterAddKeyframe(KeyFrame keyFrame) { + refreshSearchRect(); + refreshKeyFrame(keyFrame); + getWizard().setVisible(true); + //getWizard().refreshGUI(); + //search(false, false); // don't skip this frame and don't keep stepping + trackerPanel.repaint(); + + } + + @Override + public void onSetTrack() { + wizard.refreshGUI(); + } + + @Override + public void onTrackUnbind(TTrack track) { + if (track != null) { + track.removePropertyChangeListener("step", AutoTracker.this); //$NON-NLS-1$ + track.removePropertyChangeListener("name", AutoTracker.this); //$NON-NLS-1$ + track.removePropertyChangeListener("color", AutoTracker.this); //$NON-NLS-1$ + track.removePropertyChangeListener("footprint", AutoTracker.this); //$NON-NLS-1$ + } + } + + @Override + public void onTrackBind(TTrack track) { + if (track != null) { + track.addPropertyChangeListener("step", AutoTracker.this); //$NON-NLS-1$ + track.addPropertyChangeListener("name", AutoTracker.this); //$NON-NLS-1$ + track.addPropertyChangeListener("color", AutoTracker.this); //$NON-NLS-1$ + track.addPropertyChangeListener("footprint", AutoTracker.this); //$NON-NLS-1$ + track.setVisible(true); + } + + } + } + +} diff --git a/src/org/opensourcephysics/cabrillo/tracker/AutoTrackerControl.java b/src/org/opensourcephysics/cabrillo/tracker/AutoTrackerControl.java new file mode 100644 index 00000000..6ba86bbd --- /dev/null +++ b/src/org/opensourcephysics/cabrillo/tracker/AutoTrackerControl.java @@ -0,0 +1,69 @@ +package org.opensourcephysics.cabrillo.tracker; + +import org.opensourcephysics.media.core.ImageCoordSystem; +import org.opensourcephysics.media.core.TPoint; + +import java.awt.image.BufferedImage; + +public interface AutoTrackerControl { + + /** + * Steps one frame forward + */ + void step(); + + /** + * @return number of current frame + */ + int getFrameNumber(); + + /** + * @return number of current frame + * according to the point p + */ + int getFrameNumber(TPoint p); + + /** + * Gets the image of current frame + */ + BufferedImage getImage(); + + /** + * @return true, if can perform step(), false otherwise + */ + boolean canStep(); + + /** + * @return true if the video should be played in reverted direction + */ + boolean isReverse(); + + /** + * Converts step number to frame number. + * + * @param stepNumber the step number + * @return the frame number + */ + int stepToFrame(int stepNumber); + + /** + * Converts frame number to step number. A frame number that falls + * between two steps maps to the previous step. + * + * @param frameNumber the frame number + * @return the step number + */ + int frameToStep(int frameNumber); + + /** + * @return total quantity of frames + */ + int getFrameCount(); + + /** + * @return ImageCoordinateSystem + */ + ImageCoordSystem getCoords(); + + boolean isVideoValid(); +} diff --git a/src/org/opensourcephysics/cabrillo/tracker/AutoTrackerCore.java b/src/org/opensourcephysics/cabrillo/tracker/AutoTrackerCore.java new file mode 100644 index 00000000..b12146aa --- /dev/null +++ b/src/org/opensourcephysics/cabrillo/tracker/AutoTrackerCore.java @@ -0,0 +1,1044 @@ +package org.opensourcephysics.cabrillo.tracker; + +import org.opensourcephysics.media.core.*; + +import javax.swing.*; +import java.awt.*; +import java.awt.geom.AffineTransform; +import java.awt.geom.Ellipse2D; +import java.awt.image.BufferedImage; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.TreeMap; + +public class AutoTrackerCore { + private static int templateIconMagnification = 2; + + public AutoTrackerOptions options; + private AutoTrackerControl control; + private AutoTrackerFeedback feedback; + + public int trackID; + /* trackFrameData maps tracks to indexFrameData which maps point index + to frameData which maps frame number to individual FrameData objects */ + public Map>> trackFrameData + = new HashMap>>(); + + public AutoTrackerCore(AutoTrackerControl c, AutoTrackerFeedback f) { + control = c; + feedback = f; + options = new AutoTrackerOptions(); + } + + + public TTrack getTrack() { + return TTrack.getTrack(trackID); + } + + + /** + * Clears search points in frames downstream of the current frame number. + */ + protected void clearSearchPointsDownstream() { + int n = control.getFrameNumber(); + Map frameData = getFrameData(); + for (Integer i : frameData.keySet()) { + if (i <= n) continue; + FrameData frame = frameData.get(i); + if (frame.isKeyFrame()) // only to the next key frame + break; + frame.setSearchPoints(null); + } + + } + + /** + * Adds a key frame for a given track point and mask center position. + * + * @param p the track point + * @param x the mask center x + * @param y the mask center y + */ + protected void addKeyFrame(TPoint p, double x, double y) { + feedback.onBeforeAddKeyframe(x, y); + + int n = control.getFrameNumber(); + Shape mask = options.getMaskShape(); + Map frames = getFrameData(); + KeyFrame keyFrame = new KeyFrame( + p, + mask, + new TPoint(), // TODO: create options.targetOffset and use it! Currently target == (0,0) + getIndex(p), + new TPoint(x, y), + new TPoint(x + options.getMaskWidth() / 2, y + options.getMaskHeight() / 2) + ); + frames.put(n, keyFrame); + clearSearchPointsDownstream(); + + feedback.onAfterAddKeyframe(keyFrame); + } + + + /** + * Creates a TemplateMatcher based on the current image and mask. + * + * @return a newly created template matcher, or null if no video image exists + */ + protected TemplateMatcher createTemplateMatcher() { + int n = control.getFrameNumber(); + FrameData frame = getFrame(n); + KeyFrame keyFrame = frame.getKeyFrame(); + if (control.isVideoValid() && keyFrame != null) { + // create template image + Shape mask = keyFrame.getMask(); + BufferedImage source = control.getImage(); + Rectangle rect = mask.getBounds(); + BufferedImage templateImage = new BufferedImage( + rect.width, rect.height, BufferedImage.TYPE_INT_RGB); + templateImage.createGraphics().drawImage(source, -rect.x, -rect.y, null); + // translate mask to (0, 0) relative to template + AffineTransform transform = new AffineTransform(); + transform.setToTranslation(-rect.x, -rect.y); + Shape templateRegion = transform.createTransformedShape(mask); + return new TemplateMatcher(templateImage, templateRegion); + } + return null; + } + + /** + * Gets the TemplateMatcher. May return null. + * + * @return the template matcher + */ + public TemplateMatcher getTemplateMatcher() { + if (control == null) return null; + int n = control.getFrameNumber(); + KeyFrame keyFrame = getFrame(n).getKeyFrame(); + if (keyFrame == null) + return null; + if (keyFrame.getTemplateMatcher() == null) { + TemplateMatcher matcher = createTemplateMatcher(); // still null if no video + keyFrame.setTemplateMatcher(matcher); + } + return keyFrame.getTemplateMatcher(); + } + + /** + * Builds an evolved template based on data in the specified FrameData + * and the current video image. + * + * @param frame the FrameData frame + */ + protected void buildEvolvedTemplate(FrameData frame) { + TPoint[] matchPts = frame.getMatchPoints(); + if (matchPts == null) return; // can't build template without a match +// System.out.println("building evolved for "+frame.getFrameNumber()); + TemplateMatcher matcher = getTemplateMatcher(); + matcher.setTemplate(frame.getTemplate()); + matcher.setWorkingPixels(frame.getWorkingPixels()); + Rectangle rect = frame.getKeyFrame().getMask().getBounds(); + // get new image to rebuild template + int x = (int) Math.round(matchPts[2].getX()); + int y = (int) Math.round(matchPts[2].getY()); + BufferedImage source = control.getImage(); + BufferedImage matchImage = new BufferedImage( + rect.width, rect.height, BufferedImage.TYPE_INT_RGB); + matchImage.createGraphics().drawImage(source, -x, -y, null); + matcher.buildTemplate(matchImage, options.getEvolveAlpha(), 0); + matcher.setIndex(frame.getFrameNumber()); + } + + public void forceAccept(int frameNumber) { + FrameData frame = getFrame(frameNumber); + // build evolved template + TemplateMatcher matcher = getTemplateMatcher(); + matcher.setTemplate(frame.getTemplate()); + matcher.setWorkingPixels(frame.getWorkingPixels()); + buildEvolvedTemplate(frame); + // mark the target + TPoint p = getMatchTarget(frame.getMatchPoints()[0]); + TTrack track = getTrack(); + TPoint target = track.autoMarkAt(frameNumber, p.x, p.y); + frame.setAutoMarkPoint(target); + frame.decided = true; + } + + + /** + * Gets the available derivatives of the specified order. These are NOT time + * derivatives, but simply differences in pixel units: order 1 is deltaPosition, + * order 2 is change in deltaPosition, order 3 is change in order 2. Note the + * TPoint positions are in image units, not world units. + * + * @param positions an array of positions + * @param order may be 1 (v), 2 (a) or 3 (jerk) + * @return the derivative data + */ + public static double[][] getDerivatives(TPoint[] positions, int order, int lookback) { + // return null if insufficient data + if (positions.length < order + 1) return null; + + double[][] derivatives = new double[lookback][]; + if (order == 1) { // velocity + for (int i = 0; i < derivatives.length; i++) { + if (i >= positions.length - 1) { + derivatives[i] = null; + continue; + } + TPoint loc0 = positions[i + 1]; + TPoint loc1 = positions[i]; + if (loc0 == null || loc1 == null) { + derivatives[i] = null; + continue; + } + double x = loc1.getX() - loc0.getX(); + double y = loc1.getY() - loc0.getY(); + derivatives[i] = new double[]{x, y}; + } + return derivatives; + } else if (order == 2) { // acceleration + for (int i = 0; i < derivatives.length; i++) { + if (i >= positions.length - 2) { + derivatives[i] = null; + continue; + } + TPoint loc0 = positions[i + 2]; + TPoint loc1 = positions[i + 1]; + TPoint loc2 = positions[i]; + if (loc0 == null || loc1 == null || loc2 == null) { + derivatives[i] = null; + continue; + } + double x = loc2.getX() - 2 * loc1.getX() + loc0.getX(); + double y = loc2.getY() - 2 * loc1.getY() + loc0.getY(); + derivatives[i] = new double[]{x, y}; + } + return derivatives; + } else if (order == 3) { // jerk + for (int i = 0; i < derivatives.length; i++) { + if (i >= positions.length - 3) { + derivatives[i] = null; + continue; + } + TPoint loc0 = positions[i + 3]; + TPoint loc1 = positions[i + 2]; + TPoint loc2 = positions[i + 1]; + TPoint loc3 = positions[i]; + if (loc0 == null || loc1 == null || loc2 == null || loc3 == null) { + derivatives[i] = null; + continue; + } + double x = loc3.getX() - 3 * loc2.getX() + 3 * loc1.getX() - loc0.getX(); + double y = loc3.getY() - 3 * loc2.getY() + 3 * loc1.getY() - loc0.getY(); + derivatives[i] = new double[]{x, y}; + } + return derivatives; + } + return null; + } + + /** + * Returns the target for a specified match center point. + * + * @param center the center point + * @return the target + */ + public TPoint getMatchTarget(TPoint center) { + int n = control.getFrameNumber(); + double[] offset = getFrame(n).getTargetOffset(); + return new TPoint(center.x + offset[0], center.y + offset[1]); + } + + /** + * Returns the center point for a specified match target. + * + * @param target the target + * @return the center + */ + public TPoint getMatchCenter(TPoint target) { + int n = control.getFrameNumber(); + double[] offset = getFrame(n).getTargetOffset(); + return new TPoint(target.x - offset[0], target.y - offset[1]); + } + + /** + * Gets the predicted target point in a specified video frame, + * based on previously marked steps. + * + * @param frameNumber the frame number + * @return the predicted target + */ + public TPoint getPredictedMatchTarget(int frameNumber) { + boolean success = false; + int stepNumber = control.frameToStep(frameNumber); + TPoint predictedTarget = new TPoint(); + + // get position data at previous steps + TPoint[] prevPoints = new TPoint[options.getPredictionLookback()]; + TTrack track = getTrack(); + if (stepNumber > 0 && track != null) { + for (int j = 0; j < options.getPredictionLookback(); j++) { + if (stepNumber - j - 1 >= 0) { + int n = control.stepToFrame(stepNumber - j - 1); + FrameData frame = getFrame(n); + if (track.steps.isAutofill() && !frame.searched) + prevPoints[j] = null; + else { + prevPoints[j] = frame.getMarkedPoint(); + } + } + } + } + + // return null (no prediction) if there is no recent position data + if (prevPoints[0] == null) + return null; + + // set predictedTarget to prev position + predictedTarget.setLocation(prevPoints[0].getX(), prevPoints[0].getY()); + if (!options.isLookAhead() || prevPoints[1] == null) { + // no recent velocity or acceleration data available + success = true; + } + + if (!success) { + // get derivatives + double[][] veloc = getDerivatives(prevPoints, 1, options.getPredictionLookback()); + double[][] accel = getDerivatives(prevPoints, 2, options.getPredictionLookback()); + double[][] jerk = getDerivatives(prevPoints, 3, options.getPredictionLookback()); + + double vxmax = 0, vxmean = 0, vymax = 0, vymean = 0; + int n = 0; + for (int i = 0; i < veloc.length; i++) { + if (veloc[i] != null) { + n++; + vxmax = Math.max(vxmax, Math.abs(veloc[i][0])); + vxmean += veloc[i][0]; + vymax = Math.max(vymax, Math.abs(veloc[i][1])); + vymean += veloc[i][1]; + } + } + vxmean = Math.abs(vxmean / n); + vymean = Math.abs(vymean / n); + + double axmax = 0, axmean = 0, aymax = 0, aymean = 0; + n = 0; + for (int i = 0; i < accel.length; i++) { + if (accel[i] != null) { + n++; + axmax = Math.max(axmax, Math.abs(accel[i][0])); + axmean += accel[i][0]; + aymax = Math.max(aymax, Math.abs(accel[i][1])); + aymean += accel[i][1]; + } + } + axmean = Math.abs(axmean / n); + aymean = Math.abs(aymean / n); + + double jxmax = 0, jxmean = 0, jymax = 0, jymean = 0; + n = 0; + for (int i = 0; i < jerk.length; i++) { + if (jerk[i] != null) { + n++; + jxmax = Math.max(jxmax, Math.abs(jerk[i][0])); + jxmean += jerk[i][0]; + jymax = Math.max(jymax, Math.abs(jerk[i][1])); + jymean += jerk[i][1]; + } + } + jxmean = Math.abs(jxmean / n); + jymean = Math.abs(jymean / n); + + boolean xVelocValid = prevPoints[2] == null || Math.abs(accel[0][0]) < vxmean; + boolean yVelocValid = prevPoints[2] == null || Math.abs(accel[0][1]) < vymean; + boolean xAccelValid = prevPoints[2] != null && (prevPoints[3] == null || Math.abs(jerk[0][0]) < axmean); + boolean yAccelValid = prevPoints[2] != null && (prevPoints[3] == null || Math.abs(jerk[0][1]) < aymean); +// boolean velocValid = prevPoints[2]==null || (accel[0][0] frameData = getFrameData(); + for (Integer i : frameData.keySet()) { + FrameData frame = frameData.get(i); + if (frame.trackPoint == null) continue; + hasLater = hasLater || i > n; + hasThis = hasThis || i == n; + stepCount++; + } + } else { + hasThis = track.getStep(n) != null; + Step[] steps = track.getSteps(); + for (int i = 0; i < steps.length; i++) { + if (steps[i] != null) { + hasLater = hasLater || i > n; + stepCount++; + } + } + } + return new boolean[]{ + isAlwaysMarked, + isKeyFrame, + hasThis, + hasLater, + stepCount > 0 && !(stepCount == 1 && hasThis) + }; + } + + + public void deleteLater(int n) { + ArrayList toRemove = new ArrayList(); + // TODO: to core! + Map frameData = getFrameData(); + for (int i : frameData.keySet()) { + if (i <= n) continue; + FrameData frame = frameData.get(i); + frame.clear(); + toRemove.add(i); + } + for (int i : toRemove) { + frameData.remove(i); + } + TTrack track = getTrack(); + boolean isAlwaysMarked = track.steps.isAutofill() || track instanceof CoordAxes; + if (!isAlwaysMarked) { + Step[] steps = track.getSteps(); + for (int i = n + 1; i < steps.length; i++) { + steps[i] = null; + } + } + track.dataValid = false; + track.firePropertyChange("data", null, track); //$NON-NLS-1$ + + } + + public void deleteFrame(int n) { + Map frameData = getFrameData(); + FrameData frame = frameData.get(n); + if (!frame.isKeyFrame()) { + frameData.get(n).clear(); + frameData.remove(n); + } else { + frame.clear(); + } + + TTrack track = getTrack(); + boolean isAlwaysMarked = track.steps.isAutofill() || track instanceof CoordAxes; + if (!isAlwaysMarked && track.getSteps().length > n) + track.getSteps()[n] = null; + track.dataValid = false; + track.firePropertyChange("data", null, track); //$NON-NLS-1$ + } + + /** + * @return previous keyFrame, if any + */ + public KeyFrame deleteKeyFrame(int n) { + KeyFrame keyFrame = getFrame(n).getKeyFrame(); + Map frameData = getFrameData(); + int nextKey = -1; // later key frame, if any + + // if this is first key frame, look for later one + for (Integer i : frameData.keySet()) { + FrameData frame = frameData.get(i); + if (frame.isKeyFrame()) { // found first key frame + if (frame == keyFrame) { + // we are deleting the first key frame, so find the next, then confirm with user + for (int j : frameData.keySet()) { + if (j > i) { + FrameData next = frameData.get(j); + if (next.isKeyFrame()) { + nextKey = j; + break; + } + } + } + break; + } + } + } + + // replace keyframe with non-key frame + FrameData newFrame = new FrameData(keyFrame); + frameData.put(n, newFrame); + + // get earlier keyframe, if any + keyFrame = getFrame(n).getKeyFrame(); + if (keyFrame == null) { // no earlier key frame, so clear all matches up to nextKey + ArrayList toRemove = new ArrayList(); + for (int i : frameData.keySet()) { + if (nextKey > -1 && i >= nextKey) break; + FrameData frame = frameData.get(i); + frame.clear(); + toRemove.add(i); + } + for (int i : toRemove) { + frameData.remove(i); + } + } + + TTrack track = getTrack(); + if (track.getStep(n) == null) { + FrameData frame = getFrame(n); + if (frame != null) { + frame.setTemplateIcon(null); + frame.setSearchPoints(null); + } + for (int i : frameData.keySet()) { + if (i <= n) continue; + frame = frameData.get(i); + if (!frame.isKeyFrame() && track.getStep(i) == null) + frame.clear(); + } + } + return keyFrame; + } + + public ArrayList listKeyFrames() { + ArrayList keyFrames = new ArrayList(); + Map frameData = getFrameData(); + for (Integer i : frameData.keySet()) { + FrameData frame = frameData.get(i); + if (frame.isKeyFrame()) + keyFrames.add(i); + } + return keyFrames; + } + + boolean isDeletable(int n) { + FrameData frame = getFrame(n); + TTrack track = getTrack(); + KeyFrame keyFrame = frame.getKeyFrame(); + + boolean deleteButtonEnabled = track != null; + if (deleteButtonEnabled) { + boolean isAlwaysMarked = track.steps.isAutofill() || track instanceof CoordAxes; + if (isAlwaysMarked) { + boolean hasFrameData = false; + Map frameData = getFrameData(); + for (Integer i : frameData.keySet()) { + FrameData next = frameData.get(i); + if (next.trackPoint != null) { + hasFrameData = true; + break; + } + } + deleteButtonEnabled = hasFrameData || frame == keyFrame; + } else { + deleteButtonEnabled = frame == keyFrame || !track.isEmpty(); + } + } + return deleteButtonEnabled; + } + + + /** + * Determines the status code for a given frame. The status codes are: + * 0: a key frame + * 1: automarked with a good match + * 2: possible match, not marked + * 3: searched but no match found + * 4: unable to search--search area outside image or x-axis + * 5: manually marked by the user + * 6: match accepted by the user + * 7: never searched + * 8: possible match but previously marked + * 9: no match found but previously marked + * 10: calibration tool possible match + * + * @param n the frame number + * @return the status code + */ + protected int getStatusCode(int n) { + FrameData frame = getFrame(n); + if (frame.isKeyFrame()) return 0; // key frame + double[] widthAndHeight = frame.getMatchWidthAndHeight(); + if (frame.isMarked()) { // frame is marked (includes always-marked tracks like axes, calibration points, etc) + if (frame.isAutoMarked()) { // automarked + return options.isMatchGood(widthAndHeight[1]) ? + 1 : // automarked with good match + 6; // accepted by user + } + // not automarked + TTrack track = getTrack(); + boolean isCalibrationTool = track instanceof CoordAxes + || track instanceof OffsetOrigin + || track instanceof Calibration; + if (track instanceof TapeMeasure) { + TapeMeasure tape = (TapeMeasure) track; + isCalibrationTool = !tape.isReadOnly(); + } + if (frame.searched) { + if (isCalibrationTool) { + return options.isMatchPossible(widthAndHeight[1]) ? + 8 : // possible match for calibration + 9; // no match found, existing mark or calibration + } + if (frame.decided) + return 5; // manually marked by user + return options.isMatchPossible(widthAndHeight[1]) ? + 8 : // possible match, already marked + 9; // no match found, existing mark or calibration + } + return 7; // never searched + } + if (frame.searched) { // frame unmarked but searched + return options.isMatchPossible(widthAndHeight[1]) ? + 2 : // possible match found but not marked + 3; // no match found + } + // frame is unmarked and unsearched + if (widthAndHeight == null) return 7; // never searched + return 4; // tried but unable to search + } + + + // indexFrameData maps point index to frameData + protected Map> getIndexFrameData() { + TTrack track = getTrack(); + Map> indexFrameData = trackFrameData.get(track); + if (indexFrameData == null) { + indexFrameData = new TreeMap>(); + trackFrameData.put(track, indexFrameData); + } + return indexFrameData; + } + + // frameData maps frame number to individual FrameData objects + protected Map getFrameData(int index) { + Map frameData = getIndexFrameData().get(index); + if (frameData == null) { + frameData = new TreeMap(); + getIndexFrameData().put(index, frameData); + } + return frameData; + } + + protected Map getFrameData() { + TTrack track = getTrack(); + int index = track == null ? 0 : track.getTargetIndex(); + return getFrameData(index); + } + + protected FrameData getFrame(int frameNumber) { + FrameData frame = getFrameData().get(frameNumber); + if (frame == null) { + TTrack track = getTrack(); + int index = track == null ? 0 : track.getTargetIndex(); + frame = new FrameData(index, frameNumber); + getFrameData().put(frameNumber, frame); + } + return frame; + } + + public int getIndex(TPoint p) { + int n = control.getFrameNumber(p); + TTrack track = getTrack(); + Step step = track.getStep(n); // non-null if marked + if (step != null) { + for (int i = 0; i < step.points.length; i++) { + if (p.equals(step.points[i])) { + return i; + } + } + } + return -1; + } + + + /** + * A class to hold frame data. + */ + protected class FrameData { + + private int index, frameNum, templateAlpha, matcherHashCode; + private double[] targetOffset = {0, 0}; + private double[] matchWidthAndHeight; + private TPoint[] matchPoints; + private TPoint[] searchPoints; + TPoint trackPoint; + private double[] autoMarkLoc; + private BufferedImage template; + private Icon templateIcon; // shows template used for search + private Icon matchIcon; // only if match is found + boolean searched; // true when searched + boolean decided; // true when accepted, skipped or marked point is dragged; assumed false for calibration tools and axes + int[] workingPixels; + + FrameData(int pointIndex, int frameNumber) { + index = pointIndex; + frameNum = frameNumber; + } + + FrameData(KeyFrame keyFrame) { + index = keyFrame.getIndex(); + frameNum = keyFrame.getFrameNumber(); + matchWidthAndHeight = keyFrame.getMatchWidthAndHeight(); + matchPoints = keyFrame.getMatchPoints(); + searchPoints = keyFrame.getSearchPoints(false); + targetOffset = keyFrame.getTargetOffset(); + matchIcon = keyFrame.getMatchIcon(); + templateIcon = keyFrame.getTemplateIcon(); + autoMarkLoc = keyFrame.getAutoMarkLoc(); + trackPoint = keyFrame.trackPoint; + searched = keyFrame.searched; + } + + int getFrameNumber() { + return frameNum; + } + + + protected ImageIcon createMagnifiedIcon(BufferedImage source) { + return new ImageIcon( + BufferedImageUtils.createMagnifiedImage( + source, + templateIconMagnification, + BufferedImage.TYPE_INT_ARGB + ) + ); + } + + Icon getTemplateIcon() { + return templateIcon; + } + + void setTemplateImage(BufferedImage image) { + setTemplateIcon(createMagnifiedIcon(image)); + } + + void setTemplateIcon(Icon icon) { + templateIcon = icon; + } + + Icon getMatchIcon() { + return matchIcon; + } + + void setMatchImage(BufferedImage image) { + setMatchIcon(createMagnifiedIcon(image)); + } + + void setMatchIcon(Icon icon) { + matchIcon = icon; + } + + /** + * Sets the template to the current template of a TemplateMatcher. + * + * @param matcher the template matcher + */ + void setTemplate(TemplateMatcher matcher) { + template = matcher.getTemplate(); + templateAlpha = matcher.getAlphas()[0]; + workingPixels = matcher.getWorkingPixels(workingPixels); + matcherHashCode = matcher.hashCode(); + + // refresh icons + setMatchIcon(null); + setTemplateImage(template); + } + + /** + * Returns the template to match. Replaces the existing template if + * a new one exists. + */ + BufferedImage getTemplateToMatch() { + if (template == null || newTemplateExists()) { + // replace current template with new one + setTemplate(getTemplateMatcher()); + } + return template; + } + + /** + * Returns true if the evolved template is both different and appropriate. + */ + boolean newTemplateExists() { + if (isKeyFrame()) + return false; + TemplateMatcher matcher = getTemplateMatcher(); + if (matcher == null) + return false; + boolean different = matcher.getAlphas()[0] != templateAlpha + || matcher.hashCode() != matcherHashCode; + // TODO: reverse ? + boolean appropriate = matcher.getIndex() < frameNum; + return different && appropriate; + } + + /** + * Returns the previously matched template. + */ + BufferedImage getTemplate() { + return template; + } + + /** + * Returns the working pixels used to generate the current template. + */ + int[] getWorkingPixels() { + return workingPixels; + } + + TemplateMatcher getTemplateMatcher() { + KeyFrame frame = getKeyFrame(); + return frame == null ? null : frame.matcher; + } + + void setTargetOffset(double dx, double dy) { + targetOffset = new double[]{dx, dy}; + } + + double[] getTargetOffset() { + if (this.isKeyFrame()) + return targetOffset; + return getKeyFrame().getTargetOffset(); + } + + void setSearchPoints(TPoint[] points) { + searchPoints = points; + } + + TPoint[] getSearchPoints(boolean inherit) { + if (!inherit || searchPoints != null || this.isKeyFrame()) return searchPoints; + Map frames = getFrameData(index); + //TODO: reverse? + for (int i = frameNum; i >= 0; i--) { + FrameData frame = frames.get(i); + if (frame != null) { + if (frame.searchPoints != null || frame.isKeyFrame()) { + return frame.searchPoints; + } + } + } + return null; + } + + void setMatchPoints(TPoint[] points) { + matchPoints = points; + } + + TPoint[] getMatchPoints() { + return matchPoints; + } + + void setMatchWidthAndHeight(double[] matchData) { + matchWidthAndHeight = matchData; + } + + double[] getMatchWidthAndHeight() { + return matchWidthAndHeight; + } + + KeyFrame getKeyFrame() { + if (this.isKeyFrame()) return (KeyFrame) this; + Map frames = getFrameData(index); + if (!control.isReverse()) { + for (int i = frameNum; i >= 0; i--) { + FrameData frame = frames.get(i); + if (frame != null && frame.isKeyFrame()) + return (KeyFrame) frame; + } + } else { + int fin = control.getFrameCount(); + for (int i = frameNum; i < fin; i++) { + FrameData frame = frames.get(i); + if (frame != null && frame.isKeyFrame()) + return (KeyFrame) frame; + } + } + return null; + } + + int getIndex() { + return index; + } + + boolean isMarked() { + TTrack track = getTrack(); + return track != null && track.getStep(frameNum) != null; + } + + //TODO: to be splitted and overridden? + boolean isAutoMarked() { + if (autoMarkLoc == null || trackPoint == null) return false; + if (trackPoint instanceof CoordAxes.AnglePoint) { + ImageCoordSystem coords = control.getCoords(); + double theta = coords.getAngle(frameNum); + CoordAxes.AnglePoint p = (CoordAxes.AnglePoint) trackPoint; + return Math.abs(theta - p.getAngle()) < 0.001; + } + // return false if trackPoint has moved from marked location by more than 0.01 pixels + return Math.abs(autoMarkLoc[0] - trackPoint.getX()) < 0.01 + && Math.abs(autoMarkLoc[1] - trackPoint.getY()) < 0.01; + } + + void setAutoMarkPoint(TPoint point) { + trackPoint = point; + autoMarkLoc = point == null ? null : new double[]{point.getX(), point.getY()}; + } + + double[] getAutoMarkLoc() { + return autoMarkLoc; + } + + boolean isKeyFrame() { + return false; + } + + TPoint getMarkedPoint() { + if (!isMarked()) return null; + if (trackPoint != null) return trackPoint; + TTrack track = getTrack(); + return track.getMarkedPoint(frameNum, index); + } + + void clear() { + matchPoints = null; + matchWidthAndHeight = null; + matchIcon = null; + autoMarkLoc = null; + searched = false; + decided = false; + trackPoint = null; + workingPixels = null; + matcherHashCode = 0; + if (!isKeyFrame()) { + searchPoints = null; + templateIcon = null; + templateAlpha = 0; + template = null; + } + } + } + + /** + * A class to hold keyframe data. + */ + protected class KeyFrame extends FrameData { + + private Shape mask; + private TPoint target; + private TPoint[] maskPoints = {new TPoint(), new TPoint()}; + private TemplateMatcher matcher; + + KeyFrame(TPoint keyPt, Shape mask, TPoint target, int index, TPoint center, TPoint corner) { + super(index, control.getFrameNumber(keyPt)); + this.mask = mask; + this.target = target; + // TODO: calculate corner using mask and center + maskPoints[0].setLocation(center); + maskPoints[1].setLocation(corner); + } + + boolean isKeyFrame() { + return true; + } + + Shape getMask() { + return mask; + } + + TPoint getTarget() { + return target; + } + + TPoint[] getMaskPoints() { + return maskPoints; + } + + void setTemplateMatcher(TemplateMatcher matcher) { + this.matcher = matcher; + } + + boolean isFirstKeyFrame() { + Map frames = getFrameData(getIndex()); + for (int i = getFrameNumber() - 1; i >= 0; i--) { + FrameData frame = frames.get(i); + if (frame != null && frame.isKeyFrame()) + return false; + } + return true; + } + + } + + +} diff --git a/src/org/opensourcephysics/cabrillo/tracker/AutoTrackerFeedback.java b/src/org/opensourcephysics/cabrillo/tracker/AutoTrackerFeedback.java new file mode 100644 index 00000000..89c6b81e --- /dev/null +++ b/src/org/opensourcephysics/cabrillo/tracker/AutoTrackerFeedback.java @@ -0,0 +1,21 @@ +package org.opensourcephysics.cabrillo.tracker; + +import org.opensourcephysics.cabrillo.tracker.AutoTrackerCore.KeyFrame; +import org.opensourcephysics.cabrillo.tracker.AutoTrackerCore.FrameData; + + +/** + * @author Nikolai Avdeev aka NickKolok + */ +public class AutoTrackerFeedback { + public void setSelectedTrack(TTrack track){} + + public void onBeforeAddKeyframe(double x, double y){} + public void onAfterAddKeyframe(KeyFrame keyFrame){} + + public void onSetTrack(){} + + public void onTrackUnbind(TTrack track){} + public void onTrackBind(TTrack track){} + +} diff --git a/src/org/opensourcephysics/cabrillo/tracker/AutoTrackerOptions.java b/src/org/opensourcephysics/cabrillo/tracker/AutoTrackerOptions.java new file mode 100644 index 00000000..10e36ebc --- /dev/null +++ b/src/org/opensourcephysics/cabrillo/tracker/AutoTrackerOptions.java @@ -0,0 +1,169 @@ +package org.opensourcephysics.cabrillo.tracker; + +import java.awt.*; +import java.awt.geom.Ellipse2D; +import java.awt.geom.Rectangle2D; +import java.beans.PropertyChangeSupport; + +/** + * This class contains options, which are used for AutoTracker, + * and some basic logic to work with them. + * The main purpose of this class is to separate user-defined options of AutoTracker + * which refer (in most cases) to whole track or its big part + * from internal variables, which AutoTracker uses and varies widely. + * These options may be attached, for example, to a track, + * or saved/loaded to/from .trk file, + * if someone implements appropriate loaders ;-) + * + * @author Nikolai Avdeev aka NickKolok + */ +public class AutoTrackerOptions implements Cloneable { + private int goodMatch=4, possibleMatch=1, evolveAlpha=63, autoskipCount=2; + private int lineSpread = -1; // positive for 1D, negative for 2D tracking + private double maskWidth=16.0, maskHeight=16.0; + private boolean lookAhead=true; + private int maskShapeType = 0; // 0 for ellipse, 1 for rect + + private int predictionLookback = 4; + public static final int maxEvolveRate = 100; + + // TODO: make private? + public PropertyChangeSupport changes = new PropertyChangeSupport(this); + + public int getGoodMatch() { + return goodMatch; + } + + public void setGoodMatch(int goodMatch) { + int oldMatch = this.goodMatch; + this.goodMatch = goodMatch; + changes.firePropertyChange("goodMatch", oldMatch, goodMatch); + } + + public boolean isMatchGood(double match){ + return match > goodMatch; + } + public int getPossibleMatch() { + return possibleMatch; + } + + public void setPossibleMatch(int possibleMatch) { + int oldMatch = this.possibleMatch; + this.possibleMatch = possibleMatch; + changes.firePropertyChange("possibleMatch", oldMatch, possibleMatch); + } + + public boolean isMatchPossible(double match){ + return match > possibleMatch; + } + + public int getEvolveAlpha() { + return evolveAlpha; + } + + public void setEvolveAlpha(int evolveAlpha) { + int oldAlpha = this.evolveAlpha; + this.evolveAlpha = evolveAlpha; + changes.firePropertyChange("evolveAlpha", oldAlpha, evolveAlpha); + } + + protected void setEvolveAlphaFromRate(int evolveRate) { + double max = maxEvolveRate; + int alpha = (int)(1.0*evolveRate*255/max); + if (evolveRate>=max) alpha = 255; + if (evolveRate<=0) alpha = 0; + setEvolveAlpha(alpha); + } + + public int getAutoskipCount() { + return autoskipCount; + } + + public void setAutoskipCount(int autoskipCount) { + this.autoskipCount = autoskipCount; + } + + public boolean isLookAhead() { + return lookAhead; + } + + public void setLookAhead(boolean lookAhead) { + this.lookAhead = lookAhead; + } + + public double getMaskWidth() { + return maskWidth; + } + + public void setMaskWidth(double maskWidth) { + if(this.maskWidth == maskWidth){ + return; + } + double old = this.maskWidth; + this.maskWidth = maskWidth; + changes.firePropertyChange("maskWidth", old, this.maskWidth); + } + + public double getMaskHeight() { + return maskHeight; + } + + public void setMaskHeight(double maskHeight) { + if(this.maskHeight == maskHeight){ + return; + } + double old = this.maskHeight; + this.maskHeight = maskHeight; + changes.firePropertyChange("maskHeight", old, this.maskHeight); + } + + public int getLineSpread() { + return lineSpread; + } + + public void setLineSpread(int spread) { + if(this.lineSpread == spread){ + return; + } + int old = this.lineSpread; + this.lineSpread = spread; + changes.firePropertyChange("lineSpread", old, this.lineSpread); + } + + public int getPredictionLookback() { + return predictionLookback; + } + + public void setPredictionLookback(int predictionLookback) { + if(this.predictionLookback == predictionLookback){ + return; + } + this.predictionLookback = predictionLookback; + int old = this.predictionLookback; + changes.firePropertyChange("predictionLookback", old, predictionLookback); + } + + public int getMaskShapeType() { + return maskShapeType; + } + + public void setMaskShapeType(int maskShapeType) { + if(this.maskShapeType == maskShapeType){ + return; + } + this.maskShapeType = maskShapeType; + int old = this.maskShapeType; + changes.firePropertyChange("maskShapeType", old, maskShapeType); + } + + public Shape getMaskShape(){ + switch(maskShapeType){ + case 0: return new Ellipse2D.Double(0,0,maskWidth,maskHeight); + case 1: return new Rectangle2D.Double(0,0,maskWidth,maskHeight); + default: return null; + } + } + // TODO: fire messages for all properties + // TODO: cloning without cloning `changes` + // TODO: fire message only if the property has been changed indeed +} diff --git a/src/org/opensourcephysics/cabrillo/tracker/Calibration.java b/src/org/opensourcephysics/cabrillo/tracker/Calibration.java index f62fbf20..20aa70e4 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/Calibration.java +++ b/src/org/opensourcephysics/cabrillo/tracker/Calibration.java @@ -76,7 +76,7 @@ public class Calibration extends TTrack { // instance fields protected NumberField x1Field, y1Field; protected JLabel point1MissingLabel, point2MissingLabel; - protected TextLineLabel x1Label, y1Label; + protected TTrackTextLineLabel x1Label, y1Label; private Component[] fieldSeparators = new Component[3]; private Component axisSeparator; protected JComboBox axisDropdown; @@ -780,8 +780,8 @@ public void focusLost(FocusEvent e) { point2MissingLabel = new JLabel(); point1MissingLabel.setBorder(xLabel.getBorder()); point2MissingLabel.setBorder(yLabel.getBorder()); - x1Label = new TextLineLabel(); - y1Label = new TextLineLabel(); + x1Label = new TTrackTextLineLabel(); + y1Label = new TTrackTextLineLabel(); x1Label.setBorder(xLabel.getBorder()); y1Label.setBorder(yLabel.getBorder()); fieldSeparators[0] = Box.createRigidArea(new Dimension(4, 4)); diff --git a/src/org/opensourcephysics/cabrillo/tracker/CircleFitter.java b/src/org/opensourcephysics/cabrillo/tracker/CircleFitter.java index 2e5e7251..775ec6bf 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/CircleFitter.java +++ b/src/org/opensourcephysics/cabrillo/tracker/CircleFitter.java @@ -246,7 +246,6 @@ public void focusLost(FocusEvent e) { // originToCenter item originToCenterItem = new JMenuItem(); originToCenterItem.addActionListener(new ActionListener() { - @Override public void actionPerformed(ActionEvent e) { setCoordsOriginToCenter(); } @@ -255,7 +254,6 @@ public void actionPerformed(ActionEvent e) { // clearPoints item clearPointsItem = new JMenuItem(); clearPointsItem.addActionListener(new ActionListener() { - @Override public void actionPerformed(ActionEvent e) { XMLControl control = new XMLControlElement(CircleFitter.this); boolean changed = false; diff --git a/src/org/opensourcephysics/cabrillo/tracker/CircleFitterFootprint.java b/src/org/opensourcephysics/cabrillo/tracker/CircleFitterFootprint.java index 91ebbe0d..b14e833c 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/CircleFitterFootprint.java +++ b/src/org/opensourcephysics/cabrillo/tracker/CircleFitterFootprint.java @@ -184,7 +184,6 @@ public Rectangle getBounds(boolean highlighted) { * * @return the hit shapes */ - @Override public Shape[] getHitShapes() { return hitShapes.toArray(new Shape[hitShapes.size()]); } diff --git a/src/org/opensourcephysics/cabrillo/tracker/CoordAxesStep.java b/src/org/opensourcephysics/cabrillo/tracker/CoordAxesStep.java index 033401fb..94160f67 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/CoordAxesStep.java +++ b/src/org/opensourcephysics/cabrillo/tracker/CoordAxesStep.java @@ -33,6 +33,9 @@ import org.opensourcephysics.media.core.*; import org.opensourcephysics.tools.FontSizer; +import org.opensourcephysics.cabrillo.tracker.AutoTrackerCore.KeyFrame; +import org.opensourcephysics.cabrillo.tracker.AutoTrackerCore.FrameData; + /** * This is a Step for a CoordAxes. It is used for displaying the axes and for * setting the origin, angle and/or scale of an ImageCoordSystem. @@ -140,7 +143,7 @@ public Interactive findInteractive( if (hitShape != null && hitShape.intersects(hitRect)) { if (autoTracker!=null && autoTracker.getTrack()==track && track.getTargetIndex()==1) { int n = track.trackerPanel.getFrameNumber(); - AutoTracker.FrameData frame = autoTracker.getFrame(n); + FrameData frame = autoTracker.getFrame(n); if (frame==frame.getKeyFrame()) { return null; } @@ -153,7 +156,7 @@ public Interactive findInteractive( if (ia==origin) { if (autoTracker!=null && autoTracker.getTrack()==track && track.getTargetIndex()==0) { int n = track.trackerPanel.getFrameNumber(); - AutoTracker.FrameData frame = autoTracker.getFrame(n); + FrameData frame = autoTracker.getFrame(n); if (frame==frame.getKeyFrame()) { return null; } diff --git a/src/org/opensourcephysics/cabrillo/tracker/DataTrackClipControl.java b/src/org/opensourcephysics/cabrillo/tracker/DataTrackClipControl.java index 5705184e..fbafb24a 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/DataTrackClipControl.java +++ b/src/org/opensourcephysics/cabrillo/tracker/DataTrackClipControl.java @@ -265,7 +265,6 @@ public Dimension getMaximumSize() { return dim; } - @Override public void propertyChange(PropertyChangeEvent e) { refreshSpinners(); // if (e.getPropertyName().equals("dataclip")) { //$NON-NLS-1$ @@ -323,7 +322,6 @@ class MappingGraphic implements Interactive { GeneralPath path = new GeneralPath(); - @Override public void draw(DrawingPanel panel, Graphics g) { VideoPanel vidPanel = dataTrack.getVideoPanel(); if (vidPanel==null) return; @@ -519,11 +517,9 @@ public Shape[] getHitShapes() { public Mark getMark(Point[] points) { return new Mark() { - @Override public void draw(Graphics2D g, boolean highlighted) { } - @Override public Rectangle getBounds(boolean highlighted) { return null; } @@ -531,60 +527,47 @@ public Rectangle getBounds(boolean highlighted) { }; } - @Override public double getXMin() { return 0; } - @Override public double getXMax() { return 100; } - @Override public double getYMin() { return 0; } - @Override public double getYMax() { return 100; } - @Override public boolean isMeasured() { return true; } - @Override public Interactive findInteractive(DrawingPanel panel, int _xpix, int _ypix) { return null; } - @Override public void setEnabled(boolean enabled) {} - @Override public boolean isEnabled() { return true; } - @Override public void setXY(double x, double y) {} - @Override public void setX(double x) { } - @Override public void setY(double y) {} - @Override public double getX() { return 0; } - @Override public double getY() { return 0; } diff --git a/src/org/opensourcephysics/cabrillo/tracker/DataTrackTimeControl.java b/src/org/opensourcephysics/cabrillo/tracker/DataTrackTimeControl.java index afb87e11..7d0f4457 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/DataTrackTimeControl.java +++ b/src/org/opensourcephysics/cabrillo/tracker/DataTrackTimeControl.java @@ -106,7 +106,6 @@ public Dimension getMaximumSize() { return dim; } - @Override public void propertyChange(PropertyChangeEvent e) { refreshGUI(); } diff --git a/src/org/opensourcephysics/cabrillo/tracker/DynamicParticle.java b/src/org/opensourcephysics/cabrillo/tracker/DynamicParticle.java index 7b56853f..dc035f12 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/DynamicParticle.java +++ b/src/org/opensourcephysics/cabrillo/tracker/DynamicParticle.java @@ -208,7 +208,7 @@ public void reset() { models[i].lastValidFrame = firstFrameInClip; models[i].steps.setLength(firstFrameInClip+1); PositionStep step = (PositionStep)models[i].getStep(firstFrameInClip); - for (int j = 0; j < models[i].steps.array.length;j++) { + for (int j = 0; j < models[i].steps.length;j++) { if (j unwanted = new ArrayList(); - boolean skipXuggle = VideoIO.getEngine().equals(VideoIO.ENGINE_NONE); + boolean skipFFMPeg = VideoIO.getEngine().equals(VideoIO.ENGINE_NONE); for (String ext: VideoIO.VIDEO_EXTENSIONS) { - if (skipXuggle) - unwanted.add(VideoIO.getVideoType(VideoIO.ENGINE_XUGGLE, ext)); + if (skipFFMPeg) + unwanted.add(VideoIO.getVideoType(VideoIO.ENGINE_FFMPEG, ext)); } for (VideoType next: VideoIO.getVideoTypes()) { if (next.canRecord() && !unwanted.contains(next)) { @@ -585,7 +585,7 @@ public void setFontLevel(int level) { /** * Gets the smallest acceptable dimension >= a specified width and height. * This is a work-around to avoid image artifacts introduced by the converter - * in xuggle. + * in ffmpeg. * * @param w the desired width * @param h the desired height @@ -601,7 +601,7 @@ private Dimension getAcceptedDimension(int w, int h) { } /** - * Determines if a width and height are acceptable (for xuggle). + * Determines if a width and height are acceptable (for ffmpeg). * * @param w the width * @param h the height diff --git a/src/org/opensourcephysics/cabrillo/tracker/FileDropHandler.java b/src/org/opensourcephysics/cabrillo/tracker/FileDropHandler.java index c9e3af90..f2f62a27 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/FileDropHandler.java +++ b/src/org/opensourcephysics/cabrillo/tracker/FileDropHandler.java @@ -260,8 +260,7 @@ public void dragExit(DropTargetEvent dte) { dropList = null; } - @Override - public void drop(DropTargetDropEvent e) { + public void drop(DropTargetDropEvent e) { dropList = null; } diff --git a/src/org/opensourcephysics/cabrillo/tracker/MovingAverageDialog.java b/src/org/opensourcephysics/cabrillo/tracker/MovingAverageDialog.java new file mode 100644 index 00000000..6c4b1ccc --- /dev/null +++ b/src/org/opensourcephysics/cabrillo/tracker/MovingAverageDialog.java @@ -0,0 +1,71 @@ +package org.opensourcephysics.cabrillo.tracker; + +import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +/** + * A dialog to specify parameters of moving average filter + */ +public class MovingAverageDialog extends JDialog { + private JButton buttonOK, buttonCancel; + private TallSpinner stepSpinner; + private JLabel stepSpinnerLabel; + + public boolean decided = false; + public int result = 1; + private TTrack targetTrack; + private TrackerPanel trackerPanel; + + public MovingAverageDialog(TrackerPanel tp, TTrack track) { + super(JOptionPane.getFrameForComponent(tp), true); + + trackerPanel = tp; + targetTrack = track; + + + JPanel contentPane = new JPanel(); + + stepSpinnerLabel = new JLabel(TrackerRes.getString("MovingAverageDialog.PointsToAverage")); + //stepSpinnerLabel.setText("Points to average:"); + + + + buttonOK = new JButton(TrackerRes.getString("MovingAverageDialog.OK")); + buttonOK.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent event) { + result = (Integer) stepSpinner.getValue(); + setVisible(false); + if (targetTrack instanceof PointMass){ + applyToPointMass(); + } + } + }); + + buttonCancel = new JButton(TrackerRes.getString("MovingAverageDialog.Cancel")); + buttonCancel.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent event) { + setVisible(false); + } + }); + stepSpinner = new TallSpinner( + new SpinnerNumberModel(2, 1, 100, 1), + buttonOK + ); + + contentPane.add(stepSpinnerLabel); + contentPane.add(stepSpinner); + contentPane.add(buttonOK); + contentPane.add(buttonCancel); + add(contentPane, BorderLayout.SOUTH); + pack(); + } + + private void applyToPointMass(){ + PointMass pointMass = (PointMass) targetTrack; + pointMass.applyMovingAverage(result); + } +} diff --git a/src/org/opensourcephysics/cabrillo/tracker/ParticleDataTrack.java b/src/org/opensourcephysics/cabrillo/tracker/ParticleDataTrack.java index d43dd8f3..738297da 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/ParticleDataTrack.java +++ b/src/org/opensourcephysics/cabrillo/tracker/ParticleDataTrack.java @@ -1242,7 +1242,7 @@ protected void initializeFunctionPanel() { @Override protected void reset() { // clear existing steps - for (int i=0; i i - width && j >= 0; j--) { + if (validDataWorking[j]) { + pointsFound++; + xCumulated += xDataWorking[j]; + yCumulated += yDataWorking[j]; + } + } + if (pointsFound != 0) { + TPoint p = new TPoint(); + p.setWorldPosition(xCumulated / pointsFound, yCumulated / pointsFound, trackerPanel); + createStep(i, p.getX(), p.getY()); + } + } + repaint(); + } + + /** * Gets the rotational data. * @@ -2042,12 +2075,12 @@ else if ( (int) (100 * a.getXComponent()) != (int) (100 * x) || */ protected Object[] getRotationData() { // initialize data arrays once, for all panels - if (xData.length < steps.array.length) { - derivData[1] = xData = new double[steps.array.length + 5]; - derivData[2] = yData = new double[steps.array.length + 5]; - derivData[3] = validData = new boolean[steps.array.length + 5]; + if (xData.length < steps.length) { + derivData[1] = xData = new double[steps.length + 5]; + derivData[2] = yData = new double[steps.length + 5]; + derivData[3] = validData = new boolean[steps.length + 5]; } - for (int i = 0; i < steps.array.length; i++) + for (int i = 0; i < steps.length; i++) validData[i] = false; // set up derivative parameters VideoClip clip = trackerPanel.getPlayer().getVideoClip(); @@ -2103,12 +2136,12 @@ protected Object[] getRotationData() { */ protected Object[] getRotationData(int startFrame, int stepCount) { // initialize data arrays once, for all panels - if (xData.length < steps.array.length) { - derivData[1] = xData = new double[steps.array.length + 5]; - derivData[2] = yData = new double[steps.array.length + 5]; - derivData[3] = validData = new boolean[steps.array.length + 5]; + if (xData.length < steps.length) { + derivData[1] = xData = new double[steps.length + 5]; + derivData[2] = yData = new double[steps.length + 5]; + derivData[3] = validData = new boolean[steps.length + 5]; } - for (int i = 0; i < steps.array.length; i++) + for (int i = 0; i < steps.length; i++) validData[i] = false; // set up derivative parameters VideoClip clip = trackerPanel.getPlayer().getVideoClip(); @@ -2246,7 +2279,7 @@ else if (name.equals("stepsize")) { //$NON-NLS-1$ updateDerivatives(); support.firePropertyChange("data", null, null); //$NON-NLS-1$ int stepSize = trackerPanel.getPlayer().getVideoClip().getStepSize(); - if (skippedStepWarningOn + if (skippedStepWarningOn && !skippedStepWarningSuppress && stepSizeWhenFirstMarked>1 && stepSize!=stepSizeWhenFirstMarked) { JDialog warning = getStepSizeWarningDialog(); @@ -2381,6 +2414,8 @@ public void actionPerformed(ActionEvent e) { menu.add(clearStepsItem); menu.add(deleteTrackItem); } + // moving average + menu.add(movingAverageItem); return menu; } @@ -2731,7 +2766,16 @@ public void actionPerformed(ActionEvent e) { trackerPanel.repaint(); } }); - vFootprintMenu = new JMenu(); + movingAverageItem = new JMenuItem(TrackerRes.getString("PointMass.MenuItem.MovingAverage")); //$NON-NLS-1$ + movingAverageItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + MovingAverageDialog dlg = new MovingAverageDialog(trackerPanel, PointMass.this); + dlg.setVisible(true); + trackerPanel.repaint(); + } + }); + + vFootprintMenu = new JMenu(); aFootprintMenu = new JMenu(); velocityMenu = new JMenu(); accelerationMenu = new JMenu(); diff --git a/src/org/opensourcephysics/cabrillo/tracker/PrefsDialog.java b/src/org/opensourcephysics/cabrillo/tracker/PrefsDialog.java index d8abf245..db96cc5b 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/PrefsDialog.java +++ b/src/org/opensourcephysics/cabrillo/tracker/PrefsDialog.java @@ -35,8 +35,7 @@ import javax.swing.*; import javax.swing.border.*; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; +import javax.swing.event.*; import javax.swing.filechooser.FileFilter; import org.opensourcephysics.cabrillo.tracker.deploy.TrackerStarter; @@ -47,7 +46,7 @@ import org.opensourcephysics.display.ResizableIcon; import org.opensourcephysics.media.core.IntegerField; import org.opensourcephysics.media.core.VideoIO; -import org.opensourcephysics.tools.DiagnosticsForXuggle; +import org.opensourcephysics.tools.DiagnosticsForFFMPeg; import org.opensourcephysics.tools.JREFinder; import org.opensourcephysics.tools.FontSizer; import org.opensourcephysics.tools.ResourceLoader; @@ -82,7 +81,7 @@ public class PrefsDialog extends JDialog { protected JPanel configPanel, runtimePanel, videoPanel, generalPanel, trackPanel, displayPanel; protected TitledBorder checkPanelBorder, lfSubPanelBorder, langSubPanelBorder, hintsSubPanelBorder, unitsSubPanelBorder, versionSubPanelBorder, jreSubPanelBorder, memorySubPanelBorder, runSubPanelBorder, - videoTypeSubPanelBorder, xuggleSpeedSubPanelBorder, warningsSubPanelBorder, recentSubPanelBorder, + videoTypeSubPanelBorder, videoSpeedSubPanelBorder, warningsSubPanelBorder, recentSubPanelBorder, cacheSubPanelBorder, logLevelSubPanelBorder, upgradeSubPanelBorder, fontSubPanelBorder, resetToStep0SubPanelBorder, decimalSeparatorBorder, mouseWheelSubPanelBorder, calibrationStickSubPanelBorder, dataGapSubPanelBorder, trailLengthSubPanelBorder, pointmassFootprintSubPanelBorder; @@ -91,18 +90,20 @@ public class PrefsDialog extends JDialog { protected JLabel memoryLabel, recentSizeLabel, lookFeelLabel, cacheLabel, versionLabel, runLabel; protected JCheckBox defaultMemoryCheckbox, hintsCheckbox, vidWarningCheckbox, showGapsCheckbox, - xuggleErrorCheckbox, variableDurationCheckBox, resetToStep0Checkbox, autofillCheckbox; + ffmpegErrorCheckbox, variableDurationCheckBox, resetToStep0Checkbox, autofillCheckbox; protected int memorySize = Tracker.requestedMemorySize; protected JSpinner recentSizeSpinner, runSpinner; protected JComboBox lookFeelDropdown, languageDropdown, jreDropdown, trailLengthDropdown, checkForUpgradeDropdown, versionDropdown, logLevelDropdown, fontSizeDropdown, footprintDropdown; protected JRadioButton vm32Button, vm64Button; - protected JRadioButton xuggleButton, noEngineButton; + protected JRadioButton ffmpegButton, noEngineButton; protected JRadioButton radiansButton, degreesButton; protected JRadioButton scrubButton, zoomButton; protected JRadioButton markStickEndsButton, centerStickButton; - protected JRadioButton xuggleFastButton, xuggleSlowButton; + protected JRadioButton videoFastButton, videoSlowButton; protected JRadioButton defaultDecimalButton, periodDecimalButton, commaDecimalButton; + protected JLabel customDecimalSeparatorsLabel; + protected JTextField customDecimalSeparators; protected Tracker.Version[] trackerVersions; protected boolean relaunching, refreshing; @@ -110,9 +111,9 @@ public class PrefsDialog extends JDialog { protected Set prevEnabled = new TreeSet(); protected int prevMemory, prevRecentCount, prevUpgradeInterval, prevFontLevel, prevFontLevelPlus, prevTrailLengthIndex; protected String prevLookFeel, prevLocaleName, prevJRE, prevTrackerJar, prevEngine, prevDecimalSeparator, - prevPointmassFootprint; - protected boolean prevHints, prevRadians, prevFastXuggle, prevCenterCalibrationStick, prevWarnVariableDuration, - prevWarnNoVideoEngine, prevWarnXuggleError, prevWarnXuggleVersion, prevShowGaps, prevMarkAtCurrentFrame, + prevAdditionalDecimalSeparators, prevPointmassFootprint; + protected boolean prevHints, prevRadians, prevFastFFMPeg, prevCenterCalibrationStick, prevWarnVariableDuration, + prevWarnNoVideoEngine, prevWarnFFMPegError, prevWarnFFMPegVersion, prevShowGaps, prevMarkAtCurrentFrame, prevClearCacheOnExit, prevUse32BitVM, prevWarnCopyFailed, prevZoomMouseWheel, prevAutofill; protected File prevCache; protected String[] prevExecutables; @@ -162,7 +163,7 @@ public void setFontLevel(int level) { TitledBorder[] borders = new TitledBorder[] { checkPanelBorder, lfSubPanelBorder, langSubPanelBorder, hintsSubPanelBorder, unitsSubPanelBorder, versionSubPanelBorder, jreSubPanelBorder, memorySubPanelBorder, runSubPanelBorder, - videoTypeSubPanelBorder, xuggleSpeedSubPanelBorder, warningsSubPanelBorder, recentSubPanelBorder, + videoTypeSubPanelBorder, videoSpeedSubPanelBorder, warningsSubPanelBorder, recentSubPanelBorder, cacheSubPanelBorder, logLevelSubPanelBorder, upgradeSubPanelBorder, fontSubPanelBorder, resetToStep0SubPanelBorder, decimalSeparatorBorder, mouseWheelSubPanelBorder, calibrationStickSubPanelBorder, dataGapSubPanelBorder, trailLengthSubPanelBorder, pointmassFootprintSubPanelBorder}; @@ -484,11 +485,38 @@ public void actionPerformed(ActionEvent e) { ButtonGroup group = new ButtonGroup(); group.add(defaultDecimalButton); group.add(periodDecimalButton); - group.add(commaDecimalButton); - decimalSubPanel.add(defaultDecimalButton); - decimalSubPanel.add(periodDecimalButton); - decimalSubPanel.add(commaDecimalButton); - + group.add(commaDecimalButton); + + + customDecimalSeparatorsLabel = new JLabel(); + + // Custom decimal separators + customDecimalSeparators = new JTextField(Tracker.additionalDecimalSeparators,8); + + customDecimalSeparators.getDocument().addDocumentListener(new DocumentListener() { + public void changedUpdate(DocumentEvent e) { + act(); + } + public void removeUpdate(DocumentEvent e) { + act(); + } + public void insertUpdate(DocumentEvent e) { + act(); + } + + public void act() { + Tracker.additionalDecimalSeparators = customDecimalSeparators.getText(); + OSPRuntime.setAdditionalDecimalSeparators(Tracker.additionalDecimalSeparators); + } + }); + + + decimalSubPanel.add(defaultDecimalButton); + decimalSubPanel.add(periodDecimalButton); + decimalSubPanel.add(commaDecimalButton); + decimalSubPanel.add(customDecimalSeparatorsLabel); + decimalSubPanel.add(customDecimalSeparators); + // font level subpanel JPanel fontSubPanel = new JPanel(); horz.add(fontSubPanel); @@ -858,7 +886,7 @@ public void actionPerformed(ActionEvent e) { box = Box.createVerticalBox(); videoPanel.add(box, BorderLayout.CENTER); - boolean xuggleInstalled = DiagnosticsForXuggle.getXuggleJar()!=null; + boolean ffmpegInstalled = DiagnosticsForFFMPeg.hasFFMPegJars(); // videoType subpanel JPanel videoTypeSubPanel = new JPanel(); @@ -868,22 +896,22 @@ public void actionPerformed(ActionEvent e) { TrackerRes.getString("PrefsDialog.VideoPref.BorderTitle")); //$NON-NLS-1$ videoTypeSubPanel.setBorder(BorderFactory.createCompoundBorder(etched, videoTypeSubPanelBorder)); - xuggleButton = new JRadioButton(); - xuggleButton.setOpaque(false); - xuggleButton.setBorder(BorderFactory.createEmptyBorder(2, 0, 2, 10)); - xuggleButton.addItemListener(new ItemListener() { + ffmpegButton = new JRadioButton(); + ffmpegButton.setOpaque(false); + ffmpegButton.setBorder(BorderFactory.createEmptyBorder(2, 0, 2, 10)); + ffmpegButton.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { - xuggleFastButton.setEnabled(xuggleButton.isSelected()); - xuggleSlowButton.setEnabled(xuggleButton.isSelected()); - xuggleErrorCheckbox.setEnabled(xuggleButton.isSelected()); - if (!xuggleButton.isSelected()) return; - // Windows: if xuggle 3.4 and 64-bit, set preferred VM to 32-bit and inform user - if (OSPRuntime.isWindows() && DiagnosticsForXuggle.guessXuggleVersion()==3.4 && vm64Button.isSelected()) { + videoFastButton.setEnabled(ffmpegButton.isSelected()); + videoSlowButton.setEnabled(ffmpegButton.isSelected()); + ffmpegErrorCheckbox.setEnabled(ffmpegButton.isSelected()); + if (!ffmpegButton.isSelected()) return; + // Windows: if ffmpeg and 64-bit, set preferred VM to 32-bit and inform user + if (OSPRuntime.isWindows() && vm64Button.isSelected()) { boolean has32BitVM = JREFinder.getFinder().getDefaultJRE(32, Tracker.trackerHome, true)!=null; if (has32BitVM) { vm32Button.setSelected(true); JOptionPane.showMessageDialog(frame, - TrackerRes.getString("PrefsDialog.Dialog.SwitchToXuggle32.Message"), //$NON-NLS-1$ + TrackerRes.getString("PrefsDialog.Dialog.SwitchToFFMPeg32.Message"), //$NON-NLS-1$ TrackerRes.getString("PrefsDialog.Dialog.SwitchVM.Title"), //$NON-NLS-1$ JOptionPane.INFORMATION_MESSAGE); } @@ -892,7 +920,7 @@ public void itemStateChanged(ItemEvent e) { TrackerRes.getString("PrefsDialog.Button.ShowHelpNow"), //$NON-NLS-1$ TrackerRes.getString("Dialog.Button.OK")}; //$NON-NLS-1$ int response = JOptionPane.showOptionDialog(frame, - TrackerRes.getString("PrefsDialog.Dialog.No32bitVMXuggle.Message")+"\n"+ //$NON-NLS-1$ //$NON-NLS-2$ + TrackerRes.getString("PrefsDialog.Dialog.No32bitVMFFMPeg.Message")+"\n"+ //$NON-NLS-1$ //$NON-NLS-2$ TrackerRes.getString("PrefsDialog.Dialog.No32bitVM.Message"), //$NON-NLS-1$ TrackerRes.getString("PrefsDialog.Dialog.No32bitVM.Title"), //$NON-NLS-1$ JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]); @@ -904,7 +932,7 @@ public void itemStateChanged(ItemEvent e) { } } }); - xuggleButton.setEnabled(xuggleInstalled); + ffmpegButton.setEnabled(ffmpegInstalled); noEngineButton= new JRadioButton(); noEngineButton.setOpaque(false); @@ -916,31 +944,31 @@ public void itemStateChanged(ItemEvent e) { } }); - videoTypeSubPanel.add(xuggleButton); + videoTypeSubPanel.add(ffmpegButton); videoTypeSubPanel.add(noEngineButton); - // xuggle speed subpanel - JPanel xuggleSpeedSubPanel = new JPanel(); - box.add(xuggleSpeedSubPanel); - xuggleSpeedSubPanel.setBackground(color); - xuggleSpeedSubPanelBorder = BorderFactory.createTitledBorder( - TrackerRes.getString("PrefsDialog.Xuggle.Speed.BorderTitle")); //$NON-NLS-1$ - if (!xuggleInstalled) - xuggleSpeedSubPanelBorder.setTitleColor(GUIUtils.getDisabledTextColor()); - xuggleSpeedSubPanel.setBorder(BorderFactory.createCompoundBorder(etched, xuggleSpeedSubPanelBorder)); + // video speed subpanel + JPanel videoSpeedSubPanel = new JPanel(); + box.add(videoSpeedSubPanel); + videoSpeedSubPanel.setBackground(color); + videoSpeedSubPanelBorder = BorderFactory.createTitledBorder( + TrackerRes.getString("PrefsDialog.FFMPeg.Speed.BorderTitle")); //$NON-NLS-1$ + if (!ffmpegInstalled) + videoSpeedSubPanelBorder.setTitleColor(GUIUtils.getDisabledTextColor()); + videoSpeedSubPanel.setBorder(BorderFactory.createCompoundBorder(etched, videoSpeedSubPanelBorder)); buttonGroup = new ButtonGroup(); - xuggleFastButton = new JRadioButton(); - xuggleFastButton.setOpaque(false); - xuggleFastButton.setBorder(BorderFactory.createEmptyBorder(2, 0, 2, 10)); - xuggleFastButton.setSelected(xuggleInstalled && Tracker.isXuggleFast); - buttonGroup.add(xuggleFastButton); - xuggleSlowButton = new JRadioButton(); - xuggleSlowButton.setOpaque(false); - xuggleSlowButton.setBorder(BorderFactory.createEmptyBorder(2, 10, 2, 0)); - xuggleSlowButton.setSelected(xuggleInstalled && !Tracker.isXuggleFast); - buttonGroup.add(xuggleSlowButton); - xuggleSpeedSubPanel.add(xuggleFastButton); - xuggleSpeedSubPanel.add(xuggleSlowButton); + videoFastButton = new JRadioButton(); + videoFastButton.setOpaque(false); + videoFastButton.setBorder(BorderFactory.createEmptyBorder(2, 0, 2, 10)); + videoFastButton.setSelected(ffmpegInstalled && Tracker.isVideoFast); + buttonGroup.add(videoFastButton); + videoSlowButton = new JRadioButton(); + videoSlowButton.setOpaque(false); + videoSlowButton.setBorder(BorderFactory.createEmptyBorder(2, 10, 2, 0)); + videoSlowButton.setSelected(ffmpegInstalled && !Tracker.isVideoFast); + buttonGroup.add(videoSlowButton); + videoSpeedSubPanel.add(videoFastButton); + videoSpeedSubPanel.add(videoSlowButton); // warnings subpanel vidWarningCheckbox = new JCheckBox(); @@ -951,12 +979,12 @@ public void actionPerformed(ActionEvent e) { Tracker.warnNoVideoEngine = vidWarningCheckbox.isSelected(); } }); - xuggleErrorCheckbox = new JCheckBox(); - xuggleErrorCheckbox.setOpaque(false); - xuggleErrorCheckbox.setSelected(Tracker.warnXuggleError); - xuggleErrorCheckbox.addActionListener(new ActionListener() { + ffmpegErrorCheckbox = new JCheckBox(); + ffmpegErrorCheckbox.setOpaque(false); + ffmpegErrorCheckbox.setSelected(Tracker.warnFFMPegError); + ffmpegErrorCheckbox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - Tracker.warnXuggleError = xuggleErrorCheckbox.isSelected(); + Tracker.warnFFMPegError = ffmpegErrorCheckbox.isSelected(); } }); variableDurationCheckBox = new JCheckBox(); @@ -987,12 +1015,12 @@ public void actionPerformed(ActionEvent e) { warningsNorthPanel.add(vidWarningCheckbox); warningsNorthPanel.add(variableDurationCheckBox); - warningsCenterPanel.add(xuggleErrorCheckbox); + warningsCenterPanel.add(ffmpegErrorCheckbox); - // set selected states of engine buttons AFTER creating the xugglefast, xuggleslow and warnxuggle buttons - if (VideoIO.getEngine().equals(VideoIO.ENGINE_XUGGLE) - && VideoIO.getVideoType("Xuggle", null)!=null) { //$NON-NLS-1$ - xuggleButton.setSelected(true); + // set selected states of engine buttons AFTER creating the videofast, videoslow and warnffmpeg buttons + if (VideoIO.getEngine().equals(VideoIO.ENGINE_FFMPEG) + && VideoIO.getVideoType("FFMPeg", null)!=null) { //$NON-NLS-1$ + ffmpegButton.setSelected(true); } else noEngineButton.setSelected(true); @@ -1373,13 +1401,13 @@ public void stateChanged(ChangeEvent e) { // add engine buttons to buttongroups buttonGroup = new ButtonGroup(); - buttonGroup.add(xuggleButton); + buttonGroup.add(ffmpegButton); buttonGroup.add(noEngineButton); // enable/disable buttons - xuggleFastButton.setEnabled(xuggleButton.isSelected()); - xuggleSlowButton.setEnabled(xuggleButton.isSelected()); - xuggleErrorCheckbox.setEnabled(xuggleButton.isSelected()); + videoFastButton.setEnabled(ffmpegButton.isSelected()); + videoSlowButton.setEnabled(ffmpegButton.isSelected()); + ffmpegErrorCheckbox.setEnabled(ffmpegButton.isSelected()); if (OSPRuntime.isWindows()) { Runnable runner = new Runnable() { public void run() { @@ -1414,12 +1442,12 @@ private void savePrevious() { prevHints = Tracker.showHintsByDefault; prevRadians = Tracker.isRadians; prevDecimalSeparator = Tracker.preferredDecimalSeparator; - prevFastXuggle = Tracker.isXuggleFast; + prevAdditionalDecimalSeparators = Tracker.additionalDecimalSeparators; prevJRE = Tracker.preferredJRE; prevTrackerJar = Tracker.preferredTrackerJar; prevExecutables = Tracker.prelaunchExecutables; prevWarnNoVideoEngine = Tracker.warnNoVideoEngine; - prevWarnXuggleError = Tracker.warnXuggleError; + prevWarnFFMPegError = Tracker.warnFFMPegError; prevWarnVariableDuration = Tracker.warnVariableDuration; prevMarkAtCurrentFrame = Tracker.markAtCurrentFrame; prevCache = ResourceLoader.getOSPCache(); @@ -1446,12 +1474,12 @@ private void revert() { Tracker.showHintsByDefault = prevHints; Tracker.isRadians = prevRadians; Tracker.preferredDecimalSeparator = prevDecimalSeparator; - Tracker.isXuggleFast = prevFastXuggle; + Tracker.additionalDecimalSeparators = prevAdditionalDecimalSeparators; Tracker.preferredJRE = prevJRE; Tracker.preferredTrackerJar = prevTrackerJar; Tracker.prelaunchExecutables = prevExecutables; Tracker.warnNoVideoEngine = prevWarnNoVideoEngine; - Tracker.warnXuggleError = prevWarnXuggleError; + Tracker.warnFFMPegError = prevWarnFFMPegError; Tracker.warnVariableDuration = prevWarnVariableDuration; Tracker.scrubMouseWheel = prevZoomMouseWheel; Tracker.markAtCurrentFrame = prevMarkAtCurrentFrame; @@ -1501,7 +1529,7 @@ protected void refreshGUI() { memorySubPanelBorder.setTitle(TrackerRes.getString("PrefsDialog.Memory.BorderTitle")); //$NON-NLS-1$ runSubPanelBorder.setTitle(TrackerRes.getString("PrefsDialog.Run.BorderTitle")); //$NON-NLS-1$ videoTypeSubPanelBorder.setTitle(TrackerRes.getString("PrefsDialog.VideoPref.BorderTitle")); //$NON-NLS-1$ - xuggleSpeedSubPanelBorder.setTitle(TrackerRes.getString("PrefsDialog.Xuggle.Speed.BorderTitle")); //$NON-NLS-1$ + videoSpeedSubPanelBorder.setTitle(TrackerRes.getString("PrefsDialog.FFMPeg.Speed.BorderTitle")); //$NON-NLS-1$ warningsSubPanelBorder.setTitle(TrackerRes.getString("PrefsDialog.NoVideoWarning.BorderTitle")); //$NON-NLS-1$ recentSubPanelBorder.setTitle(TrackerRes.getString("PrefsDialog.RecentFiles.BorderTitle")); //$NON-NLS-1$ cacheSubPanelBorder.setTitle(TrackerRes.getString("PrefsDialog.CacheFiles.BorderTitle")); //$NON-NLS-1$ @@ -1515,9 +1543,13 @@ protected void refreshGUI() { defaultDecimalButton.setText(TrackerRes.getString("NumberFormatSetter.Button.DecimalSeparator.Default")); //$NON-NLS-1$ periodDecimalButton.setText(TrackerRes.getString("NumberFormatSetter.Button.DecimalSeparator.Period")); //$NON-NLS-1$ commaDecimalButton.setText(TrackerRes.getString("NumberFormatSetter.Button.DecimalSeparator.Comma")); //$NON-NLS-1$ - defaultDecimalButton.setSelected(OSPRuntime.getPreferredDecimalSeparator()==null); - periodDecimalButton.setSelected(".".equals(OSPRuntime.getPreferredDecimalSeparator())); //$NON-NLS-1$ - commaDecimalButton.setSelected(",".equals(OSPRuntime.getPreferredDecimalSeparator())); //$NON-NLS-1$ + customDecimalSeparatorsLabel.setText(TrackerRes.getString("NumberFormatSetter.Label.DecimalSeparator.CustomDecimalSeparators")); //$NON-NLS-1$ + + defaultDecimalButton.setSelected(OSPRuntime.getPreferredDecimalSeparator()==null); + periodDecimalButton.setSelected(".".equals(OSPRuntime.getPreferredDecimalSeparator())); //$NON-NLS-1$ + commaDecimalButton.setSelected(",".equals(OSPRuntime.getPreferredDecimalSeparator())); //$NON-NLS-1$ + customDecimalSeparators.setText(OSPRuntime.getAdditionalDecimalSeparators()); + cancelButton.setText(TrackerRes.getString("Dialog.Button.Cancel")); //$NON-NLS-1$ saveButton.setText(TrackerRes.getString("ConfigInspector.Button.SaveAsDefault")); //$NON-NLS-1$ okButton.setText(TrackerRes.getString("Dialog.Button.OK")); //$NON-NLS-1$ @@ -1541,7 +1573,7 @@ protected void refreshGUI() { showGapsCheckbox.setText(TrackerRes.getString("PrefsDialog.Checkbox.ShowGaps.Text")); //$NON-NLS-1$ vm32Button.setText(TrackerRes.getString("PrefsDialog.Checkbox.32BitVM")); //$NON-NLS-1$ vm64Button.setText(TrackerRes.getString("PrefsDialog.Checkbox.64BitVM")); //$NON-NLS-1$ - xuggleButton.setText(TrackerRes.getString("PrefsDialog.Button.Xuggle")); //$NON-NLS-1$ + ffmpegButton.setText(TrackerRes.getString("PrefsDialog.Button.FFMPeg")); //$NON-NLS-1$ noEngineButton.setText(TrackerRes.getString("PrefsDialog.Button.NoEngine")); //$NON-NLS-1$ radiansButton.setText(TrackerRes.getString("TMenuBar.MenuItem.Radians")); //$NON-NLS-1$ degreesButton.setText(TrackerRes.getString("TMenuBar.MenuItem.Degrees")); //$NON-NLS-1$ @@ -1549,11 +1581,9 @@ protected void refreshGUI() { markStickEndsButton.setText(TrackerRes.getString("PrefsDialog.Button.MarkEnds")); //$NON-NLS-1$ centerStickButton.setText(TrackerRes.getString("PrefsDialog.Button.Center")); //$NON-NLS-1$ scrubButton.setText(TrackerRes.getString("PrefsDialog.Button.Scrub")); //$NON-NLS-1$ - xuggleFastButton.setText(TrackerRes.getString("PrefsDialog.Xuggle.Fast")); //$NON-NLS-1$ - xuggleSlowButton.setText(TrackerRes.getString("PrefsDialog.Xuggle.Slow")); //$NON-NLS-1$ vidWarningCheckbox.setText(TrackerRes.getString("PrefsDialog.Checkbox.WarnIfNoEngine")); //$NON-NLS-1$ variableDurationCheckBox.setText(TrackerRes.getString("PrefsDialog.Checkbox.WarnVariableDuration")); //$NON-NLS-1$ - xuggleErrorCheckbox.setText(TrackerRes.getString("PrefsDialog.Checkbox.WarnIfXuggleError")); //$NON-NLS-1$ + ffmpegErrorCheckbox.setText(TrackerRes.getString("PrefsDialog.Checkbox.WarnIfFFMPegError")); //$NON-NLS-1$ setTabTitle(configPanel, TrackerRes.getString("PrefsDialog.Tab.Configuration.Title")); //$NON-NLS-1$ setTabTitle(runtimePanel, TrackerRes.getString("PrefsDialog.Tab.Runtime.Title")); //$NON-NLS-1$ setTabTitle(videoPanel, TrackerRes.getString("PrefsDialog.Tab.Video.Title")); //$NON-NLS-1$ @@ -1722,7 +1752,7 @@ else if (selected.equals(TrackerRes.getString("PrefsDialog.JREDropdown.LatestJRE toolbar.refresh(true); } Tracker.isRadians = radiansButton.isSelected(); - Tracker.isXuggleFast = xuggleFastButton.isSelected(); + Tracker.isVideoFast = videoFastButton.isSelected(); if (frame!=null) frame.setAnglesInRadians(Tracker.isRadians); // save the tracker and tracker_starter preferences String path = Tracker.savePreferences(); @@ -1777,7 +1807,7 @@ protected void updateDisplay() { // warnings vidWarningCheckbox.setSelected(Tracker.warnNoVideoEngine); variableDurationCheckBox.setSelected(Tracker.warnVariableDuration); - xuggleErrorCheckbox.setSelected(Tracker.warnXuggleError); + ffmpegErrorCheckbox.setSelected(Tracker.warnFFMPegError); // locale int index = 0; for (int i=0; i-1) { type = type.substring(0, n); - if (video.getClass().getSimpleName().contains(VideoIO.ENGINE_XUGGLE)) { - type += "(Xuggle)"; //$NON-NLS-1$ + if (video.getClass().getSimpleName().contains(VideoIO.ENGINE_FFMPEG)) { + type += "(FFMPeg)"; //$NON-NLS-1$ } } size = video.getImage().getWidth()+" x "+video.getImage().getHeight(); //$NON-NLS-1$ diff --git a/src/org/opensourcephysics/cabrillo/tracker/SpectralLineFilter.java b/src/org/opensourcephysics/cabrillo/tracker/SpectralLineFilter.java new file mode 100644 index 00000000..b70c7ed5 --- /dev/null +++ b/src/org/opensourcephysics/cabrillo/tracker/SpectralLineFilter.java @@ -0,0 +1,344 @@ +/* + * The org.opensourcephysics.media package defines the Open Source Physics + * media framework for working with video and other media. + * + * Copyright (c) 2004 Douglas Brown and Wolfgang Christian. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston MA 02111-1307 USA + * or view the license online at http://www.gnu.org/copyleft/gpl.html + * + * For additional information and documentation on Open Source Physics, + * please see . + */ +package org.opensourcephysics.cabrillo.tracker; + +import java.beans.*; +import java.util.*; + +import java.awt.*; +import java.awt.event.*; +import java.awt.geom.*; +import java.awt.image.*; +import javax.swing.*; + +import org.opensourcephysics.controls.*; +import org.opensourcephysics.media.core.*; + +/** + * This is a Filter that draws gas spectral lines on the source image. + * + * @author Douglas Brown + * @version 1.0 + */ +public class SpectralLineFilter extends Filter + implements PropertyChangeListener { + + // static fields + private static Map filters + = new HashMap(); + + // instance fields + private BufferedImage source, output; + private int[] pixels; + private int w, h; + private Graphics2D g; +// private TrackerPanel trackerPanel; + protected TPoint end1, end2; + protected Line2D line = new Line2D.Double(); + protected Color color = Color.white; + protected BasicStroke stroke = new BasicStroke(); + protected Collection wavelengths = new ArrayList(); + private Inspector inspector; + + /** + * Constructs a SpectralLineFilter object. + */ + public SpectralLineFilter() { + end1 = new TPoint(); + end2 = new TPoint(); + setWavelengths(1); // Hydrogen by default + hasInspector = true; + } + + /** + * Sets the tracker panel whose coords determine where the lines are drawn. + * + * @param panel a tracker panel + */ + public void setTrackerPanel(TrackerPanel panel) { + if (vidPanel != null) + vidPanel.removePropertyChangeListener("transform", this); //$NON-NLS-1$ + vidPanel = panel; + vidPanel.addPropertyChangeListener("transform", this); //$NON-NLS-1$ + getInspector().setVisible(true); + } + + /** + * Applies the filter to a source image and returns the result. + * + * @param sourceImage the source image + * @return the filtered image + */ + public BufferedImage getFilteredImage(BufferedImage sourceImage) { + if (!isEnabled()) return sourceImage; + if (sourceImage != source) initialize(sourceImage); + drawLines(); + return output; + } + + /** + * Implements abstract Filter method. + * + * @return the inspector + */ + public JDialog getInspector() { + if (inspector == null) inspector = new Inspector(); + if (inspector.isModal() && vidPanel != null) { + Frame f = JOptionPane.getFrameForComponent(vidPanel); + if (frame != f) { + frame = f; + inspector = new Inspector(); + } + } + return inspector; + } + + /** + * Responds to property change events. Implements PropertyChangeListener. + * + * @param e the property change event + */ + public void propertyChange(PropertyChangeEvent e) { + // fires "image" property change event whenever the coords change + support.firePropertyChange("image", null, null); //$NON-NLS-1$ + } + + /** + * Gets the spectral line filter for the specified tracker panel. + * + * @param panel a tracker panel + * @return the filter + */ + public static SpectralLineFilter getFilter(TrackerPanel panel) { + SpectralLineFilter filter = filters.get(panel); + if (filter == null) { + filter = new SpectralLineFilter(); + filter.setTrackerPanel(panel); + filters.put(panel, filter); + } + return filter; + } + +//_____________________________ private methods _______________________ + + /** + * Initializes the image. + * + * @param image a new source image + */ + private void initialize(BufferedImage image) { + source = image; // assumes image is TYPE_INT_RGB + w = source.getWidth(); + h = source.getHeight(); + output = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); + g = output.createGraphics(); + g.setPaint(color); + pixels = new int[w * h]; + } + + /** + * Draws the lines on the image. + */ + private void drawLines() { + if (vidPanel == null) return; + source.getRaster().getDataElements(0, 0, w, h, pixels); + output.getRaster().setDataElements(0, 0, w, h, pixels); + int n = vidPanel.getFrameNumber(); + AffineTransform transform = vidPanel.getCoords().getToImageTransform(n); + Iterator it = wavelengths.iterator(); + while (it.hasNext()) { + double lambda = it.next().doubleValue(); + end1.setXY(lambda, -200); + transform.transform(end1, end1); + end2.setXY(lambda, 200); + transform.transform(end2, end2); + line.setLine(end1, end2); + Shape shape = stroke.createStrokedShape(line); + g.fill(shape); + } + } + + /** + * Sets the spectral line wavelengths for a specified element. + * + * @param element the atomic number of the element + */ + private void setWavelengths(int element) { + wavelengths.clear(); + switch(element) { + case 1: // Hydrogen + wavelengths.add(new Double(410.2)); + wavelengths.add(new Double(434.1)); + wavelengths.add(new Double(486.1)); + wavelengths.add(new Double(656.3)); + break; + case 2: // Helium + wavelengths.add(new Double(447.1)); + wavelengths.add(new Double(471.3)); + wavelengths.add(new Double(492.2)); + wavelengths.add(new Double(501.6)); + wavelengths.add(new Double(587.6)); + wavelengths.add(new Double(667.8)); + wavelengths.add(new Double(706)); + break; + case 10: // Neon + wavelengths.add(new Double(540.1)); + wavelengths.add(new Double(585.2)); + wavelengths.add(new Double(588.2)); + wavelengths.add(new Double(603.0)); + wavelengths.add(new Double(607.4)); + wavelengths.add(new Double(616.4)); + wavelengths.add(new Double(621.7)); + wavelengths.add(new Double(626.6)); + wavelengths.add(new Double(633.4)); + wavelengths.add(new Double(638.3)); + wavelengths.add(new Double(640.2)); + wavelengths.add(new Double(650.6)); + wavelengths.add(new Double(659.9)); + wavelengths.add(new Double(692.9)); + wavelengths.add(new Double(703.2)); + break; + case 80: // Mercury + wavelengths.add(new Double(435.8)); + wavelengths.add(new Double(546.1)); + wavelengths.add(new Double(577.0)); + wavelengths.add(new Double(579.1)); + wavelengths.add(new Double(404.7)); + wavelengths.add(new Double(407.8)); + wavelengths.add(new Double(491.6)); + break; + } + support.firePropertyChange("image", null, null); //$NON-NLS-1$ + } + + /** + * Inner Inspector class to control filter parameters + */ + private class Inspector extends JDialog { + + /** + * Constructs the Inspector. + */ + public Inspector() { + super(frame, !(frame instanceof org.opensourcephysics.display.OSPFrame)); + setTitle(TrackerRes.getString("SpectralLineFilter.Title")); //$NON-NLS-1$ + setResizable(false); + setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE); + addComponentListener(new ComponentAdapter() { + public void componentShown(ComponentEvent e) { + SpectralLineFilter.this.setEnabled(true); + } + public void componentHidden(ComponentEvent e) { + SpectralLineFilter.this.setEnabled(false); + } + }); + createGUI(); + pack(); + } + + /** + * Creates the visible components. + */ + void createGUI() { + // create dropdown + final JComboBox dropdown = new JComboBox(); + Object item = new ChemicalElement(TrackerRes.getString("SpectralLineFilter.H"), 1); //$NON-NLS-1$ + dropdown.addItem(item); + item = new ChemicalElement(TrackerRes.getString("SpectralLineFilter.He"), 2); //$NON-NLS-1$ + dropdown.addItem(item); + item = new ChemicalElement(TrackerRes.getString("SpectralLineFilter.Ne"), 10); //$NON-NLS-1$ + dropdown.addItem(item); + item = new ChemicalElement(TrackerRes.getString("SpectralLineFilter.Hg"), 80); //$NON-NLS-1$ + dropdown.addItem(item); + dropdown.setSelectedIndex(0); + dropdown.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + ChemicalElement element = (ChemicalElement)dropdown.getSelectedItem(); + setWavelengths(element.z); + } + }); + // add components to content pane + JPanel buttonbar = new JPanel(new FlowLayout()); + setContentPane(buttonbar); + buttonbar.add(dropdown); + } + + class ChemicalElement { + String name; + int z; + ChemicalElement(String element, int atomicNumber) { + name = element; + z = atomicNumber; + } + public String toString() { + return name; + } + } + } + + /** + * Returns an XML.ObjectLoader to save and load filter data. + * + * @return the object loader + */ + public static XML.ObjectLoader getLoader() { + return new Loader(); + } + + /** + * A class to save and load filter data. + */ + static class Loader implements XML.ObjectLoader { + + /** + * Saves data to an XMLControl. + * + * @param control the control to save to + * @param obj the filter to save + */ + public void saveObject(XMLControl control, Object obj) {/** not yet implemented */} + + /** + * Creates a new filter. + * + * @param control the control + * @return the new filter + */ + public Object createObject(XMLControl control) { + return new SpectralLineFilter(); + } + + /** + * Loads a filter with data from an XMLControl. + * + * @param control the control + * @param obj the filter + * @return the loaded object + */ + public Object loadObject(XMLControl control, Object obj) { + return obj; + } + } +} diff --git a/src/org/opensourcephysics/cabrillo/tracker/StepArray.java b/src/org/opensourcephysics/cabrillo/tracker/StepArray.java new file mode 100644 index 00000000..812da271 --- /dev/null +++ b/src/org/opensourcephysics/cabrillo/tracker/StepArray.java @@ -0,0 +1,160 @@ +package org.opensourcephysics.cabrillo.tracker; + + +public class StepArray { + + // instance fields + protected int length = 5; + protected Step[] array = new Step[length]; + private boolean autofill = false; + protected int delta = 5; + + /** + * Constructs a default StepArray. + */ + public StepArray() {/** empty block */} + + /** + * Constructs an autofill StepArray and fills the array with clones + * of the specified step. + * + * @param step the step to fill the array with + */ + public StepArray(Step step) { + autofill = true; + step.n = 0; + array[0] = step; + fill(step); + } + + /** + * Constructs an autofill StepArray and fills the array with clones + * of the specified step. + * + * @param step the step to fill the array with + * @param increment the array sizing increment + */ + public StepArray(Step step, int increment) { + autofill = true; + step.n = 0; + array[0] = step; + length = increment; + delta = increment; + fill(step); + } + + /** + * Gets the step at the specified index. May return null. + * + * @param n the array index + * @return the step + */ + public Step getStep(int n) { + if (n >= length) { + int len = Math.max(n + delta, n - length + 1); + setLength(len); + } + return array[n]; + } + + /** + * Sets the step at the specified index. Accepts a null step argument + * for non-autofill arrays. + * + * @param n the array index + * @param step the new step + */ + public void setStep(int n, Step step) { + if (autofill && step == null) return; + if (n >= length) { + int len = Math.max(n + delta, n - length + 1); + setLength(len); + } + synchronized (array) { + array[n] = step; + } + } + + /** + * Determines if this step array contains the specified step. + * + * @param step the new step + * @return true if this contains the step + */ + public boolean contains(Step step) { + synchronized (array) { + for (int i = 0; i < array.length; i++) + if (array[i] == step) return true; + } + return false; + } + + /** + * Sets the length of the array. + * + * @param len the new length of the array + */ + public void setLength(int len) { + synchronized (array) { + Step[] newArray = new Step[len]; + System.arraycopy(array, 0, newArray, 0, Math.min(len, length)); + array = newArray; + if (len > length && autofill) { + Step step = array[length - 1]; + length = len; + fill(step); + } else length = len; + } + } + + /** + * Determines if this is empty. + * + * @return true if empty + */ + public boolean isEmpty() { + synchronized (array) { + for (int i = 0; i < array.length; i++) + if (array[i] != null) return false; + } + return true; + } + + /** + * Determines if the specified step is preceded by a lower index step. + * + * @param n the step index + * @return true if the step is preceded + */ + public boolean isPreceded(int n) { + synchronized (array) { + int k = Math.min(n, array.length); + for (int i = 0; i < k; i++) + if (array[i] != null) return true; + } + return false; + } + + public boolean isAutofill() { + return autofill; + } + + //__________________________ private methods _________________________ + + /** + * Replaces null elements of the the array with clones of the + * specified step. + * + * @param step the step to clone + */ + private void fill(Step step) { + for (int n = 0; n < length; n++) + if (array[n] == null) { + Step clone = (Step) step.clone(); + clone.n = n; + array[n] = clone; + } + } +} // end StepArray class + + diff --git a/src/org/opensourcephysics/cabrillo/tracker/TFrame.java b/src/org/opensourcephysics/cabrillo/tracker/TFrame.java index 389f4388..d1b188c6 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/TFrame.java +++ b/src/org/opensourcephysics/cabrillo/tracker/TFrame.java @@ -83,7 +83,7 @@ public class TFrame extends OSPFrame implements PropertyChangeListener { protected ArrayList loadedFiles = new ArrayList(); protected boolean anglesInRadians = Tracker.isRadians; protected File tabsetFile; // used when saving tabsets - protected int framesLoaded, prevFramesLoaded; // used when loading xuggle videos + protected int framesLoaded, prevFramesLoaded; // used when loading ffmpeg videos // protected JProgressBar monitor; protected PrefsDialog prefsDialog; protected ClipboardListener clipboardListener; @@ -767,7 +767,7 @@ public void propertyChange(PropertyChangeEvent e) { TrackerPanel trackerPanel = (TrackerPanel)e.getSource(); refreshTab(trackerPanel); } - else if (name.equals("progress")) { // from currently loading (xuggle) video //$NON-NLS-1$ + else if (name.equals("progress")) { // from currently loading (ffmpeg) video //$NON-NLS-1$ Object val = e.getNewValue(); String vidName = XML.forwardSlash((String)e.getOldValue()); try { @@ -787,7 +787,7 @@ else if (name.equals("progress")) { // from currently loading (xuggle) video // } } } - else if (name.equals("stalled")) { // from stalled xuggle video //$NON-NLS-1$ + else if (name.equals("stalled")) { // from stalled ffmpeg video //$NON-NLS-1$ String fileName = XML.getName((String)e.getNewValue()); String s = TrackerRes.getString("TFrame.Dialog.StalledVideo.Message0") //$NON-NLS-1$ +"\n"+TrackerRes.getString("TFrame.Dialog.StalledVideo.Message1") //$NON-NLS-1$ //$NON-NLS-2$ @@ -2147,7 +2147,7 @@ private void initialize(TrackerPanel trackerPanel) { } // add coordinate axes if none exists if (trackerPanel.getAxes() == null) { - Tracker.setProgress(81); + Tracker.setProgress(80); CoordAxes axes = new CoordAxes(); axes.setVisible(false); trackerPanel.addTrack(axes); diff --git a/src/org/opensourcephysics/cabrillo/tracker/TMenuBar.java b/src/org/opensourcephysics/cabrillo/tracker/TMenuBar.java index 94dbbedc..2513d8c1 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/TMenuBar.java +++ b/src/org/opensourcephysics/cabrillo/tracker/TMenuBar.java @@ -131,7 +131,7 @@ public class TMenuBar extends JMenuBar implements PropertyChangeListener { protected JMenuItem removeImageItem; protected JMenuItem editVideoItem; protected JMenuItem playAllStepsItem; - protected JMenuItem playXuggleSmoothlyItem; + protected JMenuItem playVideoSmoothlyItem; protected JMenuItem aboutVideoItem; protected JMenuItem checkDurationsItem; protected JMenuItem emptyVideoItem; @@ -988,19 +988,19 @@ public void itemStateChanged(ItemEvent e) { } } }); - // play xuggle smoothly item - playXuggleSmoothlyItem = new JCheckBoxMenuItem(TrackerRes.getString("XuggleVideo.MenuItem.SmoothPlay")); //$NON-NLS-1$ - playXuggleSmoothlyItem.addItemListener(new ItemListener() { + // play ffmpeg smoothly item + playVideoSmoothlyItem = new JCheckBoxMenuItem(TrackerRes.getString("Video.MenuItem.SmoothPlay")); //$NON-NLS-1$ + playVideoSmoothlyItem.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { Video video = trackerPanel.getVideo(); - String xuggleName = "org.opensourcephysics.media.xuggle.XuggleVideo"; //$NON-NLS-1$ - if (video==null || !(video.getClass().getName().equals(xuggleName))) return; + String ffmpegName = "org.opensourcephysics.media.ffmpeg.FFMPegVideo"; //$NON-NLS-1$ + if (video==null || !(video.getClass().getName().equals(ffmpegName))) return; if (e.getStateChange() == ItemEvent.SELECTED || e.getStateChange() == ItemEvent.DESELECTED) { - boolean smooth = playXuggleSmoothlyItem.isSelected(); + boolean smooth = playVideoSmoothlyItem.isSelected(); try { - Class xuggleClass = Class.forName(xuggleName); - Method method = xuggleClass.getMethod("setSmoothPlay", new Class[] {Boolean.class}); //$NON-NLS-1$ + Class ffmpegClass = Class.forName(ffmpegName); + Method method = ffmpegClass.getMethod("setSmoothPlay", new Class[] {Boolean.class}); //$NON-NLS-1$ method.invoke(video, new Object[] {smooth}); } catch (Exception ex) { } @@ -1444,7 +1444,7 @@ public void actionPerformed(ActionEvent e) { } diagMenu.addSeparator(); if (Tracker.aboutJavaAction != null) diagMenu.add(Tracker.aboutJavaAction); - if (Tracker.aboutXuggleAction != null) diagMenu.add(Tracker.aboutXuggleAction); + if (Tracker.aboutFFMPegAction != null) diagMenu.add(Tracker.aboutFFMPegAction); if (Tracker.aboutThreadsAction != null) diagMenu.add(Tracker.aboutThreadsAction); } // end diagnostics menu @@ -1567,18 +1567,18 @@ public synchronized void run() { VideoClip clip = trackerPanel.getPlayer().getVideoClip(); playAllStepsItem.setSelected(clip.isPlayAllSteps()); videoMenu.add(playAllStepsItem); - // smooth play item for xuggle videos - boolean isXuggleVideo = false; + // smooth play item for ffmpeg videos + boolean isFFMPegVideo = false; VideoType videoType = (VideoType)video.getProperty("video_type"); //$NON-NLS-1$ - if (videoType!=null && videoType.getClass().getSimpleName().contains(VideoIO.ENGINE_XUGGLE)) { - String xuggleName = "org.opensourcephysics.media.xuggle.XuggleVideo"; //$NON-NLS-1$ + if (videoType!=null && videoType.getClass().getSimpleName().contains(VideoIO.ENGINE_FFMPEG)) { + String ffmpegName = "org.opensourcephysics.media.ffmpeg.FFMPegVideo"; //$NON-NLS-1$ try { - Class xuggleClass = Class.forName(xuggleName); - Method method = xuggleClass.getMethod("isSmoothPlay", (Class[])null); //$NON-NLS-1$ + Class ffmpegClass = Class.forName(ffmpegName); + Method method = ffmpegClass.getMethod("isSmoothPlay", (Class[])null); //$NON-NLS-1$ Boolean smooth = (Boolean)method.invoke(video, (Object[])null); - playXuggleSmoothlyItem.setSelected(smooth); - videoMenu.add(playXuggleSmoothlyItem); - isXuggleVideo = true; + playVideoSmoothlyItem.setSelected(smooth); + videoMenu.add(playVideoSmoothlyItem); + isFFMPegVideo = true; } catch (Exception ex) { } } @@ -1637,7 +1637,7 @@ public synchronized void run() { videoMenu.add(filtersMenu); } videoMenu.addSeparator(); - if (isXuggleVideo) videoMenu.add(checkDurationsItem); + if (isFFMPegVideo) videoMenu.add(checkDurationsItem); videoMenu.add(aboutVideoItem); } // update save and close items diff --git a/src/org/opensourcephysics/cabrillo/tracker/TMouseHandler.java b/src/org/opensourcephysics/cabrillo/tracker/TMouseHandler.java index 66ee0cf4..a3c4be63 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/TMouseHandler.java +++ b/src/org/opensourcephysics/cabrillo/tracker/TMouseHandler.java @@ -33,6 +33,10 @@ import org.opensourcephysics.display.*; import org.opensourcephysics.media.core.*; +import org.opensourcephysics.cabrillo.tracker.AutoTrackerCore.KeyFrame; +import org.opensourcephysics.cabrillo.tracker.AutoTrackerCore.FrameData; + + /** * A general purpose mouse handler for a trackerPanel. * @@ -141,7 +145,7 @@ public void handleMouseAction(InteractivePanel panel, TrackControl.getControl(trackerPanel).popup.setVisible(false); marking = selectedTrack!=null && trackerPanel.getCursor()==selectedTrack.getMarkingCursor(e); - AutoTracker.KeyFrame keyFrame = getActiveKeyFrame(autoTracker); + KeyFrame keyFrame = getActiveKeyFrame(autoTracker); if (marking) { iad = null; boolean autotrackTrigger = isAutoTrackTrigger(e) && selectedTrack.isAutoTrackable(); @@ -198,13 +202,13 @@ else if (step.getPoints()[index]==null) { || selectedTrack instanceof PerspectiveTrack || selectedTrack instanceof Protractor) { if (autoTracker.getTrack()==selectedTrack) { - AutoTracker.FrameData frame = autoTracker.getFrame(frameNumber); + FrameData frame = autoTracker.getFrame(frameNumber); if (frame.getKeyFrame()==null) { target.setXY(trackerPanel.getMouseX(), trackerPanel.getMouseY()); } } } - autoTracker.addKeyFrame(target, + autoTracker.core.addKeyFrame(target, trackerPanel.getMouseX(), trackerPanel.getMouseY()); TTrackBar.getTrackbar(trackerPanel).refresh(); } @@ -422,12 +426,13 @@ protected static boolean isAutoTrackTrigger(InputEvent e) { return false; } - protected AutoTracker.KeyFrame getActiveKeyFrame(AutoTracker autoTracker) { + protected KeyFrame getActiveKeyFrame(AutoTracker autoTracker) { if (selectedTrack!=null && autoTracker.getWizard().isVisible() - && autoTracker.getTrack()==selectedTrack) { - AutoTracker.FrameData frame = autoTracker.getFrame(frameNumber); + && autoTracker.getTrack()==selectedTrack + ) { + FrameData frame = autoTracker.getFrame(frameNumber); if (frame!=null && frame.getKeyFrame()==frame) { - return (AutoTracker.KeyFrame)frame; + return (KeyFrame)frame; } } return null; diff --git a/src/org/opensourcephysics/cabrillo/tracker/TToolBar.java b/src/org/opensourcephysics/cabrillo/tracker/TToolBar.java index 318d811f..0a7b8cae 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/TToolBar.java +++ b/src/org/opensourcephysics/cabrillo/tracker/TToolBar.java @@ -142,8 +142,6 @@ public class TToolBar extends JToolBar implements PropertyChangeListener { stretchOnIcon = new ResizableIcon(Tracker.class.getResource("resources/images/stretch_on.gif")); //$NON-NLS-1$ xmassOffIcon = new ResizableIcon(Tracker.class.getResource("resources/images/x_mass.gif")); //$NON-NLS-1$ xmassOnIcon = new ResizableIcon(Tracker.class.getResource("resources/images/x_mass_on.gif")); //$NON-NLS-1$ - fontSmallerIcon = new ResizableIcon(Tracker.class.getResource("resources/images/font_smaller.gif")); //$NON-NLS-1$ - fontBiggerIcon = new ResizableIcon(Tracker.class.getResource("resources/images/font_bigger.gif")); //$NON-NLS-1$ fontSmallerDisabledIcon = new ResizableIcon(Tracker.class.getResource("resources/images/font_smaller_disabled.gif")); //$NON-NLS-1$ fontBiggerDisabledIcon = new ResizableIcon(Tracker.class.getResource("resources/images/font_bigger_disabled.gif")); //$NON-NLS-1$ autotrackerOffIcon = new ResizableIcon(Tracker.class.getResource("resources/images/autotrack_off.gif")); //$NON-NLS-1$ @@ -490,25 +488,25 @@ protected JPopupMenu getPopup() { } }; - // font buttons + // font buttons fontSmallerButton = new TButton(fontSmallerIcon); fontSmallerButton.setDisabledIcon(fontSmallerDisabledIcon); fontSmallerButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - int i = FontSizer.getLevel(); - FontSizer.setLevel(i-1); - fontSmallerButton.setEnabled(FontSizer.getLevel()>0); - fontBiggerButton.setEnabled(FontSizer.getLevel()0); + fontBiggerButton.setEnabled(FontSizer.getLevel()0); - fontBiggerButton.setEnabled(FontSizer.getLevel()0); + fontBiggerButton.setEnabled(FontSizer.getLevel()0); fontBiggerButton.setEnabled(FontSizer.getLevel() activeTracks = new HashMap(); protected static FontRenderContext frc @@ -88,7 +92,7 @@ public abstract class TTrack implements Interactive, protected Point2D point = new Point2D.Double(); protected ArrayList toolbarTrackComponents = new ArrayList(); protected ArrayList toolbarPointComponents = new ArrayList(); - protected TextLineLabel xLabel, yLabel, magLabel, angleLabel; + protected TTrackTextLineLabel xLabel, yLabel, magLabel, angleLabel; protected JLabel tLabel, stepLabel, tValueLabel, stepValueLabel; protected NumberField tField, xField, yField, magField; protected DecimalField angleField; @@ -119,11 +123,11 @@ public abstract class TTrack implements Interactive, protected Object[][] constantsLoadedFromXML; protected String[] dataDescriptions; protected boolean dataValid; // true if data is valid - protected boolean refreshDataLater; + protected boolean refreshDataLater; protected int[] preferredColumnOrder; protected ArrayList dataFrames = new ArrayList(); protected String partName, hint; - protected int stepSizeWhenFirstMarked; + protected int stepSizeWhenFirstMarked; protected TreeSet keyFrames = new TreeSet(); // for autotracking protected boolean autoTrackerMarking; @@ -139,6 +143,10 @@ public abstract class TTrack implements Interactive, protected String[] customNumberFormats; private int ID; // unique ID number + // For autoskipping while autotracking + public boolean skippedStepWarningSuppress = false; + + /** * Constructs a TTrack. */ @@ -285,17 +293,17 @@ public void actionPerformed(ActionEvent e) { }; // create labels and fields - xLabel = new TextLineLabel(); + xLabel = new TTrackTextLineLabel(); xField = new TrackNumberField(); - yLabel = new TextLineLabel(); + yLabel = new TTrackTextLineLabel(); yField = new TrackNumberField(); - magLabel = new TextLineLabel(); + magLabel = new TTrackTextLineLabel(); magField = new TrackNumberField(); magField.setMinValue(0); xField.addMouseListener(formatMouseListener); yField.addMouseListener(formatMouseListener); magField.addMouseListener(formatMouseListener); - angleLabel = new TextLineLabel(); + angleLabel = new TTrackTextLineLabel(); angleField = new TrackDecimalField(1); angleField.addMouseListener(formatAngleMouseListener); Border empty = BorderFactory.createEmptyBorder(0, 3, 0, 3); @@ -2726,7 +2734,7 @@ protected Cursor getMarkingCursor(InputEvent e) { AutoTracker autoTracker = trackerPanel.getAutoTracker(); if (autoTracker.getTrack()==null || autoTracker.getTrack()==this) { int n = trackerPanel.getFrameNumber(); - AutoTracker.KeyFrame key = autoTracker.getFrame(n).getKeyFrame(); + KeyFrame key = autoTracker.getFrame(n).getKeyFrame(); if (key==null) return TMouseHandler.autoTrackMarkCursor; } @@ -2847,158 +2855,6 @@ protected Dataset convertTextToDataColumn(String textColumnName) { } return null; } - -//______________________ inner StepArray class _______________________ - - protected class StepArray { - - // instance fields - protected int delta = 5; - protected Step[] array = new Step[delta]; - private boolean autofill = false; - - /** - * Constructs a default StepArray. - */ - public StepArray() {/** empty block */} - - /** - * Constructs an autofill StepArray and fills the array with clones - * of the specified step. - * - * @param step the step to fill the array with - */ - public StepArray(Step step) { - autofill = true; - step.n = 0; - array[0] = step; - fill(array, step); - } - - /** - * Constructs an autofill StepArray and fills the array with clones - * of the specified step. - * - * @param step the step to fill the array with - * @param increment the array sizing increment - */ - public StepArray(Step step, int increment) { - this(step); - delta = increment; - } - - /** - * Gets the step at the specified index. May return null. - * - * @param n the array index - * @return the step - */ - public Step getStep(int n) { - if (n >= array.length) { - int len = Math.max(n+delta, n-array.length+1); - setLength(len); - } - return array[n]; - } - - /** - * Sets the step at the specified index. Accepts a null step argument - * for non-autofill arrays. - * - * @param n the array index - * @param step the new step - */ - public void setStep(int n, Step step) { - if (autofill && step == null) return; - if (n >= array.length) { - int len = Math.max(n+delta, n-array.length+1); - setLength(len); - } - synchronized(array) { - array[n] = step; - } - } - - /** - * Determines if this step array contains the specified step. - * - * @param step the new step - * @return true if this contains the step - */ - public boolean contains(Step step) { - synchronized(array) { - for (int i = 0; i < array.length; i++) - if (array[i] == step) return true; - } - return false; - } - - /** - * Sets the length of the array. - * - * @param len the new length of the array - */ - public void setLength(int len) { - Step[] newArray = new Step[len]; - System.arraycopy(array, 0, newArray, 0, Math.min(len, array.length)); - if (len > array.length && autofill) { - Step step = array[array.length - 1]; - fill(newArray, step); - } - array = newArray; - } - - /** - * Determines if this is empty. - * - * @return true if empty - */ - public boolean isEmpty() { - synchronized(array) { - for (int i = 0; i < array.length; i++) - if (array[i]!=null) return false; - } - return true; - } - - /** - * Determines if the specified step is preceded by a lower index step. - * - * @param n the step index - * @return true if the step is preceded - */ - public boolean isPreceded(int n) { - synchronized(array) { - int k = Math.min(n, array.length); - for (int i = 0; i < k; i++) - if (array[i]!=null) return true; - } - return false; - } - - public boolean isAutofill() { - return autofill; - } - - //__________________________ private methods _________________________ - - /** - * Replaces null elements of the the array with clones of the - * specified step. - * - * @param array the Step[] to fill - * @param step the step to clone - */ - private void fill(Step[] array, Step step) { - for (int n = 0; n < array.length; n++) { - if (array[n] == null) { - Step clone = (Step)step.clone(); - clone.n = n; - array[n] = clone; - } - } - } - } // end StepArray class /** * A NumberField that resizes itself for display on a TTrackBar. @@ -3038,153 +2894,17 @@ public void setText(String t) { } - /** - * A DrawingPanel that mimics the look of a JLabel but can display subscripts. - */ - protected static class TextLineLabel extends DrawingPanel { - DrawableTextLine textLine; - JLabel label; - int w; - - /** - * Constructor - */ - TextLineLabel() { - textLine = new DrawableTextLine("", 0, -4.5); //$NON-NLS-1$ - textLine.setJustification(TextLine.CENTER); - addDrawable(textLine); - label = new JLabel(); - textLine.setFont(label.getFont()); - textLine.setColor(label.getForeground()); - } - - /** - * Constructor with initial text - */ - TextLineLabel(String text) { - this(); - setText(text); - } - - /** - * Sets the text to be displayed. Accepts subscript notation eg v_{x}. - * - * @param text the text - */ - void setText(String text) { - if (text==null) text = ""; //$NON-NLS-1$ - if (text.equals(textLine.getText())) return; - w =-1; - textLine.setText(text); - if (text.contains("_{")) { //$NON-NLS-1$ - text = TeXParser.removeSubscripting(text); - } - // use label to set initial preferred size - label.setText(text); - java.awt.Dimension dim = label.getPreferredSize(); - dim.width += 4; - setPreferredSize(dim); - } - - @Override - public Font getFont() { - if (textLine!=null) return textLine.getFont(); - return super.getFont(); - } - - @Override - public void setFont(Font font) { - if (textLine!=null) { - textLine.setFont(font); - w = -1; - } - else super.setFont(font); - } - - @Override - public void paintComponent(Graphics g) { - setPixelScale(); // sets the pixel scale and the world-to-pixel AffineTransform - ((Graphics2D) g).setRenderingHint( - RenderingHints.KEY_TEXT_ANTIALIASING, - RenderingHints.VALUE_TEXT_ANTIALIAS_ON); - textLine.draw(this, g); - if (w==-1) { - // check preferred size and adjust if needed - w = textLine.getWidth(g); - Dimension dim = getPreferredSize(); - if (dim.width>w+4 || dim.width defaultConfig; - static boolean xuggleCopied; + static boolean ffmpegCopied; static String[] mainArgs; static JFrame splash; - public static Icon trackerLogoIcon, ospLogoIcon; + static Icon trackerLogoIcon, ospLogoIcon; + static JLabel tipOfTheDayLabel; static JProgressBar progressBar; static String counterPath = "http://physlets.org/tracker/counter/counter.php?"; //$NON-NLS-1$ static String newerVersion; // new version available if non-null @@ -131,7 +132,7 @@ public class Tracker { static String trackerDownloadFolder = "/upgrade/"; //$NON-NLS-1$ static String author = "Douglas Brown"; //$NON-NLS-1$ static String osp = "Open Source Physics"; //$NON-NLS-1$ - static AbstractAction aboutXuggleAction, aboutThreadsAction; + static AbstractAction aboutFFMPegAction, aboutThreadsAction; static Action aboutTrackerAction, readmeAction; static Action aboutJavaAction, startLogAction, trackerPrefsAction; private static Tracker sharedTracker; @@ -168,12 +169,12 @@ public class Tracker { static boolean showHintsByDefault = true; static int recentFilesSize = 6; static int preferredMemorySize = -1; - static String lookAndFeel, preferredLocale, preferredDecimalSeparator; + static String lookAndFeel, preferredLocale, preferredDecimalSeparator, additionalDecimalSeparators; static String preferredJRE, preferredTrackerJar, preferredPointMassFootprint; static int checkForUpgradeInterval = 0; static int preferredFontLevel = 0, preferredFontLevelPlus = 0; - static boolean isRadians, isXuggleFast; - static boolean warnXuggleError=true, warnNoVideoEngine=true; + static boolean isRadians, isVideoFast; + static boolean warnFFMPegError=true, warnNoVideoEngine=true; static boolean warnVariableDuration=true; static String[] prelaunchExecutables = new String[0]; static Map autoloadMap = new TreeMap(); @@ -384,16 +385,16 @@ public void mouseDragged(MouseEvent e) { splash.setLocation(x-size.width/2, y-size.height/2); // set up videos extensions to extract from jars - // this list should agree with xuggle video types below + // this list should agree with ffmpeg video types below for (String ext: VideoIO.VIDEO_EXTENSIONS) { // {"mov", "avi", "mp4"} ResourceLoader.addExtractExtension(ext); } - // add Xuggle video types, if available, using reflection + // add FFMPeg video types, if available, using reflection try { - String xuggleIOName = "org.opensourcephysics.media.xuggle.XuggleIO"; //$NON-NLS-1$ - Class xuggleIOClass = Class.forName(xuggleIOName); - Method method = xuggleIOClass.getMethod("registerWithVideoIO", (Class[]) null); //$NON-NLS-1$ + String ffmpegIOName = "org.opensourcephysics.media.ffmpeg.FFMPegIO"; //$NON-NLS-1$ + Class ffmpegIOClass = Class.forName(ffmpegIOName); + Method method = ffmpegIOClass.getMethod("registerWithVideoIO", (Class[]) null); //$NON-NLS-1$ method.invoke(null, (Object[]) null); } catch (Exception ex) { } @@ -516,7 +517,7 @@ private void createFrame() { OSPRuntime.setLookAndFeel(true, lookAndFeel); frame = new TFrame(); Diagnostics.setDialogOwner(frame); - DiagnosticsForXuggle.setDialogOwner(frame); + DiagnosticsForFFMPeg.setDialogOwner(frame); // set up the Java VM exit mechanism when used as application if ( org.opensourcephysics.display.OSPRuntime.applet == null) { frame.addWindowListener(new WindowAdapter() { @@ -609,44 +610,47 @@ public void run() { * @return 0 if equal, 1 if ver1>ver2, -1 if ver1v1.length) { - // v1 is older version, v2 is newer - return -1; - } - if (v1.length>v2.length) { - // v2 is older version, v1 is newer - return 1; - } - // both arrays have the same length - for (int i=0; i Integer.parseInt(v2[i])) { - return 1; - } - } - return 0; + // truncate beta versions to length 3 + if (v1.length == 4) { + v1 = new String[]{v1[0], v1[1], v1[2]}; + } + if (v2.length == 4) { + v2 = new String[]{v2[0], v2[1], v2[2]}; + } + + if (v2.length > v1.length) { + // v1 is older version, v2 is newer + return -1; + } + if (v1.length > v2.length) { + // v2 is older version, v1 is newer + return 1; + } + // both arrays have the same length + for (int i = 0; i < v1.length; i++) { + if (Integer.parseInt(v1[i]) < Integer.parseInt(v2[i])) { + return -1; + } else if (Integer.parseInt(v1[i]) > Integer.parseInt(v2[i])) { + return 1; + } + } + return 0; + }catch(Exception e){ + return 0; + } } @@ -898,9 +902,9 @@ public void actionPerformed(ActionEvent e) { Diagnostics.aboutJava(); } }; - aboutXuggleAction = new AbstractAction(TrackerRes.getString("Tracker.Action.AboutXuggle"), null) { //$NON-NLS-1$ + aboutFFMPegAction = new AbstractAction(TrackerRes.getString("Tracker.Action.AboutFFMPeg"), null) { //$NON-NLS-1$ public void actionPerformed(ActionEvent e) { - DiagnosticsForXuggle.aboutXuggle("Tracker"); //$NON-NLS-1$ + DiagnosticsForFFMPeg.aboutFFMPeg("Tracker"); //$NON-NLS-1$ } }; aboutThreadsAction = new AbstractAction(TrackerRes.getString("Tracker.Action.AboutThreads"), null) { //$NON-NLS-1$ @@ -1220,18 +1224,12 @@ protected static void setCache(String cachePath) { } /** - * Checks and updates Xuggle resources. + * Checks and updates FFMPeg resources. * * @return true if any resources were updated */ protected static boolean updateResources() { boolean updated = false; - // copy xuggle files to Tracker home, if needed - try { - File trackerDir = new File(TrackerStarter.findTrackerHome(false)); - updated = DiagnosticsForXuggle.copyXuggleJarsTo(trackerDir); - } catch (Exception e) { - } return updated; } @@ -1467,13 +1465,13 @@ protected static String savePreferences() { } } - // save current trackerHome and xuggleHome in OSP preferences + // save current trackerHome and ffmpegHome in OSP preferences if (trackerHome!=null && new File(trackerHome, "tracker.jar").exists()) { //$NON-NLS-1$ OSPRuntime.setPreference("TRACKER_HOME", trackerHome); //$NON-NLS-1$ } - String xuggleHome = System.getenv("XUGGLE_HOME"); //$NON-NLS-1$ - if (xuggleHome!=null) { - OSPRuntime.setPreference("XUGGLE_HOME", xuggleHome); //$NON-NLS-1$ + String ffmpegHome = System.getenv("FFMPEG_HOME"); //$NON-NLS-1$ + if (ffmpegHome!=null) { + OSPRuntime.setPreference("FFMPEG_HOME", ffmpegHome); //$NON-NLS-1$ } OSPRuntime.savePreferences(); @@ -1532,7 +1530,7 @@ protected static boolean isZoomOutCursor(Cursor cursor) { * @param args array of tracker or video file names */ public static void main(String[] args) { -// String[] vars = {"TRACKER_HOME", "XUGGLE_HOME", "DYLD_LIBRARY_PATH"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ +// String[] vars = {"TRACKER_HOME", "FFMPEG_HOME", "DYLD_LIBRARY_PATH"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ // for (String next: vars) { // OSPLog.warning("Environment variable "+next+": "+System.getenv(next)); //$NON-NLS-1$ //$NON-NLS-2$ // } @@ -1587,7 +1585,7 @@ public static void main(String[] args) { } boolean needsJavaVM = javaPath!=null && !javaCommand.equals(javaPath); - // update Xuggle + // update FFMPeg boolean updated = updateResources(); // compare memory with requested size(s) @@ -1608,19 +1606,19 @@ public static void main(String[] args) { needsEnvironment = true; } else { - String xuggleDir = TrackerStarter.findXuggleHome(trackerDir, false); - String xuggleEnv = System.getenv("XUGGLE_HOME"); //$NON-NLS-1$ - if (xuggleDir!=null && !xuggleDir.equals(xuggleEnv)) { + String ffmpegDir = TrackerStarter.findFFMPegHome(trackerDir, false); + String ffmpegEnv = System.getenv("FFMPEG_HOME"); //$NON-NLS-1$ + if (ffmpegDir!=null && !ffmpegDir.equals(ffmpegEnv)) { needsEnvironment = true; } else { - if (xuggleDir!=null) { - String subdir = OSPRuntime.isWindows()? "bin": "lib"; //$NON-NLS-1$ //$NON-NLS-2$ - String xugglePath = xuggleDir+File.separator+subdir; + if (ffmpegDir!=null && !OSPRuntime.isLinux()) { + String subdir = OSPRuntime.isWindows()? "bin":"lib" ; //$NON-NLS-1$ //$NON-NLS-2$ + String ffmpegPath = ffmpegDir+File.separator+subdir; String pathName = OSPRuntime.isWindows()? "Path": //$NON-NLS-1$ OSPRuntime.isMac()? "DYLD_LIBRARY_PATH": "LD_LIBRARY_PATH"; //$NON-NLS-1$ //$NON-NLS-2$ String pathEnv = System.getenv(pathName); - if (pathEnv==null || !pathEnv.contains(xugglePath)) { + if (pathEnv==null || !pathEnv.contains(ffmpegPath)) { needsEnvironment = true; } } @@ -1711,13 +1709,13 @@ public void run() { // warnNoVideoEngine = false; // for PLATO if (warnNoVideoEngine && VideoIO.getDefaultEngine().equals(VideoIO.ENGINE_NONE)) { // warn user that there is no working video engine - boolean xuggleInstalled = DiagnosticsForXuggle.guessXuggleVersion()==3.4; + boolean ffmpegInstalled = DiagnosticsForFFMPeg.hasFFMPegJars(); ArrayList message = new ArrayList(); boolean showRelaunchDialog = false; // no engine installed - if (!xuggleInstalled) { + if (!ffmpegInstalled) { message.add(TrackerRes.getString("Tracker.Dialog.NoVideoEngine.Message1")); //$NON-NLS-1$ message.add(TrackerRes.getString("Tracker.Dialog.NoVideoEngine.Message2")); //$NON-NLS-1$ message.add(" "); //$NON-NLS-1$ @@ -2087,14 +2085,12 @@ public void saveObject(XMLControl control, Object obj) { control.setValue("trail_length", TToolBar.trailLengthNames[Tracker.trailLengthIndex]); //$NON-NLS-1$ if (Tracker.centerCalibrationStick) // false by default control.setValue("center_stick", Tracker.centerCalibrationStick); //$NON-NLS-1$ - if (Tracker.isXuggleFast) // false by default - control.setValue("xuggle_fast", Tracker.isXuggleFast); //$NON-NLS-1$ if (!Tracker.warnNoVideoEngine) // true by default control.setValue("warn_no_engine", Tracker.warnNoVideoEngine); //$NON-NLS-1$ if (!Tracker.warnVariableDuration) // true by default control.setValue("warn_variable_frame_duration", Tracker.warnVariableDuration); //$NON-NLS-1$ - if (!Tracker.warnXuggleError) // true by default - control.setValue("warn_xuggle_error", Tracker.warnXuggleError); //$NON-NLS-1$ + if (!Tracker.warnFFMPegError) // true by default + control.setValue("warn_ffmpeg_error", Tracker.warnFFMPegError); //$NON-NLS-1$ // always save preferred tracker.jar String jar = Tracker.preferredTrackerJar==null? "tracker.jar": Tracker.preferredTrackerJar; //$NON-NLS-1$ @@ -2113,6 +2109,8 @@ public void saveObject(XMLControl control, Object obj) { control.setValue("locale", Tracker.preferredLocale); //$NON-NLS-1$ if (Tracker.preferredDecimalSeparator!=null) control.setValue("decimal_separator", Tracker.preferredDecimalSeparator); //$NON-NLS-1$ + if (Tracker.additionalDecimalSeparators!=null) + control.setValue("additional_decimal_separators", Tracker.additionalDecimalSeparators); //$NON-NLS-1$ if (Tracker.preferredFontLevel>0) { control.setValue("font_size", Tracker.preferredFontLevel); //$NON-NLS-1$ } @@ -2203,7 +2201,7 @@ public Object loadObject(XMLControl control, Object obj) { Tracker.enableAutofill = control.getBoolean("enable_autofill"); //$NON-NLS-1$ Tracker.showGaps = control.getBoolean("show_gaps"); //$NON-NLS-1$ Tracker.centerCalibrationStick = control.getBoolean("center_stick"); //$NON-NLS-1$ - Tracker.isXuggleFast = control.getBoolean("xuggle_fast"); //$NON-NLS-1$ + Tracker.isVideoFast = control.getBoolean("ffmpeg_fast"); //$NON-NLS-1$ if (control.getPropertyNames().contains("trail_length")) { //$NON-NLS-1$ String name = control.getString("trail_length"); //$NON-NLS-1$ for (int i=0; i-1? VideoIO.ENGINE_XUGGLE: //$NON-NLS-1$ + String newEngine = typeName.indexOf("FFMPeg")>-1? VideoIO.ENGINE_FFMPEG: //$NON-NLS-1$ VideoIO.ENGINE_NONE; VideoIO.setEngine(newEngine); PrefsDialog prefs = frame.getPrefsDialog(); diff --git a/src/org/opensourcephysics/cabrillo/tracker/TrackerPanel.java b/src/org/opensourcephysics/cabrillo/tracker/TrackerPanel.java index b269cb09..384ecee4 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/TrackerPanel.java +++ b/src/org/opensourcephysics/cabrillo/tracker/TrackerPanel.java @@ -522,7 +522,7 @@ public void run() { track.addPropertyChangeListener("model_end", this); //$NON-NLS-1$ // update track control and dataTool if (trackControl!=null && trackControl.isVisible()) trackControl.refresh(); - if (dataBuilder != null && !getSystemDrawables().contains(track)) { + if (getDataBuilder() != null && !getSystemDrawables().contains(track)) { FunctionPanel panel = createFunctionPanel(track); dataBuilder.addPanel(track.getName(), panel); dataBuilder.setSelectedPanel(track.getName()); @@ -2253,14 +2253,14 @@ else if (name.equals("videoclip")) { // from videoPlayer //$NON-NL } if (getVideo() != null) { getVideo().setProperty("measure", null); //$NON-NLS-1$ - // if xuggle video, set smooth play per preferences + // if ffmpeg video, set smooth play per preferences VideoType videoType = (VideoType)video.getProperty("video_type"); //$NON-NLS-1$ - if (videoType!=null && videoType.getClass().getSimpleName().contains(VideoIO.ENGINE_XUGGLE)) { - boolean smooth = !Tracker.isXuggleFast; + if (videoType!=null && videoType.getClass().getSimpleName().contains(VideoIO.ENGINE_FFMPEG)) { + boolean smooth = !Tracker.isVideoFast; try { - String xuggleName = "org.opensourcephysics.media.xuggle.XuggleVideo"; //$NON-NLS-1$ - Class xuggleClass = Class.forName(xuggleName); - Method method = xuggleClass.getMethod("setSmoothPlay", new Class[] {Boolean.class}); //$NON-NLS-1$ + String ffmpegName = "org.opensourcephysics.media.ffmpeg.FFMPegVideo"; //$NON-NLS-1$ + Class ffmpegClass = Class.forName(ffmpegName); + Method method = ffmpegClass.getMethod("setSmoothPlay", new Class[] {Boolean.class}); //$NON-NLS-1$ method.invoke(video, new Object[] {smooth}); } catch (Exception ex) { } @@ -3115,7 +3115,7 @@ protected void setTrackName(TTrack track, String newName, boolean postEdit) { Toolkit.getDefaultToolkit().beep(); String s = "\"" + newName + "\" "; //$NON-NLS-1$ //$NON-NLS-2$ badNameLabel.setText(s + TrackerRes.getString("TTrack.Dialog.Name.BadName")); //$NON-NLS-1$ - TTrack.NameDialog nameDialog = TTrack.getNameDialog(track); + TrackNameDialog nameDialog = TTrack.getNameDialog(track); nameDialog.getContentPane().add(badNameLabel, BorderLayout.SOUTH); nameDialog.pack(); nameDialog.setVisible(true); @@ -3408,7 +3408,7 @@ public Object createObject(XMLControl control){ * @return the loaded object */ public Object loadObject(XMLControl control, Object obj) { - final TrackerPanel trackerPanel = (TrackerPanel)obj; + TrackerPanel trackerPanel = (TrackerPanel)obj; // load and check if a newer Tracker version created this file String fileVersion = control.getString("semantic_version"); //$NON-NLS-1$ // if ver is null then must be an older version @@ -3615,7 +3615,7 @@ public Object loadObject(XMLControl control, Object obj) { } catch (Exception e) { } if (addedTabs==null || addedTabs.isEmpty()) continue; - final DataToolTab tab = addedTabs.get(0); + DataToolTab tab = addedTabs.get(0); // set the owner of the tab to the specified track String trackname = tab.getOwnerName(); @@ -3625,7 +3625,7 @@ public Object loadObject(XMLControl control, Object obj) { tab.setOwner(trackname, data); // set up a DataRefreshTool and send it to the tab - final DataRefreshTool refresher = DataRefreshTool.getTool(data); + DataRefreshTool refresher = DataRefreshTool.getTool(data); DatasetManager toSend = new DatasetManager(); toSend.setID(data.getID()); try { @@ -3634,17 +3634,12 @@ public Object loadObject(XMLControl control, Object obj) { catch (RemoteException ex) {ex.printStackTrace();} // set the tab column IDs to the track data IDs and add track data to the refresher - Runnable refreshRunner = new Runnable() { - public void run() { - for (TTrack tt: trackerPanel.getTracks()) { - Data trackData = tt.getData(trackerPanel); - if (tab.setOwnedColumnIDs(tt.getName(), trackData)) { // true if track owns one or more columns - refresher.addData(trackData); - } - } + for (TTrack tt: trackerPanel.getTracks()) { + Data trackData = tt.getData(trackerPanel); + if (tab.setOwnedColumnIDs(tt.getName(), trackData)) { // true if track owns one or more columns + refresher.addData(trackData); } - }; - SwingUtilities.invokeLater(refreshRunner); + } // tab is now fully "wired" for refreshing by tracks } } diff --git a/src/org/opensourcephysics/cabrillo/tracker/WorldGrid.java b/src/org/opensourcephysics/cabrillo/tracker/WorldGrid.java index 736b0d99..138f9325 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/WorldGrid.java +++ b/src/org/opensourcephysics/cabrillo/tracker/WorldGrid.java @@ -73,7 +73,6 @@ public WorldGrid() { dotted = new BasicStroke(2,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER,8,DOTTED_LINE,0); } - @Override public void draw(DrawingPanel panel, Graphics g) { if (!visible || (!showMajorX && !showMajorY)) return; Graphics2D g2 = (Graphics2D)g; diff --git a/src/org/opensourcephysics/cabrillo/tracker/analytics/TrackerCountReader.java b/src/org/opensourcephysics/cabrillo/tracker/analytics/TrackerCountReader.java index 3bc3ce53..99c2269d 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/analytics/TrackerCountReader.java +++ b/src/org/opensourcephysics/cabrillo/tracker/analytics/TrackerCountReader.java @@ -52,7 +52,7 @@ public class TrackerCountReader extends JFrame { "4.9.8", "4.97", "4.96", "4.95", "4.94", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ "4.93", "4.92", "4.91", "4.90"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ private String[] OSs = {"all", "windows", "osx", "linux"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - private String[] engines = {"all", "Xuggle", "none"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + private String[] engines = {"all", "FFMPeg", "none"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ JComboBox actionDropdown, versionDropdown, osDropdown, engineDropdown; JLabel actionLabel, versionLabel, osLabel, engineLabel; diff --git a/src/org/opensourcephysics/cabrillo/tracker/deploy/TrackerStarter.java b/src/org/opensourcephysics/cabrillo/tracker/deploy/TrackerStarter.java index 87a185b2..d42c8045 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/deploy/TrackerStarter.java +++ b/src/org/opensourcephysics/cabrillo/tracker/deploy/TrackerStarter.java @@ -73,8 +73,8 @@ public class TrackerStarter { static String newline = "\n"; //$NON-NLS-1$ static String encoding = "UTF-8"; //$NON-NLS-1$ static String exceptions = ""; //$NON-NLS-1$ - static String xuggleWarning, starterWarning; - static String trackerHome, userHome, javaHome, xuggleHome, userDocuments; + static String ffmpegWarning, starterWarning; + static String trackerHome, userHome, javaHome, ffmpegHome, userDocuments; static String startLogPath; static FilenameFilter trackerJarFilter = new TrackerJarFilter(); static File codeBaseDir, starterJarFile; @@ -113,7 +113,7 @@ public class TrackerStarter { exceptions += ex.getClass().getSimpleName() + ": " + ex.getMessage() + newline; //$NON-NLS-1$ } - // get user home, java home and xuggle home + // get user home, java home and ffmpeg home try { userHome = OSPRuntime.getUserHome(); javaHome = System.getProperty("java.home"); //$NON-NLS-1$ @@ -213,9 +213,9 @@ public static void launchTracker(String[] args) { exitGracefully(null); } - // find Xuggle home + // find FFMPeg home try { - xuggleHome = findXuggleHome(trackerHome, true); + ffmpegHome = findFFMPegHome(trackerHome, true); } catch (Exception ex) { exceptions += ex.getClass().getSimpleName() + ": " + ex.getMessage() + newline; //$NON-NLS-1$ @@ -394,57 +394,57 @@ public static XMLControl findPreferences() { } /** - * Finds the Xuggle home directory and sets/returns the static variable xuggleHome. + * Finds the FFMPeg home directory and sets/returns the static variable ffmpegHome. * * @param trackerHome the Tracker home directory (may be null) * @param writeToLog true to write results to the start log */ - public static String findXuggleHome(String trackerHome, boolean writeToLog) throws Exception { - // first see if xuggleHome is child or sibling of trackerHome + public static String findFFMPegHome(String trackerHome, boolean writeToLog) throws Exception { + // first see if ffmpegHome is child or sibling of trackerHome if (trackerHome!=null) { File trackerHomeDir = new File(trackerHome); - File f = new File(trackerHomeDir, "Xuggle"); //$NON-NLS-1$ + File f = new File(trackerHomeDir, "FFMPeg"); //$NON-NLS-1$ if (!f.exists() || !f.isDirectory()) { - f = new File(trackerHomeDir.getParentFile(), "Xuggle"); //$NON-NLS-1$ + f = new File(trackerHomeDir.getParentFile(), "FFMPeg"); //$NON-NLS-1$ } if ((!f.exists()||!f.isDirectory()) && OSPRuntime.isMac()) { - f = new File("/usr/local/xuggler"); //$NON-NLS-1$ + f = new File("/usr/local/ffmpeg"); //$NON-NLS-1$ } if (f.exists() && f.isDirectory()) { - xuggleHome = f.getPath(); - if (writeToLog) logMessage("xugglehome found relative to trackerhome: "+xuggleHome); //$NON-NLS-1$ + ffmpegHome = f.getPath(); + if (writeToLog) logMessage("ffmpegHome found relative to trackerhome: "+ffmpegHome); //$NON-NLS-1$ } } // if not found, check OSP preferences - if (xuggleHome==null) { - xuggleHome = (String)OSPRuntime.getPreference("XUGGLE_HOME"); //$NON-NLS-1$ - if (writeToLog) logMessage("osp.prefs XUGGLE_HOME: " + xuggleHome); //$NON-NLS-1$ - if (xuggleHome!=null && !fileExists(xuggleHome)) { - xuggleHome = null; - if (writeToLog) logMessage("XUGGLE_HOME directory no longer exists"); //$NON-NLS-1$ + if (ffmpegHome==null) { + ffmpegHome = (String)OSPRuntime.getPreference("FFMPEG_HOME"); //$NON-NLS-1$ + if (writeToLog) logMessage("osp.prefs FFMPEG_HOME: " + ffmpegHome); //$NON-NLS-1$ + if (ffmpegHome!=null && !fileExists(ffmpegHome)) { + ffmpegHome = null; + if (writeToLog) logMessage("FFMPEG_HOME directory no longer exists"); //$NON-NLS-1$ } } - // if still not found, look for xuggleHome in environment variable - if (xuggleHome==null) { + // if not yet found, look for ffmpegHome in environment variable + if (ffmpegHome==null) { try { - xuggleHome = System.getenv("XUGGLE_HOME"); //$NON-NLS-1$ + ffmpegHome = System.getenv("FFMPEG_HOME"); //$NON-NLS-1$ } catch (Exception ex) { exceptions += ex.getClass().getSimpleName() + ": " + ex.getMessage() + newline; //$NON-NLS-1$ } - if (writeToLog) logMessage("environment variable XUGGLE_HOME: " + xuggleHome); //$NON-NLS-1$ - if (xuggleHome!=null && !fileExists(xuggleHome)) { - xuggleHome = null; - if (writeToLog) logMessage("XUGGLE_HOME directory no longer exists"); //$NON-NLS-1$ + if (writeToLog) logMessage("environment variable FFMPEG_HOME: " + ffmpegHome); //$NON-NLS-1$ + if (ffmpegHome!=null && !fileExists(ffmpegHome)) { + ffmpegHome = null; + if (writeToLog) logMessage("FFMPEG_HOME directory no longer exists"); //$NON-NLS-1$ } } - if (xuggleHome==null) - throw new NullPointerException("xugglehome not found"); //$NON-NLS-1$ - if (writeToLog) logMessage("using xugglehome: " + xuggleHome); //$NON-NLS-1$ - return xuggleHome; + if (ffmpegHome==null) + throw new NullPointerException("ffmpegHome not found"); //$NON-NLS-1$ + if (writeToLog) logMessage("using ffmpegHome: " + ffmpegHome); //$NON-NLS-1$ + return ffmpegHome; } /** @@ -819,7 +819,10 @@ private static void startTracker(String jarPath, String[] args) // prepare to execute the command ProcessBuilder builder = new ProcessBuilder(cmd); - + + builder.redirectErrorStream(true); + builder.redirectOutput(new File(trackerHome,"tracker_output.log")); + // set environment variables for new process Map env = builder.environment(); // String portVar = "TRACKER_PORT"; //$NON-NLS-1$ @@ -834,35 +837,35 @@ private static void startTracker(String jarPath, String[] args) } else env.remove("MEMORY_SIZE"); //$NON-NLS-1$ - // remove xuggle warnings that may have been set by previous versions of TrackerStarter - env.remove("XUGGLE_WARNING"); //$NON-NLS-1$ + // remove ffmpeg warnings that may have been set by previous versions of TrackerStarter + env.remove("FFMPEG_WARNING"); //$NON-NLS-1$ if (starterWarning!=null) { env.put("STARTER_WARNING", starterWarning); //$NON-NLS-1$ } else env.remove("STARTER_WARNING"); //$NON-NLS-1$ - // add TRACKER_HOME, XUGGLE_HOME and PATH to environment + // add TRACKER_HOME, FFMPEG_HOME and PATH to environment if (trackerHome!=null) { env.put("TRACKER_HOME", trackerHome); //$NON-NLS-1$ logMessage("setting TRACKER_HOME = " + trackerHome); //$NON-NLS-1$ } - if (xuggleHome!=null && new File(xuggleHome).exists()) { - env.put("XUGGLE_HOME", xuggleHome); //$NON-NLS-1$ - logMessage("setting XUGGLE_HOME = " + xuggleHome); //$NON-NLS-1$ + if (ffmpegHome!=null && new File(ffmpegHome).exists()) { + env.put("FFMPEG_HOME", ffmpegHome); //$NON-NLS-1$ + logMessage("setting FFMPEG_HOME = " + ffmpegHome); //$NON-NLS-1$ String pathEnvironment = OSPRuntime.isWindows()? "Path": //$NON-NLS-1$ OSPRuntime.isMac()? "DYLD_LIBRARY_PATH": "LD_LIBRARY_PATH"; //$NON-NLS-1$ //$NON-NLS-2$ String subdir = OSPRuntime.isWindows()? "bin": "lib"; //$NON-NLS-1$ //$NON-NLS-2$ - String xugglePath = xuggleHome+File.separator+subdir; - if (new File(xugglePath).exists()) { + String ffmpegPath = ffmpegHome+File.separator+subdir; + if (new File(ffmpegPath).exists()) { // get current PATH String pathValue = env.get(pathEnvironment); if (pathValue==null) pathValue = ""; //$NON-NLS-1$ - // add xuggle path at beginning of current PATH - if (!pathValue.startsWith(xugglePath)) { - pathValue = xugglePath+File.pathSeparator+pathValue; + // add ffmpeg path at beginning of current PATH + if (!pathValue.startsWith(ffmpegPath)) { + pathValue = ffmpegPath+File.pathSeparator+pathValue; } env.put(pathEnvironment, pathValue); diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/help/install.html b/src/org/opensourcephysics/cabrillo/tracker/resources/help/install.html index 12482ee1..9caa1783 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/help/install.html +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/help/install.html @@ -10,8 +10,8 @@

Installation

-

Tracker includes its own bundled runtime Java and open-source video engine Xuggle. You can always use a separate JRE to run Tracker by choosing it in Tracker Preferences.

-

1. Install Tracker (includes Java and Xuggle)

+

Tracker includes its own bundled runtime Java and open-source video engine FFMPeg. You can always use a separate JRE to run Tracker by choosing it in Tracker Preferences.

+

1. Install Tracker (includes Java and FFMPeg)

  1. Download the tracker installer for your platform (Windows, Mac OS X, or Linux) from Tracker's home page at https://physlets.org/tracker/.
  2. Follow the Installer Help instructions at https://physlets.org/tracker/installers/installer_help.html.
  3. @@ -31,7 +31,7 @@

    3. Upgrade Tracker when new versions ar Upgrade notification button--click to show popup menu

    -
  4. Most upgrades are instant: the new version or upgrade installer is downloaded and launched immediately. Some upgrades will require that you download a new installer from the Tracker website. Upgrades may include Tracker itself, Java, Xuggle and/or other components.
  5. +
  6. Most upgrades are instant: the new version or upgrade installer is downloaded and launched immediately. Some upgrades will require that you download a new installer from the Tracker website. Upgrades may include Tracker itself, Java, FFMPeg and/or other components.

diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/help/interface.html b/src/org/opensourcephysics/cabrillo/tracker/resources/help/interface.html index 79a63af3..0fb13cb0 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/help/interface.html +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/help/interface.html @@ -162,8 +162,8 @@

12. Tracker Preferences

  • Video tab
    • -
    • Select the playback option fast (may be jerky) or smooth (may be slow) for videos opened with Xuggle.
    • -
    • Check the boxes to display warning dialogs when no video engine is found, non-fatal Xuggle errors occur, or frame durations are not constant.
    • +
    • Select the playback option fast (may be jerky) or smooth (may be slow) for videos opened with FFMPeg.
    • +
    • Check the boxes to display warning dialogs when no video engine is found, non-fatal FFMPeg errors occur, or frame durations are not constant.
  • Actions tab
  • diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/help/videos.html b/src/org/opensourcephysics/cabrillo/tracker/resources/help/videos.html index bf1f3d26..9a7fd7d8 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/help/videos.html +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/help/videos.html @@ -16,7 +16,7 @@

    Videos

  • animated GIF files (.gif).
  • image sequences consisting of one or more digital images (.jpg, .png or pasted from the clipboard).
  • -

    Tracker uses the Xuggle video engine to open most digital video files including .mov, .avi and .mp4 on all platforms.

    +

    Tracker uses the FFMPeg video engine to open most digital video files including .mov, .avi and .mp4 on all platforms.

    1. Opening or importing a video from a local drive

    To open a video into a new tab, use the Open button or File|Open File menu item. To import a video into an existing tab, use the Video|Import, Video|Replace or File|Import|Video menu item.

    diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker.properties index 062f88e9..a0abf70b 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker.properties @@ -719,7 +719,7 @@ PrefsDialog.Checkbox.DefaultSize=Use default PrefsDialog.Checkbox.HintsOn=Show hints by default PrefsDialog.Tab.Video.Title=Video PrefsDialog.VideoPref.BorderTitle=Video Engine -PrefsDialog.Button.Xuggle=Xuggle +PrefsDialog.Button.FFMPeg=FFMPeg PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=Memory management is unavailable when using Web Start. PrefsDialog.Dialog.WebStart.Title=Web Start Mode @@ -734,9 +734,9 @@ PrefsDialog.Upgrades.Weekly=Weekly PrefsDialog.Upgrades.Monthly=Monthly PrefsDialog.Upgrades.Never=Never PrefsDialog.Button.CheckForUpgrade=Check Now -PrefsDialog.Xuggle.Speed.BorderTitle=Xuggle Video Playback -PrefsDialog.Xuggle.Slow=Smooth (may be slow) -PrefsDialog.Xuggle.Fast=Fast (may be jerky) +PrefsDialog.FFMPeg.Speed.BorderTitle=FFMPeg Video Playback +PrefsDialog.FFMPeg.Slow=Smooth (may be slow) +PrefsDialog.FFMPeg.Fast=Fast (may be jerky) PrefsDialog.CalibrationTool.BorderTitle=Default Calibration Tool Protractor.Name=Protractor Protractor.New.Name=protractor @@ -816,23 +816,23 @@ TMenuBar.Menu.MeasuringTools=Measuring Tools TMenuBar.Menu.AngleUnits=Angle Units TMenuBar.MenuItem.Degrees=Degrees TMenuBar.MenuItem.Radians=Radians -Tracker.Dialog.NoXuggle.Title=Xuggle not found -Tracker.Dialog.NoXuggle.Message1=Xuggle (cross-platform video engine) is not installed. -Tracker.Dialog.NoXuggle.Message2=Download Xuggle from http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=About Xuggle... -Tracker.Dialog.AboutXuggle.Title=About Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=Xuggle version -Tracker.Dialog.AboutXuggle.Message.Home=Xuggle home: -Tracker.Dialog.AboutXuggle.Message.Path=Xuggle jar path: +Tracker.Dialog.NoFFMPeg.Title=FFMPeg not found +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (cross-platform video engine) is not installed. +Tracker.Dialog.NoFFMPeg.Message2=Download FFMPeg from http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=About FFMPeg... +Tracker.Dialog.AboutFFMPeg.Title=About FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=FFMPeg version +Tracker.Dialog.AboutFFMPeg.Message.Home=FFMPeg home: +Tracker.Dialog.AboutFFMPeg.Message.Path=FFMPeg jar path: Tracker.Dialog.NoVideoEngine.Message1=No video engine is installed. Without one, you Tracker.Dialog.NoVideoEngine.Message2=can only open images (JPEG, PNG) and animated GIFs. -Tracker.Dialog.NoVideoEngine.Message3=Recommended: reinstall Tracker with the Xuggle video engine. +Tracker.Dialog.NoVideoEngine.Message3=Recommended: reinstall Tracker with the FFMPeg video engine. Tracker.Dialog.NoVideoEngine.Title=No Video Engine -Tracker.Dialog.NoXuggle.Message1=Xuggle is not working correctly. Please be sure the required -Tracker.Dialog.NoXuggle.Message2=xuggle jar files are in the Tracker home directory. For details, -Tracker.Dialog.NoXuggle.Message3=see Tracker_README.txt in the Tracker home directory. -Tracker.Dialog.NoXuggle.Message4=To install Xuggle, download the latest Tracker installer from -Tracker.Dialog.NoXuggle.Title=Xuggle Unavailable +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg is not working correctly. Please be sure the required +Tracker.Dialog.NoFFMPeg.Message2=ffmpeg jar files are in the Tracker home directory. For details, +Tracker.Dialog.NoFFMPeg.Message3=see Tracker_README.txt in the Tracker home directory. +Tracker.Dialog.NoFFMPeg.Message4=To install FFMPeg, download the latest Tracker installer from +Tracker.Dialog.NoFFMPeg.Title=FFMPeg Unavailable Tracker.About.DefaultLocale=Default locale Tracker.About.CurrentLanguage=Language Tracker.Dialog.InsufficientMemory.Title=Insufficient Memory @@ -878,7 +878,7 @@ TTrackBar.Memory.Menu.SetSize=Set memory size... TTrackBar.Button.Version=Now available: version TTrackBar.Popup.MenuItem.Upgrade=Upgrade Now... TTrackBar.Popup.MenuItem.Ignore=Ignore -XuggleVideo.MenuItem.SmoothPlay=Smooth Play (may be slow) +FFMPegVideo.MenuItem.SmoothPlay=Smooth Play (may be slow) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=Calibration Tape @@ -907,13 +907,13 @@ WorldTView.Button.World=World # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=Warnings PrefsDialog.Checkbox.WarnIfNoEngine=No video engine -PrefsDialog.Checkbox.WarnIfXuggleError=Non-fatal Xuggle errors +PrefsDialog.Checkbox.WarnIfFFMPegError=Non-fatal FFMPeg errors PropertiesDialog.Title=Properties PropertiesDialog.Label.Author=Authors PropertiesDialog.Label.Contact=Contact TActions.Action.Properties=Properties... TActions.Action.OpenBrowser=Open Library Browser... -TFrame.Progress.Xuggle=Xuggle loading frame +TFrame.Progress.FFMPeg=FFMPeg loading frame TFrame.Progress.ClickToCancel=(click to cancel) TFrame.Dialog.StalledVideo.Title=Error Loading Video TFrame.Dialog.StalledVideo.Message0=The video has stalled while loading. This may be temporary. @@ -926,12 +926,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=Stop TFrame.Dialog.StalledVideo.Button.Wait=Wait Tracker.Dialog.NoVideoEngine.Checkbox=Don't show this again TrackerIO.ZipFileFilter.Description=ZIP file (.zip) -TrackerIO.Dialog.ErrorFFMPEG.Message1=Xuggle has encountered the following error while opening this video: +TrackerIO.Dialog.ErrorFFMPEG.Message1=FFMPeg has encountered the following error while opening this video: TrackerIO.Dialog.ErrorFFMPEG.Message2=Not all errors are fatal. For full error messages, choose Help|Message Log. -TrackerIO.Dialog.ErrorFFMPEG.Message3=If Xuggle fails, you may be able to open the video with QuickTime. +TrackerIO.Dialog.ErrorFFMPEG.Message3=If FFMPeg fails, you may be able to open the video with QuickTime. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Note: On Mac OSX this requires running Tracker in a 32-bit Java VM. -TrackerIO.Dialog.ErrorFFMPEG.Title=Xuggle Error -TrackerIO.ErrorFFMPEG.LogMessage=For more details, turn on Xuggle warnings in the preferences dialog (Edit|Preferences). +TrackerIO.Dialog.ErrorFFMPEG.Title=FFMPeg Error +TrackerIO.ErrorFFMPEG.LogMessage=For more details, turn on FFMPeg warnings in the preferences dialog (Edit|Preferences). TToolBar.Button.OpenBrowser.Tooltip=Open the OSP Digital Library Browser # Additions by Doug Brown 2011-07-20 @@ -977,6 +977,7 @@ AutoTracker.Label.Match=Match AutoTracker.Label.NoTemplate=No Template AutoTracker.Label.EvolutionRate=Evolution Rate AutoTracker.Label.Automark=Automark +AutoTracker.Label.Autoskip=Max frames to be skipped on failure: AutoTracker.Info.Instructions=Click a Search button to look for a match in the search area shown. AutoTracker.Info.KeyFrame.Instructions1=This key frame defines the template and target shown. Click a Search button to look for matches to the template. AutoTracker.Info.KeyFrame.Instructions2=You may drag the target, template or search area to move or resize it. @@ -1187,17 +1188,17 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=Variable frame durations PrefsDialog.Button.NoEngine=None PrefsDialog.Dialog.SwitchToQT.Message=Switching to QuickTime also changes the Java VM to 32-bit. -PrefsDialog.Dialog.SwitchToXuggle32.Message=Switching to Xuggle also changes the Java VM to 32-bit. -PrefsDialog.Dialog.SwitchToXuggle64.Message=Switching to Xuggle also changes the Java VM to 64-bit. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=Switching to FFMPeg also changes the Java VM to 32-bit. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=Switching to FFMPeg also changes the Java VM to 64-bit. PrefsDialog.Dialog.SwitchVM.Title=Java VM Changed PrefsDialog.Dialog.SwitchTo32.Message=Switching to a 32-bit Java VM also changes the video engine to QuickTime. -PrefsDialog.Dialog.SwitchTo64.Message=Switching to a 64-bit Java VM also changes the video engine to Xuggle. +PrefsDialog.Dialog.SwitchTo64.Message=Switching to a 64-bit Java VM also changes the video engine to FFMPeg. PrefsDialog.Dialog.SwitchEngine.Title=Video Engine Changed PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=No video engine is available for a 64-bit Java VM. You will PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=only be able to open images (JPEG, PNG) and animated GIFs. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Are you sure you wish to switch to a 64-bit VM? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=No 64-bit Video Engine -PrefsDialog.Dialog.No32bitVMXuggle.Message=A 32-bit Java VM must be installed before Xuggle can be used. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=A 32-bit Java VM must be installed before FFMPeg can be used. PrefsDialog.Dialog.No32bitVMQT.Message=A 32-bit Java VM must be installed before QuickTime can be used. PrefsDialog.Dialog.No32bitVM.Message=For more information, see Tracker Help: Installation. PrefsDialog.Dialog.No32bitVM.Title=32-bit VM Required @@ -1213,10 +1214,10 @@ Tracker.Dialog.Button.RelaunchNow=Yes, restart now Tracker.Dialog.Button.ShowPrefs=No, but show preferences Tracker.Dialog.Button.ContinueWithoutEngine=No, continue without video Tracker.Dialog.EngineProblems.Message1=One or more video engines are installed but not working. -Tracker.Dialog.EngineProblems.Message2=For more information see Help|Diagnostics|About Xuggle or QuickTime. -Tracker.Dialog.ReplaceXuggle.Message1=We recommend you replace your current Xuggle video engine -Tracker.Dialog.ReplaceXuggle.Message2=with Xuggle version 3.4 by reinstalling Tracker (version 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=or above) and selecting Xuggle in the installation options. +Tracker.Dialog.EngineProblems.Message2=For more information see Help|Diagnostics|About FFMPeg or QuickTime. +Tracker.Dialog.ReplaceFFMPeg.Message1=We recommend you replace your current FFMPeg video engine +Tracker.Dialog.ReplaceFFMPeg.Message2=with FFMPeg version 3.4 by reinstalling Tracker (version 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=or above) and selecting FFMPeg in the installation options. TrackerIO.Dialog.DurationIsConstant.Message=All frame durations are equal TrackerIO.ZIPResourceFilter.Description=Tracker ZIP File (.trz) TToolbar.Button.Desktop.Tooltip=Display associated HTML and/or PDF documents @@ -1282,7 +1283,7 @@ TableTrackView.Dialog.NameColumn.Title=Text Column TToolBar.MenuItem.StretchOff=Reset # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Xuggle Version +PrefsDialog.Checkbox.WarnFFMPegVersion=FFMPeg Version PrefsDialog.Checkbox.WarnCopyFailed=Video Engine File Copy Errors Tracker.Dialog.FailedToCopy.Title=File Copy Error Velocity.Dialog.Color.Title=Choose Velocity Color @@ -1503,9 +1504,6 @@ TMenuBar.MenuItem.EJS=EJS Simulation TFrame.ProgressDialog.Title.FramesLoaded=Frames loaded TrackerIO.Dialog.OpenEJS.Title=Open EJS Model -# Additions by Doug Brown 2016-09-20 -TrackControl.Button.FontSmaller.ToolTip=Decrease the font and icon sizes -TrackControl.Button.FontBigger.ToolTip=Increase the font and icon sizes Tracker.Cursor.Autotrack.Keyframe.Description=Autotracker keyframe AutoTracker.Wizard.Button.Options=Options AutoTracker.Wizard.Menuitem.SearchFixed=Search Fixed Area @@ -1602,6 +1600,7 @@ NumberFormatSetter.TitledBorder.DecimalSeparator.Text=Decimal Separator NumberFormatSetter.Button.DecimalSeparator.Default=Locale default NumberFormatSetter.Button.DecimalSeparator.Period=Period NumberFormatSetter.Button.DecimalSeparator.Comma=Comma +NumberFormatSetter.Label.DecimalSeparator.CustomDecimalSeparators=Additional separators NumberFormatSetter.MixedPattern=mixed TMenuBar.MenuItem.Language.Other=Other PointMass.Description.Mass=mass @@ -1679,4 +1678,8 @@ TMenuBar.MenuItem.CheckForUpgrade.Text=Check for Upgrades # Additions by Doug Brown 2018-08-13 PointMass.Data.Description.PathLength=path length PlotGuestDialog.Button.SelectAll.Text=Select All -PlotGuestDialog.Button.SelectNone.Text=Select None \ No newline at end of file +PlotGuestDialog.Button.SelectNone.Text=Select None + +MovingAverageDialog.PointsToAverage=Quantity of points to average: +MovingAverageDialog.OK=OK +MovingAverageDialog.Cancel=Cancel diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_ar.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_ar.properties index 41345bfd..7cec566c 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_ar.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_ar.properties @@ -718,7 +718,7 @@ PrefsDialog.Checkbox.DefaultSize=\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u06 PrefsDialog.Checkbox.HintsOn=\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u062a\u0644\u0645\u064a\u062d\u0627\u062a \u0628\u0634\u0643\u0644 \u0627\u0641\u062a\u0631\u0627\u0636\u064a PrefsDialog.Tab.Video.Title=\u0641\u064a\u062f\u064a\u0648 PrefsDialog.VideoPref.BorderTitle=\u0645\u062d\u0631\u0643 \u0627\u0644\u0641\u064a\u062f\u064a\u0648 -PrefsDialog.Button.Xuggle=Xuggle +PrefsDialog.Button.FFMPeg=FFMPeg PrefsDialog.Button.QT=\u0643\u0648\u064a\u0643 \u062a\u0627\u064a\u0645 PrefsDialog.Dialog.WebStart.Message=\u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0630\u0627\u0643\u0631\u0629 \u063a\u064a\u0631 \u0645\u062a\u0648\u0641\u0631 \u0639\u0646\u062f \u0627\u0633\u062a\u062e\u062f\u0627\u0645 "\u0648\u064a\u0628 \u0633\u062a\u0627\u0631\u062a". PrefsDialog.Dialog.WebStart.Title=\u0648\u0636\u0639 \u0648\u064a\u0628 \u0633\u062a\u0627\u0631\u062a @@ -733,9 +733,9 @@ PrefsDialog.Upgrades.Weekly=\u0623\u0633\u0628\u0648\u0639\u064a PrefsDialog.Upgrades.Monthly=\u0634\u0647\u0631\u064a PrefsDialog.Upgrades.Never=\u0623\u0628\u062f\u0627\u064b PrefsDialog.Button.CheckForUpgrade=\u062a\u062d\u0642\u0642 \u0627\u0644\u0622\u0646 -PrefsDialog.Xuggle.Speed.BorderTitle=\u062a\u0634\u063a\u064a\u0644 \u0641\u064a\u062f\u064a\u0648 Xuggle -PrefsDialog.Xuggle.Slow=\u0627\u0645\u0644\u0633 (\u0642\u062f \u064a\u0643\u0648\u0646 \u0628\u0637\u064a\u0626) -PrefsDialog.Xuggle.Fast=\u0633\u0631\u064a\u0639 (\u0642\u062f \u064a\u0643\u0648\u0646 \u0645\u062a\u0634\u0646\u062c) +PrefsDialog.FFMPeg.Speed.BorderTitle=\u062a\u0634\u063a\u064a\u0644 \u0641\u064a\u062f\u064a\u0648 FFMPeg +PrefsDialog.FFMPeg.Slow=\u0627\u0645\u0644\u0633 (\u0642\u062f \u064a\u0643\u0648\u0646 \u0628\u0637\u064a\u0626) +PrefsDialog.FFMPeg.Fast=\u0633\u0631\u064a\u0639 (\u0642\u062f \u064a\u0643\u0648\u0646 \u0645\u062a\u0634\u0646\u062c) PrefsDialog.CalibrationTool.BorderTitle=\u0623\u062f\u0627\u0629 \u0627\u0644\u0645\u0639\u0627\u064a\u0631\u0629 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 Protractor.Name=\u0645\u0646\u0642\u0644\u0629 Protractor.New.Name=\u0645\u0646\u0642\u0644\u0629 @@ -815,23 +815,23 @@ TMenuBar.Menu.MeasuringTools=\u0623\u062f\u0648\u0627\u062a \u0642\u064a\u0627\u TMenuBar.Menu.AngleUnits=\u0648\u062d\u062f\u0629 \u0627\u0644\u0632\u0627\u0648\u064a\u0629 TMenuBar.MenuItem.Degrees=\u062f\u0631\u062c\u0627\u062a TMenuBar.MenuItem.Radians=\u0631\u0627\u062f\u064a\u0627\u0646 -Tracker.Dialog.NoXuggle.Title=Xuggle \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f -Tracker.Dialog.NoXuggle.Message1=Xuggle (\u0645\u062d\u0631\u0643 \u0627\u0644\u0641\u064a\u062f\u064a\u0648 \u0645\u062a\u0639\u062f\u062f \u0627\u0644\u0646\u0638\u0645) \u063a\u064a\u0631 \u0645\u062b\u0628\u062a -Tracker.Dialog.NoXuggle.Message2=\u062a\u062d\u0645\u064a\u0644 Xuggle \u0645\u0646 http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=\u062d\u0648\u0644 Xuggle ... -Tracker.Dialog.AboutXuggle.Title=\u062d\u0648\u0644 Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=\u0625\u0635\u062f\u0627\u0631 Xuggle -Tracker.Dialog.AboutXuggle.Message.Home=\u0625\u0635\u0641\u062d\u0629 :Xuggle -Tracker.Dialog.AboutXuggle.Message.Path=Xuggle \u0645\u0633\u0627\u0631 \u062c\u0627\u0631: +Tracker.Dialog.NoFFMPeg.Title=FFMPeg \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (\u0645\u062d\u0631\u0643 \u0627\u0644\u0641\u064a\u062f\u064a\u0648 \u0645\u062a\u0639\u062f\u062f \u0627\u0644\u0646\u0638\u0645) \u063a\u064a\u0631 \u0645\u062b\u0628\u062a +Tracker.Dialog.NoFFMPeg.Message2=\u062a\u062d\u0645\u064a\u0644 FFMPeg \u0645\u0646 http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=\u062d\u0648\u0644 FFMPeg ... +Tracker.Dialog.AboutFFMPeg.Title=\u062d\u0648\u0644 FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=\u0625\u0635\u062f\u0627\u0631 FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Home=\u0625\u0635\u0641\u062d\u0629 :FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Path=FFMPeg \u0645\u0633\u0627\u0631 \u062c\u0627\u0631: Tracker.Dialog.NoVideoEngine.Message1=\u0644\u0627 \u0645\u0634\u063a\u0644 \u0627\u0644\u0641\u064a\u062f\u064a\u0648 \u0645\u062b\u0628\u062a \u0645\u0633\u0628\u0642\u0627\u064b. \u062f\u0648\u0646 \u0648\u0627\u062d\u062f\u060c \u064a\u0645\u0643\u0646\u0643 Tracker.Dialog.NoVideoEngine.Message2=\u0641\u0642\u0637 \u0641\u062a\u062d \u0627\u0644\u0635\u0648\u0631 (JPEG, PNG) \u0648\u0645\u0644\u0641\u0627\u062a Gif \u0627\u0644\u0645\u062a\u062d\u0631\u0643\u0629. -Tracker.Dialog.NoVideoEngine.Message3=\u0627\u0644\u0645\u0648\u0635\u0649 \u0628\u0647\u0627: \u0625\u0639\u0627\u062f\u0629 \u062a\u062b\u0628\u064a\u062a \u062a\u0631\u0627\u0643\u0631\u0645\u0639 \u0645\u062d\u0631\u0643 \u0627\u0644\u0641\u064a\u062f\u064a\u0648 Xuggle. +Tracker.Dialog.NoVideoEngine.Message3=\u0627\u0644\u0645\u0648\u0635\u0649 \u0628\u0647\u0627: \u0625\u0639\u0627\u062f\u0629 \u062a\u062b\u0628\u064a\u062a \u062a\u0631\u0627\u0643\u0631\u0645\u0639 \u0645\u062d\u0631\u0643 \u0627\u0644\u0641\u064a\u062f\u064a\u0648 FFMPeg. Tracker.Dialog.NoVideoEngine.Title=\u0644\u0627 \u064a\u0648\u062c\u062f \u0645\u062d\u0631\u0643 \u0641\u064a\u062f\u064a\u0648 -Tracker.Dialog.NoXuggle.Message1=\u0644\u0627 \u064a\u0639\u0645\u0644 Xuggle \u0628\u0634\u0643\u0644 \u0635\u062d\u064a\u062d. \u064a\u0631\u062c\u0649 \u0627\u0644\u062a\u0623\u0643\u062f -Tracker.Dialog.NoXuggle.Message2=\u0645\u0646 \u0645\u0644\u0641\u0627\u062a \u062c\u0627\u0631 xuggle \u0641\u064a \u0627\u0644\u0645\u062c\u0644\u062f \u0627\u0644\u0631\u0626\u064a\u0633\u064a \u0644\u062a\u0631\u0627\u0643\u0631. \u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644\u060c -Tracker.Dialog.NoXuggle.Message3=\u0627\u0646\u0638\u0631 README.txt \u0644\u062a\u0631\u0627\u0643\u0631 \u0641\u064a \u0627\u0644\u0645\u062c\u0644\u062f \u0627\u0644\u0631\u0626\u064a\u0633\u064a. -Tracker.Dialog.NoXuggle.Message4=\u0644\u062a\u062b\u0628\u064a\u062a Xuggle\u060c \u0642\u0645 \u0628\u062a\u062d\u0645\u064a\u0644 \u0623\u062d\u062f\u062b \u0625\u0635\u062f\u0627\u0631 \u0644\u062a\u0631\u0627\u0643\u0631. -Tracker.Dialog.NoXuggle.Title=Xuggle \u063a\u064a\u0631 \u0645\u062a\u0648\u0641\u0631 +Tracker.Dialog.NoFFMPeg.Message1=\u0644\u0627 \u064a\u0639\u0645\u0644 FFMPeg \u0628\u0634\u0643\u0644 \u0635\u062d\u064a\u062d. \u064a\u0631\u062c\u0649 \u0627\u0644\u062a\u0623\u0643\u062f +Tracker.Dialog.NoFFMPeg.Message2=\u0645\u0646 \u0645\u0644\u0641\u0627\u062a \u062c\u0627\u0631 ffmpeg \u0641\u064a \u0627\u0644\u0645\u062c\u0644\u062f \u0627\u0644\u0631\u0626\u064a\u0633\u064a \u0644\u062a\u0631\u0627\u0643\u0631. \u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644\u060c +Tracker.Dialog.NoFFMPeg.Message3=\u0627\u0646\u0638\u0631 README.txt \u0644\u062a\u0631\u0627\u0643\u0631 \u0641\u064a \u0627\u0644\u0645\u062c\u0644\u062f \u0627\u0644\u0631\u0626\u064a\u0633\u064a. +Tracker.Dialog.NoFFMPeg.Message4=\u0644\u062a\u062b\u0628\u064a\u062a FFMPeg\u060c \u0642\u0645 \u0628\u062a\u062d\u0645\u064a\u0644 \u0623\u062d\u062f\u062b \u0625\u0635\u062f\u0627\u0631 \u0644\u062a\u0631\u0627\u0643\u0631. +Tracker.Dialog.NoFFMPeg.Title=FFMPeg \u063a\u064a\u0631 \u0645\u062a\u0648\u0641\u0631 Tracker.About.DefaultLocale=\u0627\u0644\u0644\u063a\u0629 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 Tracker.About.CurrentLanguage=\u0627\u0644\u0644\u063a\u0629 Tracker.Dialog.InsufficientMemory.Title=\u0627\u0644\u0630\u0627\u0643\u0631\u0629 \u063a\u064a\u0631 \u0643\u0627\u0641\u064a\u0629 @@ -877,7 +877,7 @@ TTrackBar.Memory.Menu.SetSize=\u062a\u0639\u064a\u064a\u0646 \u062d\u062c\u0645 TTrackBar.Button.Version=\u0645\u062a\u0648\u0641\u0631 \u0627\u0644\u0622\u0646: \u0627\u0644\u0625\u0635\u062f\u0627\u0631 TTrackBar.Popup.MenuItem.Upgrade=\u0627\u0644\u062a\u0631\u0642\u064a\u0629 \u0627\u0644\u0622\u0646... TTrackBar.Popup.MenuItem.Ignore=\u062a\u062c\u0627\u0647\u0644 -XuggleVideo.MenuItem.SmoothPlay=\u0627\u0644\u062a\u062d\u0631\u064a\u0643 \u0627\u0644\u0633\u0644\u0633 (\u0642\u062f \u064a\u0643\u0648\u0646 \u0628\u0637\u064a\u0626) +FFMPegVideo.MenuItem.SmoothPlay=\u0627\u0644\u062a\u062d\u0631\u064a\u0643 \u0627\u0644\u0633\u0644\u0633 (\u0642\u062f \u064a\u0643\u0648\u0646 \u0628\u0637\u064a\u0626) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=\u0634\u0631\u064a\u0637 \u0627\u0644\u0645\u0639\u0627\u064a\u0631\u0629 @@ -906,13 +906,13 @@ WorldTView.Button.World=\u0627\u0644\u0639\u0627\u0644\u0645 # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=\u062a\u062d\u0630\u064a\u0631\u0627\u062a PrefsDialog.Checkbox.WarnIfNoEngine=\u0644\u0627 \u064a\u0648\u062c\u062f \u0645\u062d\u0631\u0643 \u0641\u064a\u062f\u064a\u0648 -PrefsDialog.Checkbox.WarnIfXuggleError=\u0623\u062e\u0637\u0627\u0621 Xuggle \u063a\u064a\u0631 \u0641\u0627\u062f\u062d\u0629 +PrefsDialog.Checkbox.WarnIfFFMPegError=\u0623\u062e\u0637\u0627\u0621 FFMPeg \u063a\u064a\u0631 \u0641\u0627\u062f\u062d\u0629 PropertiesDialog.Title=\u062e\u0635\u0627\u0626\u0635 PropertiesDialog.Label.Author=\u0645\u0624\u0644\u0641 PropertiesDialog.Label.Contact=\u0639\u0646\u0648\u0627\u0646 TActions.Action.Properties=\u062e\u0635\u0627\u0626\u0635... TActions.Action.OpenBrowser=\u0641\u062a\u062d \u0645\u062a\u0635\u0641\u062d \u0627\u0644\u0645\u0643\u062a\u0628\u0629... -TFrame.Progress.Xuggle=Xuggle \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0644\u0642\u0637\u0629 +TFrame.Progress.FFMPeg=FFMPeg \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0644\u0642\u0637\u0629 TFrame.Progress.ClickToCancel=(\u0627\u0646\u0642\u0631 \u0644\u0625\u0644\u063a\u0627\u0621 \u0627\u0644\u0623\u0645\u0631) TFrame.Dialog.StalledVideo.Title=\u062e\u0637\u0623 \u0641\u064a \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0641\u064a\u062f\u064a\u0648 TFrame.Dialog.StalledVideo.Message0=\u062a\u0648\u0642\u0641 \u0623\u062b\u0646\u0627\u0621 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0641\u064a\u062f\u064a\u0648. \u0648\u0647\u0630\u0627 \u0642\u062f \u064a\u0643\u0648\u0646 \u0645\u0624\u0642\u062a\u0627\u064b. @@ -925,12 +925,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=\u062a\u0648\u0642\u0641 TFrame.Dialog.StalledVideo.Button.Wait=\u0627\u0646\u062a\u0638\u0631 Tracker.Dialog.NoVideoEngine.Checkbox=\u0644\u0627 \u062a\u0638\u0647\u0631 \u0647\u0630\u0627 \u0645\u0631\u0629 \u0623\u062e\u0631\u0649 TrackerIO.ZipFileFilter.Description=ZIP \u0645\u0644\u0641 (.zip) -TrackerIO.Dialog.ErrorFFMPEG.Message1=Xuggle \u0648\u0627\u062c\u0647 \u0627\u0644\u062e\u0637\u0623 \u0627\u0644\u062a\u0627\u0644\u064a \u0623\u062b\u0646\u0627\u0621 \u0641\u062a\u062d \u0647\u0630\u0627 \u0627\u0644\u0641\u064a\u062f\u064a\u0648: +TrackerIO.Dialog.ErrorFFMPEG.Message1=FFMPeg \u0648\u0627\u062c\u0647 \u0627\u0644\u062e\u0637\u0623 \u0627\u0644\u062a\u0627\u0644\u064a \u0623\u062b\u0646\u0627\u0621 \u0641\u062a\u062d \u0647\u0630\u0627 \u0627\u0644\u0641\u064a\u062f\u064a\u0648: TrackerIO.Dialog.ErrorFFMPEG.Message2=\u0644\u064a\u0633\u062a \u0643\u0627\u0641\u0629 \u0627\u0644\u0623\u062e\u0637\u0627\u0621 \u0641\u0627\u062f\u062d\u0629. \u0644\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0631\u0633\u0627\u0626\u0644 \u0627\u0644\u0623\u062e\u0637\u0627\u0621 \u0643\u0627\u0645\u0644\u0629\u060c \u0627\u062e\u062a\u0631 Help|\u0633\u062c\u0644 \u0627\u0644\u0623\u062d\u062f\u0627\u062b. -TrackerIO.Dialog.ErrorFFMPEG.Message3=\u0625\u0630\u0627 \u0641\u0634\u0644 Xuggle\u060c \u0642\u062f \u062a\u0643\u0648\u0646 \u0642\u0627\u062f\u0631\u0627 \u0639\u0644\u0649 \u0641\u062a\u062d \u0627\u0644\u0641\u064a\u062f\u064a\u0648 \u0645\u0639 \u0643\u0648\u064a\u0643 \u062a\u0627\u064a\u0645. +TrackerIO.Dialog.ErrorFFMPEG.Message3=\u0625\u0630\u0627 \u0641\u0634\u0644 FFMPeg\u060c \u0642\u062f \u062a\u0643\u0648\u0646 \u0642\u0627\u062f\u0631\u0627 \u0639\u0644\u0649 \u0641\u062a\u062d \u0627\u0644\u0641\u064a\u062f\u064a\u0648 \u0645\u0639 \u0643\u0648\u064a\u0643 \u062a\u0627\u064a\u0645. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=\u0645\u0644\u0627\u062d\u0638\u0629: \u0641\u064a \u0646\u0638\u0627\u0645 \u0627\u0644\u062a\u0634\u063a\u064a\u0644 Mac OSX \u0647\u0630\u0627 \u064a\u062a\u0637\u0644\u0628 \u062a\u0634\u063a\u064a\u0644 \u062a\u0631\u0627\u0643\u0631\u0641\u064a \u0622\u0644\u0629 \u062c\u0627\u0641\u0627 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 32 \u0628\u062a. -TrackerIO.Dialog.ErrorFFMPEG.Title=Xuggle \u062e\u0637\u0623 -TrackerIO.ErrorFFMPEG.LogMessage=\u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644\u060c \u0642\u0645 \u0628\u062a\u0634\u063a\u064a\u0644 \u062a\u0646\u0628\u064a\u0647\u0627\u062a Xuggle \u0641\u064a \u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u062a\u0641\u0636\u064a\u0644\u0627\u062a (\u062a\u062d\u0631\u064a\u0631 | \u062a\u0641\u0636\u064a\u0644\u0627\u062a). +TrackerIO.Dialog.ErrorFFMPEG.Title=FFMPeg \u062e\u0637\u0623 +TrackerIO.ErrorFFMPEG.LogMessage=\u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644\u060c \u0642\u0645 \u0628\u062a\u0634\u063a\u064a\u0644 \u062a\u0646\u0628\u064a\u0647\u0627\u062a FFMPeg \u0641\u064a \u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u062a\u0641\u0636\u064a\u0644\u0627\u062a (\u062a\u062d\u0631\u064a\u0631 | \u062a\u0641\u0636\u064a\u0644\u0627\u062a). TToolBar.Button.OpenBrowser.Tooltip=\u0641\u062a\u062d \u0645\u062a\u0635\u0641\u062d \u0627\u0644\u0645\u0643\u062a\u0628\u0629 \u0627\u0644\u0631\u0642\u0645\u064a\u0629 \u0644 OSP # Additions by Doug Brown 2011-07-20 @@ -1186,17 +1186,17 @@ PrefsDialog.Checkbox.32BitVM=32 \u0628\u062a PrefsDialog.Checkbox.WarnVariableDuration=\u0632\u0645\u0646 \u0627\u0644\u0644\u0642\u0637\u0629 \u0645\u062a\u063a\u064a\u064a\u0631 PrefsDialog.Button.NoEngine=\u0644\u0627 \u0634\u064a\u0626 PrefsDialog.Dialog.SwitchToQT.Message=\u0627\u0644\u062a\u062d\u0648\u0644 \u0625\u0644\u0649 \u0643\u0648\u064a\u0643 \u062a\u0627\u064a\u0645 \u064a\u063a\u064a\u064a\u0631 \u0625\u0644\u0649 \u0622\u0644\u0629 \u062c\u0627\u0641\u0627 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 32 \u0628\u062a. -PrefsDialog.Dialog.SwitchToXuggle32.Message=\u0627\u0644\u062a\u062d\u0648\u0644 \u0625\u0644\u0649 Xuggle \u064a\u063a\u064a\u064a\u0631 \u0625\u0644\u0649 \u0622\u0644\u0629 \u062c\u0627\u0641\u0627 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 32 \u0628\u062a. -PrefsDialog.Dialog.SwitchToXuggle64.Message=\u0627\u0644\u062a\u062d\u0648\u0644 \u0625\u0644\u0649 Xuggle \u064a\u063a\u064a\u064a\u0631 \u0625\u0644\u0649 \u0622\u0644\u0629 \u062c\u0627\u0641\u0627 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 64 \u0628\u062a. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=\u0627\u0644\u062a\u062d\u0648\u0644 \u0625\u0644\u0649 FFMPeg \u064a\u063a\u064a\u064a\u0631 \u0625\u0644\u0649 \u0622\u0644\u0629 \u062c\u0627\u0641\u0627 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 32 \u0628\u062a. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=\u0627\u0644\u062a\u062d\u0648\u0644 \u0625\u0644\u0649 FFMPeg \u064a\u063a\u064a\u064a\u0631 \u0625\u0644\u0649 \u0622\u0644\u0629 \u062c\u0627\u0641\u0627 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 64 \u0628\u062a. PrefsDialog.Dialog.SwitchVM.Title= \u0622\u0644\u0629 \u062c\u0627\u0641\u0627 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 \u0642\u062f \u062a\u063a\u064a\u064a\u0631\u062a PrefsDialog.Dialog.SwitchTo32.Message=\u0627\u0644\u062a\u062d\u0648\u0644 \u0625\u0644\u0649 \u0622\u0644\u0629 \u062c\u0627\u0641\u0627 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 32 \u0628\u062a \u0623\u064a\u0636\u0627 \u064a\u063a\u064a\u064a\u0631 \u0645\u062d\u0631\u0643 \u0627\u0644\u0641\u064a\u062f\u064a\u0648 \u0625\u0644\u0649 \u0643\u0648\u064a\u0643 \u062a\u0627\u064a\u0645, -PrefsDialog.Dialog.SwitchTo64.Message=\u0627\u0644\u062a\u062d\u0648\u0644 \u0625\u0644\u0649 \u0622\u0644\u0629 \u062c\u0627\u0641\u0627 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 64 \u0628\u062a \u0623\u064a\u0636\u0627 \u064a\u063a\u064a\u064a\u0631 \u0645\u062d\u0631\u0643 \u0627\u0644\u0641\u064a\u062f\u064a\u0648 \u0625\u0644\u0649 Xuggle. +PrefsDialog.Dialog.SwitchTo64.Message=\u0627\u0644\u062a\u062d\u0648\u0644 \u0625\u0644\u0649 \u0622\u0644\u0629 \u062c\u0627\u0641\u0627 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 64 \u0628\u062a \u0623\u064a\u0636\u0627 \u064a\u063a\u064a\u064a\u0631 \u0645\u062d\u0631\u0643 \u0627\u0644\u0641\u064a\u062f\u064a\u0648 \u0625\u0644\u0649 FFMPeg. PrefsDialog.Dialog.SwitchEngine.Title=\u0645\u062d\u0631\u0643 \u0627\u0644\u0641\u064a\u062f\u064a\u0648 \u062a\u063a\u064a\u064a\u0631 PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=\u0644\u0627\u064a\u0648\u062c\u062f \u0645\u062d\u0631\u0643 \u0641\u064a\u062f\u064a\u0648 \u0644\u0622\u0644\u0629 \u062c\u0627\u0641\u0627 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 64 \u0628\u062a. \u064a\u0645\u0643\u0646\u0643 PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=\u0641\u062a\u062d \u0627\u0644\u0635\u0648\u0631 (JPEG\u060c PNG) \u0648\u0635\u0648\u0631 GIF \u0627\u0644\u0645\u062a\u062d\u0631\u0643\u0629. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=\u0647\u0644 \u0623\u0646\u062a \u0645\u062a\u0623\u0643\u062f \u0623\u0646\u0643 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u062a\u062d\u0648\u0644 \u0625\u0644\u0649 \u0622\u0644\u0629 \u062c\u0627\u0641\u0627 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 64 \u0628\u062a\u061f PrefsDialog.Dialog.NoEngineIn64bitVM.Title=\u0644\u0627 \u064a\u0648\u062c\u062f 64 \u0628\u062a \u0645\u062d\u0631\u0643 \u0641\u064a\u062f\u064a\u0648 -PrefsDialog.Dialog.No32bitVMXuggle.Message=\u064a\u062c\u0628 \u062a\u062b\u0628\u064a\u062a \u0622\u0644\u0629 \u062c\u0627\u0641\u0627 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 32 \u0628\u062a \u0642\u0628\u0644 \u0625\u0645\u0643\u0627\u0646\u064a\u0629 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 Xuggle. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=\u064a\u062c\u0628 \u062a\u062b\u0628\u064a\u062a \u0622\u0644\u0629 \u062c\u0627\u0641\u0627 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 32 \u0628\u062a \u0642\u0628\u0644 \u0625\u0645\u0643\u0627\u0646\u064a\u0629 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 FFMPeg. PrefsDialog.Dialog.No32bitVMQT.Message=\u064a\u062c\u0628 \u062a\u062b\u0628\u064a\u062a \u0622\u0644\u0629 \u062c\u0627\u0641\u0627 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 32 \u0628\u062a \u0642\u0628\u0644 \u0625\u0645\u0643\u0627\u0646\u064a\u0629 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0643\u0648\u064a\u0643 \u062a\u0627\u064a\u0645. PrefsDialog.Dialog.No32bitVM.Message=\u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062a\u060c \u0631\u0627\u062c\u0639 \u062a\u0639\u0644\u064a\u0645\u0627\u062a \u0628\u0631\u0646\u0627\u0645\u062c \u062a\u0631\u0627\u0643\u0631: \u062a\u062b\u0628\u064a\u062a. PrefsDialog.Dialog.No32bitVM.Title=\u0645\u0637\u0644\u0648\u0628 \u0622\u0644\u0629 \u062c\u0627\u0641\u0627 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 32 \u0628\u062a @@ -1212,10 +1212,10 @@ Tracker.Dialog.Button.RelaunchNow=\u0646\u0639\u0645\u060c \u0623\u0639\u062f \u Tracker.Dialog.Button.ShowPrefs=\u0644\u0627\u060c \u0648 \u0644\u0643\u0646 \u0623\u0638\u0647\u0631 \u0627\u0644\u062e\u064a\u0627\u0631\u0627\u062a Tracker.Dialog.Button.ContinueWithoutEngine=\u0644\u0627\u060c \u0625\u0633\u062a\u0645\u0631 \u062f\u0648\u0646 \u0627\u0644\u0641\u064a\u062f\u064a\u0648 Tracker.Dialog.EngineProblems.Message1=\u0648\u0627\u062d\u062f \u0623\u0648 \u0623\u0643\u062b\u0631 \u0645\u0646 \u0645\u062d\u0631\u0643\u0627\u062a \u0627\u0644\u0641\u064a\u062f\u064a\u0648 \u0645\u062b\u0628\u062a\u0629 \u0648\u0644\u0643\u0646 \u0644\u0627 \u064a\u0639\u0645\u0644. -Tracker.Dialog.EngineProblems.Message2=\u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0631\u0627\u062c\u0639 \u062a\u0639\u0644\u064a\u0645\u0627\u062a | \u062a\u0634\u062e\u064a\u0635 | \u0639\u0646 Xuggle \u0623\u0648 \u0643\u0648\u064a\u0643 \u062a\u0627\u064a\u0645. -Tracker.Dialog.ReplaceXuggle.Message1=\u0646\u062d\u0646 \u0646\u0646\u0635\u062d \u0628\u0627\u0633\u062a\u0628\u062f\u0627\u0644 \u0645\u062d\u0631\u0643\u0643 \u0627\u0644\u062d\u0627\u0644\u064a Xuggle \u0644\u0644\u0641\u064a\u062f\u064a\u0648 -Tracker.Dialog.ReplaceXuggle.Message2=\u0645\u0639 Xuggle \u0627\u0644\u0625\u0635\u062f\u0627\u0631 3.4 \u0639\u0646 \u0637\u0631\u064a\u0642 \u0625\u0639\u0627\u062f\u0629 \u062a\u062b\u0628\u064a\u062a \u0628\u0631\u0646\u0627\u0645\u062c \u062a\u0631\u0627\u0643\u0631(\u0627\u0644\u0625\u0635\u062f\u0627\u0631 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=\u0623\u0648 \u0623\u0639\u0644\u0627\u0647) \u062b\u0645 \u062a\u062d\u062f\u064a\u062f Xuggle \u0641\u064a \u062e\u064a\u0627\u0631\u0627\u062a \u0627\u0644\u062a\u062b\u0628\u064a\u062a. +Tracker.Dialog.EngineProblems.Message2=\u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0631\u0627\u062c\u0639 \u062a\u0639\u0644\u064a\u0645\u0627\u062a | \u062a\u0634\u062e\u064a\u0635 | \u0639\u0646 FFMPeg \u0623\u0648 \u0643\u0648\u064a\u0643 \u062a\u0627\u064a\u0645. +Tracker.Dialog.ReplaceFFMPeg.Message1=\u0646\u062d\u0646 \u0646\u0646\u0635\u062d \u0628\u0627\u0633\u062a\u0628\u062f\u0627\u0644 \u0645\u062d\u0631\u0643\u0643 \u0627\u0644\u062d\u0627\u0644\u064a FFMPeg \u0644\u0644\u0641\u064a\u062f\u064a\u0648 +Tracker.Dialog.ReplaceFFMPeg.Message2=\u0645\u0639 FFMPeg \u0627\u0644\u0625\u0635\u062f\u0627\u0631 3.4 \u0639\u0646 \u0637\u0631\u064a\u0642 \u0625\u0639\u0627\u062f\u0629 \u062a\u062b\u0628\u064a\u062a \u0628\u0631\u0646\u0627\u0645\u062c \u062a\u0631\u0627\u0643\u0631(\u0627\u0644\u0625\u0635\u062f\u0627\u0631 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=\u0623\u0648 \u0623\u0639\u0644\u0627\u0647) \u062b\u0645 \u062a\u062d\u062f\u064a\u062f FFMPeg \u0641\u064a \u062e\u064a\u0627\u0631\u0627\u062a \u0627\u0644\u062a\u062b\u0628\u064a\u062a. TrackerIO.Dialog.DurationIsConstant.Message=\u062c\u0645\u064a\u0639 \u0641\u062a\u0631\u0627\u062a \u0627\u0644\u0644\u0642\u0637\u0627\u062a \u0645\u062a\u0633\u0627\u0648\u064a\u0629(\u0644\u0642\u0637\u0629 \u0641\u064a \u0627\u0644\u062b\u0627\u0646\u064a\u0629 \u062b\u0627\u0628\u062a\u0629). TrackerIO.ZIPResourceFilter.Description= \u0645\u0644\u0641 \u0645\u0636\u063a\u0648\u0637 \u0644\u0628\u0631\u0646\u0627\u0645\u062c \u062a\u0631\u0627\u0643\u0631(. TRZ) TToolbar.Button.Desktop.Tooltip=\u0639\u0631\u0636 \u0645\u0633\u062a\u0646\u062f\u0627\u062a HTML \u0648/\u0623\u0648 \u0648\u062b\u0627\u0626\u0642 PDF @@ -1281,7 +1281,7 @@ TableTrackView.Dialog.NameColumn.Title=\u0639\u0645\u0648\u062F \u0646\u0635 TToolBar.MenuItem.StretchOff=\u0625\u0639\u0627\u062F\u0629 # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Xuggle \u0625\u0635\u062F\u0627\u0631 +PrefsDialog.Checkbox.WarnFFMPegVersion=FFMPeg \u0625\u0635\u062F\u0627\u0631 PrefsDialog.Checkbox.WarnCopyFailed=\u0623\u062E\u0637\u0627\u0621 \u0646\u0633\u062E \u0645\u0644\u0641 \u0645\u0634\u063A\u0644 \u0627\u0644\u0641\u064A\u062F\u064A\u0648 Tracker.Dialog.FailedToCopy.Title=\u062E\u0637\u0627 \u0641\u064A \u0646\u0633\u062E \u0627\u0644\u0645\u0644\u0641 Velocity.Dialog.Color.Title=\u0627\u062E\u062A\u0631 \u0644\u0648\u0646 \u0627\u0644\u0633\u0631\u0639\u0629 diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_cs.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_cs.properties index 688885b0..483b562d 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_cs.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_cs.properties @@ -718,7 +718,7 @@ PrefsDialog.Checkbox.DefaultSize=Pou\u009e\u00edt v\u00fdchoz\u00ed PrefsDialog.Checkbox.HintsOn=Zobrazit tipy ve v\u00fdchoz\u00edm nastaven\u00ed PrefsDialog.Tab.Video.Title=Video PrefsDialog.VideoPref.BorderTitle=Video Engine -PrefsDialog.Button.Xuggle=Xuggle +PrefsDialog.Button.FFMPeg=FFMPeg PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=Spr\u00e1va pam\u011bti nen\u00ed k dispozici p\u0159i pou\u009eit\u00ed Web Start. PrefsDialog.Dialog.WebStart.Title=Web Start Mode @@ -733,9 +733,9 @@ PrefsDialog.Upgrades.Weekly=t\u00fddn\u011b PrefsDialog.Upgrades.Monthly=M\u011bs\u00ed\u010dn\u011b PrefsDialog.Upgrades.Never=Nikdy PrefsDialog.Button.CheckForUpgrade=Zkontrolovat Nyn\u00ed -PrefsDialog.Xuggle.Speed.BorderTitle=Xuggle Video Playback -PrefsDialog.Xuggle.Slow=Smooth (m\u016f\u009ee b\u00fdt pomal\u00e9) -PrefsDialog.Xuggle.Fast=Fast (m\u016f\u009ee b\u00fdt trhan\u00e9) +PrefsDialog.FFMPeg.Speed.BorderTitle=FFMPeg Video Playback +PrefsDialog.FFMPeg.Slow=Smooth (m\u016f\u009ee b\u00fdt pomal\u00e9) +PrefsDialog.FFMPeg.Fast=Fast (m\u016f\u009ee b\u00fdt trhan\u00e9) PrefsDialog.CalibrationTool.BorderTitle=V\u00fdchoz\u00ed Kalibra\u010dn\u00ed N\u00e1stroj Protractor.Name=\u00dahlom\u011br Protractor.New.Name=\u00fahlom\u011br @@ -815,23 +815,23 @@ TMenuBar.Menu.MeasuringTools=M\u011b\u0159\u00edc\u00ed N\u00e1stroje TMenuBar.Menu.AngleUnits=\u00dahlov\u00e9 Jednotky TMenuBar.MenuItem.Degrees=Stupn\u011b TMenuBar.MenuItem.Radians=Radi\u00e1ny -Tracker.Dialog.NoXuggle.Title=Xuggle nenalezen -Tracker.Dialog.NoXuggle.Message1=Xuggle (cross-platform video engine) nen\u00ed nainstalov\u00e1n. -Tracker.Dialog.NoXuggle.Message2=St\u00e1hnout Xuggle z http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=O Xuggle... -Tracker.Dialog.AboutXuggle.Title=O Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=Verze Xuggle -Tracker.Dialog.AboutXuggle.Message.Home=Xuggle home: -Tracker.Dialog.AboutXuggle.Message.Path=Xuggle jar cesta: +Tracker.Dialog.NoFFMPeg.Title=FFMPeg nenalezen +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (cross-platform video engine) nen\u00ed nainstalov\u00e1n. +Tracker.Dialog.NoFFMPeg.Message2=St\u00e1hnout FFMPeg z http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=O FFMPeg... +Tracker.Dialog.AboutFFMPeg.Title=O FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=Verze FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Home=FFMPeg home: +Tracker.Dialog.AboutFFMPeg.Message.Path=FFMPeg jar cesta: Tracker.Dialog.NoVideoEngine.Message1=Video engine nen\u00ed naistalov\u00e1n. Bez toho m\u016f\u009eete Tracker.Dialog.NoVideoEngine.Message2=otev\u00edrat obr\u00e1zky (JPEG, PNG) a animovan\u00e9 GIFy. -Tracker.Dialog.NoVideoEngine.Message3=Recommended: reinstalovat Tracker s Xuggle video engine. +Tracker.Dialog.NoVideoEngine.Message3=Recommended: reinstalovat Tracker s FFMPeg video engine. Tracker.Dialog.NoVideoEngine.Title=\u008e\u00e1dn\u00fd Video Engine -Tracker.Dialog.NoXuggle.Message1=Xuggle nepracuje spr\u00e1vn\u011b. Pros\u00edm, ujist\u011bte se, \u009ee po\u009eadovan\u00e9 -Tracker.Dialog.NoXuggle.Message2=xuggle jar soubory jsou v Tracker domovsk\u00e9m adres\u00e1\u0159i. Pro v\u00edce informac\u00ed -Tracker.Dialog.NoXuggle.Message3=p\u0159e\u010dt\u011bte Tracker_README.txt v Tracker domovsk\u00e9m adres\u00e1\u0159i. -Tracker.Dialog.NoXuggle.Message4=Pro instalaci Xuggle, st\u00e1hn\u011bte posledn\u00ed Tracker instalaci z -Tracker.Dialog.NoXuggle.Title=Xuggle Nen\u00ed k dispozici +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg nepracuje spr\u00e1vn\u011b. Pros\u00edm, ujist\u011bte se, \u009ee po\u009eadovan\u00e9 +Tracker.Dialog.NoFFMPeg.Message2=ffmpeg jar soubory jsou v Tracker domovsk\u00e9m adres\u00e1\u0159i. Pro v\u00edce informac\u00ed +Tracker.Dialog.NoFFMPeg.Message3=p\u0159e\u010dt\u011bte Tracker_README.txt v Tracker domovsk\u00e9m adres\u00e1\u0159i. +Tracker.Dialog.NoFFMPeg.Message4=Pro instalaci FFMPeg, st\u00e1hn\u011bte posledn\u00ed Tracker instalaci z +Tracker.Dialog.NoFFMPeg.Title=FFMPeg Nen\u00ed k dispozici Tracker.About.DefaultLocale=V\u00fdchoz\u00ed prost\u0159ed\u00ed Tracker.About.CurrentLanguage=Jazyk Tracker.Dialog.InsufficientMemory.Title=Nedostatek Pam\u011bti @@ -877,7 +877,7 @@ TTrackBar.Memory.Menu.SetSize=Nastavit velikost pam\u011bti... TTrackBar.Button.Version=Nyn\u00ed je k dispozici: verze TTrackBar.Popup.MenuItem.Upgrade=Aktualizovat te\u010f ... TTrackBar.Popup.MenuItem.Ignore=Ignorovat -XuggleVideo.MenuItem.SmoothPlay=Plynul\u00e9 p\u0159ehr\u00e1v\u00e1n\u00ed (m\u016f\u009ee b\u00fdt pomal\u00e9) +FFMPegVideo.MenuItem.SmoothPlay=Plynul\u00e9 p\u0159ehr\u00e1v\u00e1n\u00ed (m\u016f\u009ee b\u00fdt pomal\u00e9) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=Kalibra\u010dn\u00ed P\u00e1ska @@ -906,13 +906,13 @@ WorldTView.Button.World=Celkov\u00fd pohled # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=Upozorn\u011bn\u00ed PrefsDialog.Checkbox.WarnIfNoEngine=\u008e\u00e1dn\u00fd video engine -PrefsDialog.Checkbox.WarnIfXuggleError=Non-fatal Xuggle errors +PrefsDialog.Checkbox.WarnIfFFMPegError=Non-fatal FFMPeg errors PropertiesDialog.Title=Vlastnosti PropertiesDialog.Label.Author=Auto\u0159i PropertiesDialog.Label.Contact=Kontakt TActions.Action.Properties=Vlastnosti... TActions.Action.OpenBrowser=Otev\u0159\u00edt Prohl\u00ed\u009ee\u010d Knihovny... -TFrame.Progress.Xuggle=Xuggle na\u010d\u00edt\u00e1 sn\u00edmek +TFrame.Progress.FFMPeg=FFMPeg na\u010d\u00edt\u00e1 sn\u00edmek TFrame.Progress.ClickToCancel=(klikn\u011bte pro zru\u009aen\u00ed) TFrame.Dialog.StalledVideo.Title=Error Loading Video TFrame.Dialog.StalledVideo.Message0=Video bylo zastaveno p\u0159i na\u010d\u00edt\u00e1n\u00ed. To m\u016f\u009ee b\u00fdt do\u010dasn\u00e9. @@ -925,12 +925,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=Stop TFrame.Dialog.StalledVideo.Button.Wait=\u010cekat Tracker.Dialog.NoVideoEngine.Checkbox=Znovu nezobrazovat TrackerIO.ZipFileFilter.Description=ZIP soubor (.zip) -TrackerIO.Dialog.ErrorFFMPEG.Message1=V Xuggle do\u009alo k n\u00e1sleduj\u00edc\u00ed chyb\u011b p\u0159i otev\u00edr\u00e1n\u00ed tohoto video: +TrackerIO.Dialog.ErrorFFMPEG.Message1=V FFMPeg do\u009alo k n\u00e1sleduj\u00edc\u00ed chyb\u011b p\u0159i otev\u00edr\u00e1n\u00ed tohoto video: TrackerIO.Dialog.ErrorFFMPEG.Message2=V\u009aechny chyby nejsou z\u00e1sadn\u00ed. Pro celkov\u00fd seznam chyb, zvol N\u00e1pov\u011bdu|Message Log. -TrackerIO.Dialog.ErrorFFMPEG.Message3=Pokud Xuggle nefunguje, m\u016f\u009eete otev\u0159\u00edt video v QuickTimu. +TrackerIO.Dialog.ErrorFFMPEG.Message3=Pokud FFMPeg nefunguje, m\u016f\u009eete otev\u0159\u00edt video v QuickTimu. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Note: Na Mac OSX pot\u0159ebuje Tracker pro b\u011bh 32-bit Java VM. -TrackerIO.Dialog.ErrorFFMPEG.Title=Xuggle Error -TrackerIO.ErrorFFMPEG.LogMessage=Pro v\u00edce informac\u00ed, klikn\u011bte na Xuggle warnings v dialogu nastaven\u00ed (\u00dapravy|Nastaven\u00ed). +TrackerIO.Dialog.ErrorFFMPEG.Title=FFMPeg Error +TrackerIO.ErrorFFMPEG.LogMessage=Pro v\u00edce informac\u00ed, klikn\u011bte na FFMPeg warnings v dialogu nastaven\u00ed (\u00dapravy|Nastaven\u00ed). TToolBar.Button.OpenBrowser.Tooltip=Otev\u0159\u00edt OSP Digit\u00e1ln\u00ed knihovnu # Additions by Doug Brown 2011-07-20 @@ -1186,17 +1186,17 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=Variabiln\u00ed doba trv\u00e1n\u00ed sn\u00edmku PrefsDialog.Button.NoEngine=\u008e\u00e1dn\u00fd PrefsDialog.Dialog.SwitchToQT.Message=Zm\u011bna na QuickTime tak\u00e9 zm\u011bn\u00ed Java VM na 32-bit. -PrefsDialog.Dialog.SwitchToXuggle32.Message=Zm\u011bna na Xuggle tak\u00e9 zm\u011bn\u00ed Java VM na 32-bit. -PrefsDialog.Dialog.SwitchToXuggle64.Message=Zm\u011bna na Xuggle tak\u00e9 zm\u011bn\u00ed Java VM na 64-bit. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=Zm\u011bna na FFMPeg tak\u00e9 zm\u011bn\u00ed Java VM na 32-bit. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=Zm\u011bna na FFMPeg tak\u00e9 zm\u011bn\u00ed Java VM na 64-bit. PrefsDialog.Dialog.SwitchVM.Title=Java VM Zm\u011bn\u011bn PrefsDialog.Dialog.SwitchTo32.Message=Zm\u011bna na 32-bitov\u00e9 Java VM tak\u00e9 zm\u011bn\u00ed video engine na QuickTime. -PrefsDialog.Dialog.SwitchTo64.Message=Zm\u011bna na 64-bitov\u00e9 Java VM tak\u00e9 zm\u011bn\u00ed video engine na Xuggle. +PrefsDialog.Dialog.SwitchTo64.Message=Zm\u011bna na 64-bitov\u00e9 Java VM tak\u00e9 zm\u011bn\u00ed video engine na FFMPeg. PrefsDialog.Dialog.SwitchEngine.Title=Video Engine Zm\u011bn\u011bn PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=\u008e\u00e1dn\u00fd video engine nen\u00ed k dispozici pro 64-bit Java VM. M\u016f\u009eete PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=st\u00e1le otev\u00edrat obr\u00e1zky (JPEG, PNG) a animovan\u00e9 obr\u00e1zky ve form\u00e1tu GIF. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Jste si jisti s p\u0159epnut\u00edm do 64-bit VM? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=Ne 64-bit Video Engine -PrefsDialog.Dialog.No32bitVMXuggle.Message=Mus\u00ed b\u00fdt naistalov\u00e1n 32-bit VM p\u0159ed pou\u009eit\u00edm Xuggle. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=Mus\u00ed b\u00fdt naistalov\u00e1n 32-bit VM p\u0159ed pou\u009eit\u00edm FFMPeg. PrefsDialog.Dialog.No32bitVMQT.Message=Mus\u00ed b\u00fdt naistalov\u00e1n 32-bit VM p\u0159ed pou\u009eit\u00edm QuickTimu. PrefsDialog.Dialog.No32bitVM.Message=Dal\u009a\u00ed informace naleznete v n\u00e1pov\u011bd\u011b k Trackeru: instalace. PrefsDialog.Dialog.No32bitVM.Title=32-bit VM Vy\u009eadov\u00e1n @@ -1213,9 +1213,9 @@ Tracker.Dialog.Button.ShowPrefs=Ne, ale zobrazit p\u0159edvolby Tracker.Dialog.Button.ContinueWithoutEngine=Ne,pokra\u010dovat bez videa Tracker.Dialog.EngineProblems.Message1=Jeden nebo v\u00edce video engin\u016f je nainstalov\u00e1n, ale nepracuje. Tracker.Dialog.EngineProblems.Message2=Pro v\u00edce informac\u00ed viz N\u00e1pov\u011bda|Diagnostika|O Xugglu nebo QuickTimu. -Tracker.Dialog.ReplaceXuggle.Message1=Doporu\u010dujeme vym\u011bnit st\u00e1vaj\u00edc\u00ed Xuggle video engine -Tracker.Dialog.ReplaceXuggle.Message2=za Xuggle verzi 3.4 pomoc\u00ed reinstalace Trackeru (verze 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=nebo vy\u009a\u009a\u00ed) a v\u00fdb\u011brem Xuggle v mo\u009enostech instalace. +Tracker.Dialog.ReplaceFFMPeg.Message1=Doporu\u010dujeme vym\u011bnit st\u00e1vaj\u00edc\u00ed FFMPeg video engine +Tracker.Dialog.ReplaceFFMPeg.Message2=za FFMPeg verzi 3.4 pomoc\u00ed reinstalace Trackeru (verze 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=nebo vy\u009a\u009a\u00ed) a v\u00fdb\u011brem FFMPeg v mo\u009enostech instalace. TrackerIO.Dialog.DurationIsConstant.Message=V\u009aechny doby trv\u00e1n\u00ed sn\u00edmk\u016f jsou stejn\u00e9 (konstantn\u00ed fps). TrackerIO.ZIPResourceFilter.Description=Tracker ZIP Soubor (.trz) TToolbar.Button.Desktop.Tooltip=Zobrazit dopl\u0148kov\u00e9 HTML nebo dokumenty ve form\u00e1tu PDF @@ -1281,7 +1281,7 @@ TableTrackView.Dialog.NameColumn.Title=Text Column TToolBar.MenuItem.StretchOff=Reset # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Xuggle Version +PrefsDialog.Checkbox.WarnFFMPegVersion=FFMPeg Version PrefsDialog.Checkbox.WarnCopyFailed=Video Engine File Copy Errors Tracker.Dialog.FailedToCopy.Title=File Copy Error Velocity.Dialog.Color.Title=Choose Velocity Color diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_da.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_da.properties index 2ab7a752..c6543423 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_da.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_da.properties @@ -725,7 +725,7 @@ PrefsDialog.Checkbox.DefaultSize=Benyt standardindstillinger PrefsDialog.Checkbox.HintsOn=Vis hints som standard PrefsDialog.Tab.Video.Title=Video PrefsDialog.VideoPref.BorderTitle=Videomotor -PrefsDialog.Button.Xuggle=Xuggle (anbefalet) +PrefsDialog.Button.FFMPeg=FFMPeg (anbefalet) PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=Hukommelsesstyring er ikke tilgĉngelig, nċr du benytter 'Web Start'. PrefsDialog.Dialog.WebStart.Title='Web Start'-tilstand @@ -740,9 +740,9 @@ PrefsDialog.Upgrades.Weekly=Ugentligt PrefsDialog.Upgrades.Monthly=Mċnedligt PrefsDialog.Upgrades.Never=Aldrig PrefsDialog.Button.CheckForUpgrade=Tjek nu -PrefsDialog.Xuggle.Speed.BorderTitle=Video Playback -PrefsDialog.Xuggle.Slow=Udjĉvnet (kan vĉre langsom) -PrefsDialog.Xuggle.Fast=Hurtig (kan vĉre hakkende) +PrefsDialog.FFMPeg.Speed.BorderTitle=Video Playback +PrefsDialog.FFMPeg.Slow=Udjĉvnet (kan vĉre langsom) +PrefsDialog.FFMPeg.Fast=Hurtig (kan vĉre hakkende) PrefsDialog.CalibrationTool.BorderTitle=Standardkaliberingsvĉrktĝj Protractor.Name=Vinkelmċler Protractor.New.Name=vinkelmċler @@ -822,22 +822,22 @@ TMenuBar.Menu.MeasuringTools=M TMenuBar.Menu.AngleUnits=Vinkelenheder TMenuBar.MenuItem.Degrees=Grader TMenuBar.MenuItem.Radians=Radianer -Tracker.Dialog.NoXuggle.Title=Xuggle blev ikke fundet -Tracker.Dialog.NoXuggle.Message1=Xuggle (platformsuafhĉngig videomotor) er ikke installeret. -Tracker.Dialog.NoXuggle.Message2=Download Xuggle fra http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=Om Xuggle... -Tracker.Dialog.AboutXuggle.Title=Om Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=Xuggle version -Tracker.Dialog.AboutXuggle.Message.Home=Xuggle home: -Tracker.Dialog.AboutXuggle.Message.Path=Xuggle sti: +Tracker.Dialog.NoFFMPeg.Title=FFMPeg blev ikke fundet +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (platformsuafhĉngig videomotor) er ikke installeret. +Tracker.Dialog.NoFFMPeg.Message2=Download FFMPeg fra http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=Om FFMPeg... +Tracker.Dialog.AboutFFMPeg.Title=Om FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=FFMPeg version +Tracker.Dialog.AboutFFMPeg.Message.Home=FFMPeg home: +Tracker.Dialog.AboutFFMPeg.Message.Path=FFMPeg sti: Tracker.Dialog.NoVideoEngine.Message1=Ingen videomotor blev fundet! Uden en sċdan kan Tracker Tracker.Dialog.NoVideoEngine.Message2=kun ċbne billeder, billedsekvenser og animerede gifs. -Tracker.Dialog.NoVideoEngine.Message3=For at installere Xuggle, som er Tracker's foretrukne videomotor pċ +Tracker.Dialog.NoVideoEngine.Message3=For at installere FFMPeg, som er Tracker's foretrukne videomotor pċ Tracker.Dialog.NoVideoEngine.Message4=alle platforme, skal du downloade den seneste version af Tracker fra Tracker.Dialog.NoVideoEngine.Title=Mangler videomotor -Tracker.Dialog.NoXuggle.Message1=Xuggle, Tracker's foretrukne videomotor er endnu ikke installeret. -Tracker.Dialog.NoXuggle.Message2=For at installere Xuggle skal du downloade den seneste version af Tracker fra -Tracker.Dialog.NoXuggle.Title=Mangler Xuggle +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg, Tracker's foretrukne videomotor er endnu ikke installeret. +Tracker.Dialog.NoFFMPeg.Message2=For at installere FFMPeg skal du downloade den seneste version af Tracker fra +Tracker.Dialog.NoFFMPeg.Title=Mangler FFMPeg Tracker.About.DefaultLocale=Standardsprog Tracker.About.CurrentLanguage=Sprog Tracker.Dialog.InsufficientMemory.Title=Utilstrĉkkelig hukommelse @@ -883,7 +883,7 @@ TTrackBar.Memory.Menu.SetSize=Indstil hukommelsest TTrackBar.Button.Version=Tilgĉngelig nu: version TTrackBar.Popup.MenuItem.Upgrade=Opgrader nu... TTrackBar.Popup.MenuItem.Ignore=Ignorer -XuggleVideo.MenuItem.SmoothPlay=Jĉvn afspilning (kan vĉre langsom) +FFMPegVideo.MenuItem.SmoothPlay=Jĉvn afspilning (kan vĉre langsom) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=Kalibreringspind @@ -912,13 +912,13 @@ WorldTView.Button.World=Omverden # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=Advarsler PrefsDialog.Checkbox.WarnIfNoEngine=Ingen video-motor -PrefsDialog.Checkbox.WarnIfXuggleError=Ikke-fatale Xuggle-fejl +PrefsDialog.Checkbox.WarnIfFFMPegError=Ikke-fatale FFMPeg-fejl PropertiesDialog.Title=Egenskaber PropertiesDialog.Label.Author=Forfatter PropertiesDialog.Label.Contact=Kontakt TActions.Action.Properties=Egenskaber... TActions.Action.OpenBrowser=Ċbn bibioteks-browser... -TFrame.Progress.Xuggle=Xuggle loading frame +TFrame.Progress.FFMPeg=FFMPeg loading frame TFrame.Progress.ClickToCancel=(klik for at afbryde) TFrame.Dialog.StalledVideo.Title=Fejl ved hentning af video TFrame.Dialog.StalledVideo.Message0=Videoen standsede under hentning. Dette kan vĉre midlertidigt. @@ -931,12 +931,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=Stop TFrame.Dialog.StalledVideo.Button.Wait=Vent Tracker.Dialog.NoVideoEngine.Checkbox=Vis ikke dette igen TrackerIO.ZipFileFilter.Description=ZIP-filer -TrackerIO.Dialog.ErrorFFMPEG.Message1=Xuggle oplevede fĝlgende fejl i forbindelse med ċbning af denne video: +TrackerIO.Dialog.ErrorFFMPEG.Message1=FFMPeg oplevede fĝlgende fejl i forbindelse med ċbning af denne video: TrackerIO.Dialog.ErrorFFMPEG.Message2=Ikke alle fejl er fatale. For en fuldstĉndig fejlliste vĉlg Hjĉlp|Besked-log. -TrackerIO.Dialog.ErrorFFMPEG.Message3=Hvis Xuggle fejler, sċ kan du muligvis ċbne videoen med QuickTime. +TrackerIO.Dialog.ErrorFFMPEG.Message3=Hvis FFMPeg fejler, sċ kan du muligvis ċbne videoen med QuickTime. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Bemĉrk: Pċ Mac OSX krĉver dette, at Tracker kĝrer i en 32-bit Java VM. -TrackerIO.Dialog.ErrorFFMPEG.Title=Xuggle-fejl -TrackerIO.ErrorFFMPEG.LogMessage=For flere detaljer, sĉt Xuggle-advarsler til i indstillingsvinduet (Rediger|Indstillinger). +TrackerIO.Dialog.ErrorFFMPEG.Title=FFMPeg-fejl +TrackerIO.ErrorFFMPEG.LogMessage=For flere detaljer, sĉt FFMPeg-advarsler til i indstillingsvinduet (Rediger|Indstillinger). TToolBar.Button.OpenBrowser.Tooltip=Ċbn OSP's digitale biblioteks-browser # Additions by Doug Brown 2011-07-20 @@ -1193,17 +1193,17 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=Variabel frame-varighed PrefsDialog.Button.NoEngine=Ingen PrefsDialog.Dialog.SwitchToQT.Message=Et skift til QuickTime ĉndrer ogsċ Java VM til 32-bit. -PrefsDialog.Dialog.SwitchToXuggle32.Message=Et skift til Xuggle ĉndrer ogsċ Java VM til 32-bit. -PrefsDialog.Dialog.SwitchToXuggle64.Message=Et skift til Xuggle ĉndrer ogsċ Java VM til 64-bit. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=Et skift til FFMPeg ĉndrer ogsċ Java VM til 32-bit. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=Et skift til FFMPeg ĉndrer ogsċ Java VM til 64-bit. PrefsDialog.Dialog.SwitchVM.Title=Java VM ĉndret PrefsDialog.Dialog.SwitchTo32.Message=Et skift til en 32-bit Java VM ĉndrer ogsċ videomotoren til QuickTime. -PrefsDialog.Dialog.SwitchTo64.Message=Et skift til en 64-bit Java VM ĉndrer ogsċ videomotoren til Xuggle. +PrefsDialog.Dialog.SwitchTo64.Message=Et skift til en 64-bit Java VM ĉndrer ogsċ videomotoren til FFMPeg. PrefsDialog.Dialog.SwitchEngine.Title=Videomotor ĉndret PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=Ingen videomotor er installeret for en 64-bit Java VM. Du vil PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=stadig have mulighed for at ċbne billeder (JPEG, PNG) og animerede GIFs. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Er du sikker pċ, at du vil skifte til en 64-bit VM? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=Ingen 64-bit videomotor -PrefsDialog.Dialog.No32bitVMXuggle.Message=En 32-bit Java VM skal installeres fĝr Xuggle kan benyttes. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=En 32-bit Java VM skal installeres fĝr FFMPeg kan benyttes. PrefsDialog.Dialog.No32bitVMQT.Message=En 32-bit Java VM skal installeres fĝr QuickTime kan benyttes. PrefsDialog.Dialog.No32bitVM.Message=For mere information, se Tracker-hjĉlp: Installation. PrefsDialog.Dialog.No32bitVM.Title=32-bit VM pċkrĉvet @@ -1219,10 +1219,10 @@ Tracker.Dialog.Button.RelaunchNow=Ja, genstart nu Tracker.Dialog.Button.ShowPrefs=Nej, men vis indstillinger Tracker.Dialog.Button.ContinueWithoutEngine=Nej, fortsĉt uden video Tracker.Dialog.EngineProblems.Message1=En eller flere videomotorer er installeret, men de virker ikke. -Tracker.Dialog.EngineProblems.Message2=For mere information se Hjĉlp|Diagnose|Om Xuggle eller QuickTime. -Tracker.Dialog.ReplaceXuggle.Message1=Vi anbefaler, at du erstatter din nuvĉrende Xuggle videomotor -Tracker.Dialog.ReplaceXuggle.Message2=med Xuggle version 3.4 ved at geninstallere Tracker (version 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=eller senere) og vĉlge Xuggle i installationsmulighederne. +Tracker.Dialog.EngineProblems.Message2=For mere information se Hjĉlp|Diagnose|Om FFMPeg eller QuickTime. +Tracker.Dialog.ReplaceFFMPeg.Message1=Vi anbefaler, at du erstatter din nuvĉrende FFMPeg videomotor +Tracker.Dialog.ReplaceFFMPeg.Message2=med FFMPeg version 3.4 ved at geninstallere Tracker (version 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=eller senere) og vĉlge FFMPeg i installationsmulighederne. TrackerIO.Dialog.DurationIsConstant.Message=Alle frame-varigheder er lige store (konstant fps). TrackerIO.ZIPResourceFilter.Description=Tracker ZIP Fil (.trz) TToolbar.Button.Desktop.Tooltip=Vis associerede HTML- og/eller PDF-dokumenter @@ -1288,7 +1288,7 @@ TableTrackView.Dialog.NameColumn.Title=Tekstkolonne TToolBar.MenuItem.StretchOff=Nulstil # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Xuggle-Version +PrefsDialog.Checkbox.WarnFFMPegVersion=FFMPeg-Version PrefsDialog.Checkbox.WarnCopyFailed=Videomotor-filkopieringsfejl Tracker.Dialog.FailedToCopy.Title=Filkopieringsfejl Velocity.Dialog.Color.Title=Vĉlg lodret farve diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_de.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_de.properties index 23aaf46c..39f67f3a 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_de.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_de.properties @@ -722,7 +722,7 @@ PrefsDialog.Checkbox.DefaultSize=Standard verwenden PrefsDialog.Checkbox.HintsOn=Zeige Hinweise PrefsDialog.Tab.Video.Title=Video PrefsDialog.VideoPref.BorderTitle=Video Engine -PrefsDialog.Button.Xuggle=Xuggle +PrefsDialog.Button.FFMPeg=FFMPeg PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=RAM-Management ist nicht möglich mit Web-Start. PrefsDialog.Dialog.WebStart.Title=Web-Start Modus @@ -737,9 +737,9 @@ PrefsDialog.Upgrades.Weekly=w PrefsDialog.Upgrades.Monthly=monatlich PrefsDialog.Upgrades.Never=nie PrefsDialog.Button.CheckForUpgrade=Jetzt suchen -PrefsDialog.Xuggle.Speed.BorderTitle=Abspielen des Videos -PrefsDialog.Xuggle.Slow=Ruckelfrei (möglicherweise langsam) -PrefsDialog.Xuggle.Fast=Schnell (möglicherweise ruckelnd) +PrefsDialog.FFMPeg.Speed.BorderTitle=Abspielen des Videos +PrefsDialog.FFMPeg.Slow=Ruckelfrei (möglicherweise langsam) +PrefsDialog.FFMPeg.Fast=Schnell (möglicherweise ruckelnd) PrefsDialog.CalibrationTool.BorderTitle=Standard Kalibrierungswerkzeug Protractor.Name=Winkelmesser Protractor.New.Name=Winkelmesser @@ -819,22 +819,22 @@ TMenuBar.Menu.MeasuringTools=Ma TMenuBar.Menu.AngleUnits=Winkeleinheiten TMenuBar.MenuItem.Degrees=Grad TMenuBar.MenuItem.Radians=Bogenmaß -Tracker.Dialog.NoXuggle.Title=Xuggle nicht gefunden -Tracker.Dialog.NoXuggle.Message1=Xuggle (betriebssytemunabhängige Video Engine) nicht installiert -Tracker.Dialog.NoXuggle.Message2=Laden Sie Xuggle von http://www.xuggle.com/xuggler/downloads/ herunter. -Tracker.Action.AboutXuggle=Über Xuggle... -Tracker.Dialog.AboutXuggle.Title=Über Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=Xuggle Version -Tracker.Dialog.AboutXuggle.Message.Home=Xuggle home: -Tracker.Dialog.AboutXuggle.Message.Path=Xuggle Pfad: +Tracker.Dialog.NoFFMPeg.Title=FFMPeg nicht gefunden +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (betriebssytemunabhängige Video Engine) nicht installiert +Tracker.Dialog.NoFFMPeg.Message2=Laden Sie FFMPeg von http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=Über FFMPeg... +Tracker.Dialog.AboutFFMPeg.Title=Über FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=FFMPeg Version +Tracker.Dialog.AboutFFMPeg.Message.Home=FFMPeg home: +Tracker.Dialog.AboutFFMPeg.Message.Path=FFMPeg Pfad: Tracker.Dialog.NoVideoEngine.Message1=Keine Video Engine gefunden! Ohne Video Engine kann Tracker Tracker.Dialog.NoVideoEngine.Message2=nur Bilder, Bildfolgen oder animierte GIFs öffnen. -Tracker.Dialog.NoVideoEngine.Message3=Um Xuggle, Tracker's bevorzugte Video Engine, zu installieren, +Tracker.Dialog.NoVideoEngine.Message3=Um FFMPeg, Tracker's bevorzugte Video Engine, zu installieren, Tracker.Dialog.NoVideoEngine.Message4=laden Sie die die neueste Trackerversion herunter von: Tracker.Dialog.NoVideoEngine.Title=Fehlende Video Engine -Tracker.Dialog.NoXuggle.Message1=Xuggle, Tracker's bevorzugte Video Engine, ist nicht installiert. -Tracker.Dialog.NoXuggle.Message2=Um Xuggle zu installieren, laden Sie die die neueste Trackerversion herunter von: -Tracker.Dialog.NoXuggle.Title=Fehlendes Xuggle +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg, Tracker's bevorzugte Video Engine, ist nicht installiert. +Tracker.Dialog.NoFFMPeg.Message2=Um FFMPeg zu installieren, laden Sie die die neueste Trackerversion herunter von: +Tracker.Dialog.NoFFMPeg.Title=Fehlendes FFMPeg Tracker.About.DefaultLocale=Default locale Tracker.About.CurrentLanguage=Sprache Tracker.Dialog.InsufficientMemory.Title=Unzureichendes RAM @@ -880,7 +880,7 @@ TTrackBar.Memory.Menu.SetSize=Setzen der RAM-Gr TTrackBar.Button.Version=Jetzt verfügbar: Version TTrackBar.Popup.MenuItem.Upgrade=Jetzt neue Version laden... TTrackBar.Popup.MenuItem.Ignore=Ignorieren -XuggleVideo.MenuItem.SmoothPlay=ruckelfreies Abspielen +FFMPegVideo.MenuItem.SmoothPlay=ruckelfreies Abspielen # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=Kalibrierungsmaßband @@ -908,13 +908,13 @@ WorldTView.Button.World=World # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=Warnungen PrefsDialog.Checkbox.WarnIfNoEngine=Keine Video Engine -PrefsDialog.Checkbox.WarnIfXuggleError=Xuggle-Fehler +PrefsDialog.Checkbox.WarnIfFFMPegError=FFMPeg-Fehler PropertiesDialog.Title=Eigenschaften PropertiesDialog.Label.Author=Author PropertiesDialog.Label.Contact=Kontakt TActions.Action.Properties=Eigenschaften... TActions.Action.OpenBrowser=Öffne Library Browser... -TFrame.Progress.Xuggle=Xuggle loading frame +TFrame.Progress.FFMPeg=FFMPeg loading frame TFrame.Progress.ClickToCancel=(Zum Abrechen Klicken) TFrame.Dialog.StalledVideo.Title=Fehler beim Laden des Videos TFrame.Dialog.StalledVideo.Message0=Es gibt Probleme/Verzögerungen beim Laden des Videos. @@ -927,12 +927,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=Stopp TFrame.Dialog.StalledVideo.Button.Wait=Warten Tracker.Dialog.NoVideoEngine.Checkbox=Nicht wieder anzeigen TrackerIO.ZipFileFilter.Description=ZIP Archive -TrackerIO.Dialog.ErrorFFMPEG.Message1=Beim Öffnen dieses Videos mit Xuggle gibt es folgenden Fehler: +TrackerIO.Dialog.ErrorFFMPEG.Message1=Beim Öffnen dieses Videos mit FFMPeg gibt es folgenden Fehler: TrackerIO.Dialog.ErrorFFMPEG.Message2=Nicht alle Fehler sind fatal. Die komplette Fehlermeldung finden Sie unter Help|Message Log. -TrackerIO.Dialog.ErrorFFMPEG.Message3=Falls Xuggle versagt, klappt es möglicherweise mit QuickTime. +TrackerIO.Dialog.ErrorFFMPEG.Message3=Falls FFMPeg versagt, klappt es möglicherweise mit QuickTime. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Bemerkung: Unter Mac OSX muss Tracker dann in einer 32-bit Java VM laufen. -TrackerIO.Dialog.ErrorFFMPEG.Title=Xuggle Fehler -TrackerIO.ErrorFFMPEG.LogMessage=Für mehr Details stellen Sie die Warnungen für Xuggle in Bearbeiten|Voreinstellungen ein. +TrackerIO.Dialog.ErrorFFMPEG.Title=FFMPeg Fehler +TrackerIO.ErrorFFMPEG.LogMessage=Für mehr Details stellen Sie die Warnungen für FFMPeg in Bearbeiten|Voreinstellungen ein. TToolBar.Button.OpenBrowser.Tooltip=Öffnen des OSP Digital Library Browser # Additions by Doug Brown 2011-07-04 @@ -1202,17 +1202,17 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=schwankende Bildrate PrefsDialog.Button.NoEngine=Keine PrefsDialog.Dialog.SwitchToQT.Message=Der Wechsel zu QuickTime bedeutet auch einen Wechsel der Java VM zu 32-bit. -PrefsDialog.Dialog.SwitchToXuggle32.Message=Der Wechsel zu Xuggle bedeutet auch einen Wechsel der Java VM zu 32-bit. -PrefsDialog.Dialog.SwitchToXuggle64.Message=Der Wechsel zu Xuggle bedeutet auch einen Wechsel der Java VM zu 64-bit. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=Der Wechsel zu FFMPeg bedeutet auch einen Wechsel der Java VM zu 32-bit. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=Der Wechsel zu FFMPeg bedeutet auch einen Wechsel der Java VM zu 64-bit. PrefsDialog.Dialog.SwitchVM.Title=Java VM Wechsel PrefsDialog.Dialog.SwitchTo32.Message=Der Wechsel zu einer 32-bit Java VM bedeutet auch einen Wechsel der Video Engine zu QuickTime. -PrefsDialog.Dialog.SwitchTo64.Message=Der Wechsel zu einer 64-bit Java VM bedeutet auch einen Wechsel der Video Engine zu Xuggle. +PrefsDialog.Dialog.SwitchTo64.Message=Der Wechsel zu einer 64-bit Java VM bedeutet auch einen Wechsel der Video Engine zu FFMPeg. PrefsDialog.Dialog.SwitchEngine.Title=Video Engine gewechselt PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=Für eine 64-bit Java VM ist keine Video Engine verfügbar. PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=Sie können nur noch Bilder (JPEG, PNG) und animierte GIFs laden. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Wollen Sie wirklich auf eine 64-bit VM wechseln? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=Keine 64-bit Video Engine -PrefsDialog.Dialog.No32bitVMXuggle.Message=Bevor Xuggle verwendet werden kann, muss eine 32-bit Java VM installiert werden. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=Bevor FFMPeg verwendet werden kann, muss eine 32-bit Java VM installiert werden. PrefsDialog.Dialog.No32bitVMQT.Message=Bevor QuickTime verwendet werden kann, muss eine 32-bit Java VM installiert werden. PrefsDialog.Dialog.No32bitVM.Message=Weitere Informationen unter Tracker Hilfe: Installation. PrefsDialog.Dialog.No32bitVM.Title=32-bit VM benötigt @@ -1228,10 +1228,10 @@ Tracker.Dialog.Button.RelaunchNow=Ja, jetzt neu starten Tracker.Dialog.Button.ShowPrefs=Nein, aber Einstellungen anzeigen Tracker.Dialog.Button.ContinueWithoutEngine=Nein, ohne Video weitermachen Tracker.Dialog.EngineProblems.Message1=Eine oder mehrere installierte Video Engines funktionieren nicht. -Tracker.Dialog.EngineProblems.Message2=Weitere Informationen unter Hilfe|Diagnostik|About Xuggle oder QuickTime. -Tracker.Dialog.ReplaceXuggle.Message1=Wir empfehlen, dass Sie ihre aktuelle Xuggle Video Engine -Tracker.Dialog.ReplaceXuggle.Message2=Durch Xuggle Version 3.4 ersetzen. Re-installieren Sie Tracker (Version 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=oder höher) und wählen Sie Xuggle in den Installationsoptionen. +Tracker.Dialog.EngineProblems.Message2=Weitere Informationen unter Hilfe|Diagnostik|About FFMPeg oder QuickTime. +Tracker.Dialog.ReplaceFFMPeg.Message1=Wir empfehlen, dass Sie ihre aktuelle FFMPeg Video Engine +Tracker.Dialog.ReplaceFFMPeg.Message2=Durch FFMPeg Version 3.4 ersetzen. Re-installieren Sie Tracker (Version 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=oder höher) und wählen Sie FFMPeg in den Installationsoptionen. TrackerIO.Dialog.DurationIsConstant.Message=Die Bildrate ist konstant. TrackerIO.ZIPResourceFilter.Description=Tracker ZIP Datei (.trz) TToolbar.Button.Desktop.Tooltip=Zeige assoziierte HTML und/oder PDF Dokumente @@ -1297,7 +1297,7 @@ TableTrackView.Dialog.NameColumn.Title=Textspalte TToolBar.MenuItem.StretchOff=Reset # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Xuggle Version +PrefsDialog.Checkbox.WarnFFMPegVersion=FFMPeg Version PrefsDialog.Checkbox.WarnCopyFailed=Video Engine Dateikopierfehler TrackerStarter.Warning.FailedToCopy1=Einige Video Engine Dateien konnten nicht automatisch kopiert werden. TrackerStarter.Warning.FailedToCopy2=Kopieren Sie die Dateien manuell, um die Funktion der Video Engine zu garantieren. diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_el_GR.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_el_GR.properties index 18702220..ef1ca603 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_el_GR.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_el_GR.properties @@ -720,7 +720,7 @@ PrefsDialog.Checkbox.DefaultSize=\u03a7\u03c1\u03ae\u03c3\u03b7 \u03c0\u03c1\u03 PrefsDialog.Checkbox.HintsOn=\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c5\u03c0\u03bf\u03b4\u03b5\u03af\u03be\u03b5\u03c9\u03bd \u03c9\u03c2 \u03c0\u03c1\u03bf\u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae PrefsDialog.Tab.Video.Title=\u0392\u03af\u03bd\u03c4\u03b5\u03bf PrefsDialog.VideoPref.BorderTitle=\u039c\u03b7\u03c7\u03b1\u03bd\u03ae \u03b2\u03af\u03bd\u03c4\u03b5\u03bf -PrefsDialog.Button.Xuggle=Xuggle (\u03c3\u03c5\u03c3\u03c4\u03ae\u03bd\u03b5\u03c4\u03b1\u03b9) +PrefsDialog.Button.FFMPeg=FFMPeg (\u03c3\u03c5\u03c3\u03c4\u03ae\u03bd\u03b5\u03c4\u03b1\u03b9) PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=\u039f \u03b4\u03b9\u03b1\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ae\u03c2 \u03bc\u03bd\u03ae\u03bc\u03b7\u03c2 \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03bf\u03c2 \u03cc\u03c4\u03b1\u03bd \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b1\u03b9 \u03bf Web Start. PrefsDialog.Dialog.WebStart.Title=\u039a\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 Web Start @@ -735,9 +735,9 @@ PrefsDialog.Upgrades.Weekly=\u0395\u03b2\u03b4\u03bf\u03bc\u03b1\u03b4\u03b9\u03 PrefsDialog.Upgrades.Monthly=\u039c\u03b7\u03bd\u03b9\u03b1\u03af\u03b1 PrefsDialog.Upgrades.Never=\u03a0\u03bf\u03c4\u03ad PrefsDialog.Button.CheckForUpgrade=\u0388\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 \u03c4\u03ce\u03c1\u03b1 -PrefsDialog.Xuggle.Speed.BorderTitle=\u0395\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf \u03b1\u03c0\u03cc Xuggle -PrefsDialog.Xuggle.Slow=\u03a3\u03c4\u03c1\u03c9\u03c4\u03ae (\u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b1\u03c1\u03b3\u03ae) -PrefsDialog.Xuggle.Fast=\u0393\u03c1\u03ae\u03b3\u03bf\u03c1\u03b7 (\u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03bc\u03b7 \u03bf\u03bc\u03b1\u03bb\u03ae) +PrefsDialog.FFMPeg.Speed.BorderTitle=\u0395\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf \u03b1\u03c0\u03cc FFMPeg +PrefsDialog.FFMPeg.Slow=\u03a3\u03c4\u03c1\u03c9\u03c4\u03ae (\u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b1\u03c1\u03b3\u03ae) +PrefsDialog.FFMPeg.Fast=\u0393\u03c1\u03ae\u03b3\u03bf\u03c1\u03b7 (\u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03bc\u03b7 \u03bf\u03bc\u03b1\u03bb\u03ae) PrefsDialog.CalibrationTool.BorderTitle=\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03bf \u03b2\u03b1\u03b8\u03bc\u03bf\u03bd\u03cc\u03bc\u03b7\u03c3\u03b7\u03c2 Protractor.Name=\u039c\u03bf\u03b9\u03c1\u03bf\u03b3\u03bd\u03c9\u03bc\u03cc\u03bd\u03b9\u03bf Protractor.New.Name=\u03bc\u03bf\u03b9\u03c1\u03bf\u03b3\u03bd\u03c9\u03bc\u03cc\u03bd\u03b9\u03bf @@ -817,23 +817,23 @@ TMenuBar.Menu.MeasuringTools=\u0395\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03b1 \u TMenuBar.Menu.AngleUnits=\u039c\u03bf\u03bd\u03ac\u03b4\u03b5\u03c2 \u03b3\u03c9\u03bd\u03af\u03b1\u03c2 TMenuBar.MenuItem.Degrees=\u039c\u03bf\u03af\u03c1\u03b5\u03c2 TMenuBar.MenuItem.Radians=\u0391\u03ba\u03c4\u03af\u03bd\u03b9\u03b1 -Tracker.Dialog.NoXuggle.Title=\u03a4\u03bf Xuggle \u03b4\u03b5\u03bd \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b5 -Tracker.Dialog.NoXuggle.Message1=\u03a4\u03bf Xuggle (\u03b1\u03bd\u03b5\u03be\u03ac\u03c1\u03c4\u03b7\u03c4\u03bf\u03c2 \u03c0\u03bb\u03b1\u03c4\u03c6\u03cc\u03c1\u03bc\u03b1\u03c2 \u03b5\u03ba\u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae\u03c2 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf) \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03b3\u03ba\u03b1\u03c4\u03b5\u03c3\u03c4\u03b7\u03bc\u03ad\u03bd\u03bf. -Tracker.Dialog.NoXuggle.Message2=\u039a\u03b1\u03c4\u03b5\u03b2\u03ac\u03c3\u03c4\u03b5 \u03c4\u03bf Xuggle \u03b1\u03c0\u03cc http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=\u0393\u03b9\u03b1 \u03c4\u03bf Xuggle... -Tracker.Dialog.AboutXuggle.Title=\u0393\u03b9\u03b1 \u03c4\u03bf Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=\u0388\u03ba\u03b4\u03bf\u03c3\u03b7 Xuggle -Tracker.Dialog.AboutXuggle.Message.Home=\u0394\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 Xuggle: -Tracker.Dialog.AboutXuggle.Message.Path=\u0394\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae \u03b3\u03b9\u03b1 \u03c4\u03bf Xuggle jar: -Tracker.Dialog.NoVideoEngine.Message1=\u039f \u03b5\u03ba\u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae\u03c2 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf Xuggle \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03b3\u03ba\u03b1\u03c4\u03b5\u03c3\u03c4\u03b7\u03bc\u03ad\u03bd\u03bf\u03c2, \u03b5\u03c4\u03c3\u03b9 \u03c4\u03bf Tracker +Tracker.Dialog.NoFFMPeg.Title=\u03a4\u03bf FFMPeg \u03b4\u03b5\u03bd \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b5 +Tracker.Dialog.NoFFMPeg.Message1=\u03a4\u03bf FFMPeg (\u03b1\u03bd\u03b5\u03be\u03ac\u03c1\u03c4\u03b7\u03c4\u03bf\u03c2 \u03c0\u03bb\u03b1\u03c4\u03c6\u03cc\u03c1\u03bc\u03b1\u03c2 \u03b5\u03ba\u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae\u03c2 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf) \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03b3\u03ba\u03b1\u03c4\u03b5\u03c3\u03c4\u03b7\u03bc\u03ad\u03bd\u03bf. +Tracker.Dialog.NoFFMPeg.Message2=\u039a\u03b1\u03c4\u03b5\u03b2\u03ac\u03c3\u03c4\u03b5 \u03c4\u03bf FFMPeg \u03b1\u03c0\u03cc http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=\u0393\u03b9\u03b1 \u03c4\u03bf FFMPeg... +Tracker.Dialog.AboutFFMPeg.Title=\u0393\u03b9\u03b1 \u03c4\u03bf FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=\u0388\u03ba\u03b4\u03bf\u03c3\u03b7 FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Home=\u0394\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 FFMPeg: +Tracker.Dialog.AboutFFMPeg.Message.Path=\u0394\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae \u03b3\u03b9\u03b1 \u03c4\u03bf FFMPeg jar: +Tracker.Dialog.NoVideoEngine.Message1=\u039f \u03b5\u03ba\u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae\u03c2 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf FFMPeg \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03b3\u03ba\u03b1\u03c4\u03b5\u03c3\u03c4\u03b7\u03bc\u03ad\u03bd\u03bf\u03c2, \u03b5\u03c4\u03c3\u03b9 \u03c4\u03bf Tracker Tracker.Dialog.NoVideoEngine.Message2=\u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b1\u03bd\u03bf\u03af\u03be\u03b5\u03b9 \u03bc\u03cc\u03bd\u03bf \u03b5\u03b9\u03ba\u03cc\u03bd\u03b5\u03c2 (JPEG, PNG) \u03ba\u03b1\u03b9 \u03ba\u03b9\u03bd\u03bf\u03cd\u03bc\u03b5\u03bd\u03b5\u03c2 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b5\u03c2 GIF. -Tracker.Dialog.NoVideoEngine.Message3=\u0393\u03b9\u03b1 \u03bd\u03b1 \u03b5\u03b3\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf Xuggle, \u03ba\u03b1\u03c4\u03b5\u03b2\u03ac\u03c3\u03c4\u03b5 \u03c4\u03bf\u03bd \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf \u03b5\u03b3\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03ac\u03c4\u03b7 \u03c4\u03bf\u03c5 Tracker \u03b1\u03c0\u03cc +Tracker.Dialog.NoVideoEngine.Message3=\u0393\u03b9\u03b1 \u03bd\u03b1 \u03b5\u03b3\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf FFMPeg, \u03ba\u03b1\u03c4\u03b5\u03b2\u03ac\u03c3\u03c4\u03b5 \u03c4\u03bf\u03bd \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf \u03b5\u03b3\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03ac\u03c4\u03b7 \u03c4\u03bf\u03c5 Tracker \u03b1\u03c0\u03cc Tracker.Dialog.NoVideoEngine.Title=\u0394\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9 \u03b5\u03ba\u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae\u03c2 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf -Tracker.Dialog.NoXuggle.Message1=\u03a4\u03bf Xuggle \u03b4\u03b5\u03bd \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03b5\u03af \u03c3\u03c9\u03c3\u03c4\u03ac. \u0392\u03b5\u03b2\u03b1\u03b9\u03c9\u03b8\u03b5\u03af\u03c4\u03b5 \u03cc\u03c4\u03b9 \u03c4\u03b1 \u03b1\u03c0\u03b1\u03b9\u03c4\u03bf\u03cd\u03bc\u03b5\u03bd\u03b1 -Tracker.Dialog.NoXuggle.Message2=\u03b1\u03c1\u03c7\u03b5\u03af\u03b1 xuggle jar \u03b5\u03af\u03bd\u03b1\u03b9 \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03c4\u03bf\u03c5 Tracker. \u0393\u03b9\u03b1 \u03bb\u03b5\u03c0\u03c4\u03bf\u03bc\u03ad\u03c1\u03b5\u03b9\u03b5\u03c2, -Tracker.Dialog.NoXuggle.Message3=\u03b4\u03b5\u03af\u03c4\u03b5 \u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf Tracker_README.txt \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03c4\u03bf\u03c5 Tracker. -Tracker.Dialog.NoXuggle.Message4=\u0393\u03b9\u03b1 \u03bd\u03b1 \u03b5\u03b3\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf Xuggle, \u03ba\u03b1\u03c4\u03b5\u03b2\u03ac\u03c3\u03c4\u03b5 \u03c4\u03bf\u03bd \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf \u03b5\u03b3\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03ac\u03c4\u03b7 \u03c4\u03bf\u03c5 Tracker \u03b1\u03c0\u03cc -Tracker.Dialog.NoXuggle.Title=\u03a4\u03bf Xuggle \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03bf +Tracker.Dialog.NoFFMPeg.Message1=\u03a4\u03bf FFMPeg \u03b4\u03b5\u03bd \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03b5\u03af \u03c3\u03c9\u03c3\u03c4\u03ac. \u0392\u03b5\u03b2\u03b1\u03b9\u03c9\u03b8\u03b5\u03af\u03c4\u03b5 \u03cc\u03c4\u03b9 \u03c4\u03b1 \u03b1\u03c0\u03b1\u03b9\u03c4\u03bf\u03cd\u03bc\u03b5\u03bd\u03b1 +Tracker.Dialog.NoFFMPeg.Message2=\u03b1\u03c1\u03c7\u03b5\u03af\u03b1 ffmpeg jar \u03b5\u03af\u03bd\u03b1\u03b9 \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03c4\u03bf\u03c5 Tracker. \u0393\u03b9\u03b1 \u03bb\u03b5\u03c0\u03c4\u03bf\u03bc\u03ad\u03c1\u03b5\u03b9\u03b5\u03c2, +Tracker.Dialog.NoFFMPeg.Message3=\u03b4\u03b5\u03af\u03c4\u03b5 \u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf Tracker_README.txt \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03c4\u03bf\u03c5 Tracker. +Tracker.Dialog.NoFFMPeg.Message4=\u0393\u03b9\u03b1 \u03bd\u03b1 \u03b5\u03b3\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf FFMPeg, \u03ba\u03b1\u03c4\u03b5\u03b2\u03ac\u03c3\u03c4\u03b5 \u03c4\u03bf\u03bd \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf \u03b5\u03b3\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03ac\u03c4\u03b7 \u03c4\u03bf\u03c5 Tracker \u03b1\u03c0\u03cc +Tracker.Dialog.NoFFMPeg.Title=\u03a4\u03bf FFMPeg \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03bf Tracker.About.DefaultLocale=\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf \u03c0\u03b5\u03b4\u03af\u03bf Tracker.About.CurrentLanguage=\u0393\u03bb\u03ce\u03c3\u03c3\u03b1 Tracker.Dialog.InsufficientMemory.Title=\u0391\u03bd\u03b5\u03c0\u03b1\u03c1\u03ba\u03ae\u03c2 \u03bc\u03bd\u03ae\u03bc\u03b7 @@ -879,7 +879,7 @@ TTrackBar.Memory.Menu.SetSize=\u039f\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03bc\ TTrackBar.Button.Version=\u0394\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03b7 \u03c4\u03ce\u03c1\u03b1: \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7 TTrackBar.Popup.MenuItem.Upgrade=\u0391\u03bd\u03b1\u03b2\u03ac\u03b8\u03bc\u03b9\u03c3\u03b7 \u03c4\u03ce\u03c1\u03b1... TTrackBar.Popup.MenuItem.Ignore=\u0391\u03b3\u03bd\u03bf\u03ae\u03c3\u03c4\u03b5 -XuggleVideo.MenuItem.SmoothPlay=\u03a3\u03c4\u03c1\u03c9\u03c4\u03ae \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7 (\u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b1\u03c1\u03b3\u03ae) +FFMPegVideo.MenuItem.SmoothPlay=\u03a3\u03c4\u03c1\u03c9\u03c4\u03ae \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7 (\u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b1\u03c1\u03b3\u03ae) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=\u03a4\u03b1\u03b9\u03bd\u03af\u03b1 \u03b2\u03b1\u03b8\u03bc\u03bf\u03bd\u03cc\u03bc\u03b7\u03c3\u03b7\u03c2 @@ -908,13 +908,13 @@ WorldTView.Button.World=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a3\u03c4\ # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=\u03a0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03b9\u03c2 PrefsDialog.Checkbox.WarnIfNoEngine=\u0394\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9 \u03b5\u03ba\u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae\u03c2 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf -PrefsDialog.Checkbox.WarnIfXuggleError=\u039c\u03b7 \u03ba\u03c1\u03af\u03c3\u03b9\u03bc\u03b1 \u03bb\u03ac\u03b8\u03b7 \u03c4\u03bf\u03c5 Xuggle +PrefsDialog.Checkbox.WarnIfFFMPegError=\u039c\u03b7 \u03ba\u03c1\u03af\u03c3\u03b9\u03bc\u03b1 \u03bb\u03ac\u03b8\u03b7 \u03c4\u03bf\u03c5 FFMPeg PropertiesDialog.Title=\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 PropertiesDialog.Label.Author=\u0394\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03bf\u03af PropertiesDialog.Label.Contact=\u0395\u03c0\u03b9\u03ba\u03bf\u03b9\u03bd\u03c9\u03bd\u03af\u03b1 TActions.Action.Properties=\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2... TActions.Action.OpenBrowser=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03a0\u03b5\u03c1\u03b9\u03b7\u03b3\u03b7\u03c4\u03ae \u0392\u03b9\u03b2\u03bb\u03b9\u03bf\u03b8\u03ae\u03ba\u03b7\u03c2... -TFrame.Progress.Xuggle=\u03a4\u03bf Xuggle \u03c6\u03bf\u03c1\u03c4\u03ce\u03bd\u03b5\u03b9 \u03c4\u03bf \u03ba\u03b1\u03c1\u03ad +TFrame.Progress.FFMPeg=\u03a4\u03bf FFMPeg \u03c6\u03bf\u03c1\u03c4\u03ce\u03bd\u03b5\u03b9 \u03c4\u03bf \u03ba\u03b1\u03c1\u03ad TFrame.Progress.ClickToCancel=(\u03ba\u03bb\u03b9\u03ba \u03b3\u03b9\u03b1 \u03b1\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7) TFrame.Dialog.StalledVideo.Title=\u039b\u03ac\u03b8\u03bf\u03c2 \u03c3\u03c4\u03b7 \u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf TFrame.Dialog.StalledVideo.Message0=\u03a4\u03bf \u03b2\u03af\u03bd\u03c4\u03b5\u03bf \u03ad\u03c7\u03b5\u03b9 "\u03ba\u03bf\u03bb\u03bb\u03ae\u03c3\u03b5\u03b9" \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7 \u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7. \u0391\u03c5\u03c4\u03cc \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c0\u03c1\u03bf\u03c3\u03c9\u03c1\u03b9\u03bd\u03cc. @@ -927,12 +927,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=\u03a0\u03b1\u03cd\u03c3\u03b7 TFrame.Dialog.StalledVideo.Button.Wait=\u0391\u03bd\u03b1\u03bc\u03bf\u03bd\u03ae Tracker.Dialog.NoVideoEngine.Checkbox=\u039d\u03b1 \u03bc\u03b7\u03bd \u03b5\u03bc\u03c6\u03b1\u03bd\u03b9\u03c3\u03c4\u03b5\u03af \u03b1\u03c5\u03c4\u03cc \u03be\u03b1\u03bd\u03ac TrackerIO.ZipFileFilter.Description=\u0391\u03c1\u03c7\u03b5\u03af\u03b1 ZIP -TrackerIO.Dialog.ErrorFFMPEG.Message1=\u03a4\u03bf Xuggle \u03b1\u03bd\u03c4\u03b9\u03bc\u03b5\u03c4\u03ce\u03c0\u03b9\u03c3\u03b5 \u03c4\u03bf \u03b5\u03be\u03ae\u03c2 \u03c0\u03c1\u03cc\u03b2\u03bb\u03b7\u03bc\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03bf \u03ac\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf: +TrackerIO.Dialog.ErrorFFMPEG.Message1=\u03a4\u03bf FFMPeg \u03b1\u03bd\u03c4\u03b9\u03bc\u03b5\u03c4\u03ce\u03c0\u03b9\u03c3\u03b5 \u03c4\u03bf \u03b5\u03be\u03ae\u03c2 \u03c0\u03c1\u03cc\u03b2\u03bb\u03b7\u03bc\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03bf \u03ac\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf: TrackerIO.Dialog.ErrorFFMPEG.Message2=\u0394\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03cc\u03bb\u03b1 \u03c4\u03b1 \u03bb\u03ac\u03b8\u03b7 \u03ba\u03c1\u03af\u03c3\u03b9\u03bc\u03b1. \u0393\u03b9\u03b1 \u03c0\u03bb\u03ae\u03c1\u03b7 \u03bc\u03b7\u03bd\u03cd\u03bc\u03b1\u03c4\u03b1 \u03bb\u03b1\u03b8\u03ce\u03bd \u03b5\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1|\u0391\u03c1\u03c7\u03b5\u03af\u03bf \u03bc\u03b7\u03bd\u03c5\u03bc\u03ac\u03c4\u03c9\u03bd. -TrackerIO.Dialog.ErrorFFMPEG.Message3=\u0391\u03bd \u03c4\u03bf Xuggle \u03b1\u03c0\u03bf\u03c4\u03cd\u03c7\u03b5\u03b9 \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03cc \u03c4\u03bf \u03ac\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf \u03bc\u03b5 \u03c4\u03bf QuickTime. +TrackerIO.Dialog.ErrorFFMPEG.Message3=\u0391\u03bd \u03c4\u03bf FFMPeg \u03b1\u03c0\u03bf\u03c4\u03cd\u03c7\u03b5\u03b9 \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03cc \u03c4\u03bf \u03ac\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf \u03bc\u03b5 \u03c4\u03bf QuickTime. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Note: \u03a3\u03b5 Mac OSX \u03b1\u03c5\u03c4\u03cc \u03b1\u03c0\u03b1\u03b9\u03c4\u03b5\u03af \u03c4\u03bf \u03c4\u03c1\u03ad\u03be\u03b9\u03bc\u03bf \u03c4\u03bf\u03c5 Tracker \u03c3\u03b5 32-bit Java VM. -TrackerIO.Dialog.ErrorFFMPEG.Title=\u03bb\u03ac\u03b8\u03bf\u03c2 \u03c4\u03bf\u03c5 Xuggle -TrackerIO.ErrorFFMPEG.LogMessage=\u0393\u03b9\u03b1 \u03c0\u03b9\u03bf \u03c0\u03bf\u03bb\u03bb\u03ad\u03c2 \u03bb\u03b5\u03c0\u03c4\u03bf\u03bc\u03ad\u03c1\u03b5\u03b9\u03b5\u03c2, \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03c0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03b9\u03c2 \u03c4\u03bf\u03c5 Xuggle \u03c3\u03c4\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf \u03a0\u03c1\u03bf\u03c4\u03b9\u03bc\u03ae\u03c3\u03b5\u03c9\u03bd (\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1|\u03a0\u03c1\u03bf\u03c4\u03b9\u03bc\u03ae\u03c3\u03b5\u03b9\u03c2). +TrackerIO.Dialog.ErrorFFMPEG.Title=\u03bb\u03ac\u03b8\u03bf\u03c2 \u03c4\u03bf\u03c5 FFMPeg +TrackerIO.ErrorFFMPEG.LogMessage=\u0393\u03b9\u03b1 \u03c0\u03b9\u03bf \u03c0\u03bf\u03bb\u03bb\u03ad\u03c2 \u03bb\u03b5\u03c0\u03c4\u03bf\u03bc\u03ad\u03c1\u03b5\u03b9\u03b5\u03c2, \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03c0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03b9\u03c2 \u03c4\u03bf\u03c5 FFMPeg \u03c3\u03c4\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf \u03a0\u03c1\u03bf\u03c4\u03b9\u03bc\u03ae\u03c3\u03b5\u03c9\u03bd (\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1|\u03a0\u03c1\u03bf\u03c4\u03b9\u03bc\u03ae\u03c3\u03b5\u03b9\u03c2). TToolBar.Button.OpenBrowser.Tooltip=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03a0\u03b5\u03c1\u03b9\u03b7\u03b3\u03b7\u03c4\u03ae \u03c4\u03b7\u03c2 \u03a8\u03b7\u03c6\u03b9\u03b1\u03ba\u03ae\u03c2 \u0392\u03b9\u03b2\u03bb\u03b9\u03bf\u03b8\u03ae\u03ba\u03b7\u03c2 OSP # Additions by Doug Brown 2011-07-20 @@ -1189,17 +1189,17 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=\u039c\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ae \u03b4\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1 \u03c4\u03c9\u03bd \u03ba\u03b1\u03c1\u03ad PrefsDialog.Button.NoEngine=\u039a\u03b1\u03bd\u03ad\u03bd\u03b1\u03c2 PrefsDialog.Dialog.SwitchToQT.Message=\u0397 \u03bc\u03b5\u03c4\u03ac\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03bf QuickTime \u03b1\u03bb\u03bb\u03ac\u03b6\u03b5\u03b9 \u03b5\u03c0\u03af\u03c3\u03b7\u03c2 \u03ba\u03b1\u03b9 \u03c4\u03b7\u03bd Java VM \u03c3\u03b5 32-bit. -PrefsDialog.Dialog.SwitchToXuggle32.Message=\u0397 \u03bc\u03b5\u03c4\u03ac\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03bf Xuggle \u03b1\u03bb\u03bb\u03ac\u03b6\u03b5\u03b9 \u03b5\u03c0\u03af\u03c3\u03b7\u03c2 \u03ba\u03b1\u03b9 \u03c4\u03b7\u03bd Java VM \u03c3\u03b5 32-bit. -PrefsDialog.Dialog.SwitchToXuggle64.Message=\u0397 \u03bc\u03b5\u03c4\u03ac\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03bf Xuggle \u03b1\u03bb\u03bb\u03ac\u03b6\u03b5\u03b9 \u03b5\u03c0\u03af\u03c3\u03b7\u03c2 \u03ba\u03b1\u03b9 \u03c4\u03b7\u03bd Java VM \u03c3\u03b5 64-bit. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=\u0397 \u03bc\u03b5\u03c4\u03ac\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03bf FFMPeg \u03b1\u03bb\u03bb\u03ac\u03b6\u03b5\u03b9 \u03b5\u03c0\u03af\u03c3\u03b7\u03c2 \u03ba\u03b1\u03b9 \u03c4\u03b7\u03bd Java VM \u03c3\u03b5 32-bit. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=\u0397 \u03bc\u03b5\u03c4\u03ac\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03bf FFMPeg \u03b1\u03bb\u03bb\u03ac\u03b6\u03b5\u03b9 \u03b5\u03c0\u03af\u03c3\u03b7\u03c2 \u03ba\u03b1\u03b9 \u03c4\u03b7\u03bd Java VM \u03c3\u03b5 64-bit. PrefsDialog.Dialog.SwitchVM.Title=\u0397 Java VM \u03ac\u03bb\u03bb\u03b1\u03be\u03b5 PrefsDialog.Dialog.SwitchTo32.Message=\u0397 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03c3\u03b5 32-bit Java VM \u03b1\u03bb\u03bb\u03ac\u03b6\u03b5\u03b9 \u03b5\u03c0\u03af\u03c3\u03b7\u03c2 \u03ba\u03b1\u03b9 \u03c4\u03bf\u03bd \u03b5\u03ba\u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae \u03b2\u03af\u03bd\u03c4\u03b5\u03bf \u03c3\u03b5 QuickTime. -PrefsDialog.Dialog.SwitchTo64.Message=\u0397 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03c3\u03b5 64-bit Java VM \u03b1\u03bb\u03bb\u03ac\u03b6\u03b5\u03b9 \u03b5\u03c0\u03af\u03c3\u03b7\u03c2 \u03ba\u03b1\u03b9 \u03c4\u03bf\u03bd \u03b5\u03ba\u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae \u03b2\u03af\u03bd\u03c4\u03b5\u03bf \u03c3\u03b5 Xuggle. +PrefsDialog.Dialog.SwitchTo64.Message=\u0397 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03c3\u03b5 64-bit Java VM \u03b1\u03bb\u03bb\u03ac\u03b6\u03b5\u03b9 \u03b5\u03c0\u03af\u03c3\u03b7\u03c2 \u03ba\u03b1\u03b9 \u03c4\u03bf\u03bd \u03b5\u03ba\u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae \u03b2\u03af\u03bd\u03c4\u03b5\u03bf \u03c3\u03b5 FFMPeg. PrefsDialog.Dialog.SwitchEngine.Title=\u039f \u03b5\u03ba\u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae\u03c2 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf \u03ad\u03c7\u03b5\u03b9 \u03b1\u03bb\u03bb\u03ac\u03be\u03b5\u03b9 PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=\u0394\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9 \u03b4\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03bf\u03c2 \u03b5\u03ba\u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae\u03c2 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf \u03b3\u03b9\u03b1 64-bit Java VM. \u0398\u03b1 \u03b5\u03af\u03c3\u03c4\u03b5 PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=\u03c3\u03b5 \u03b8\u03ad\u03c3\u03b7 \u03bd\u03b1 \u03b1\u03bd\u03bf\u03af\u03be\u03b5\u03c4\u03b5 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b5\u03c2 (JPEG, PNG) \u03ba\u03b1\u03b9 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b5\u03c2 \u03bc\u03b5 \u03ba\u03af\u03bd\u03b7\u03c3\u03b7 (GIF). PrefsDialog.Dialog.NoEngineIn64bitVM.Question=\u03a3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b1\u03bb\u03bb\u03ac\u03be\u03b5\u03c4\u03b5 \u03c3\u03b5 64-bit VM? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=\u0394\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9 \u03b5\u03ba\u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae\u03c2 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf 64-bit -PrefsDialog.Dialog.No32bitVMXuggle.Message=\u039c\u03b9\u03b1 32-bit Java VM \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03b3\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03b1\u03b8\u03b5\u03af \u03c0\u03c1\u03b9\u03bd \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf Xuggle. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=\u039c\u03b9\u03b1 32-bit Java VM \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03b3\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03b1\u03b8\u03b5\u03af \u03c0\u03c1\u03b9\u03bd \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf FFMPeg. PrefsDialog.Dialog.No32bitVMQT.Message=\u039c\u03b9\u03b1 32-bit Java VM \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03b3\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03b1\u03b8\u03b5\u03af \u03c0\u03c1\u03b9\u03bd \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf QuickTime. PrefsDialog.Dialog.No32bitVM.Message=\u0393\u03b9\u03b1 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b5\u03c2 \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2, \u03b4\u03b5\u03af\u03c4\u03b5 Tracker Help: Installation. PrefsDialog.Dialog.No32bitVM.Title=\u0391\u03c0\u03b1\u03b9\u03c4\u03b5\u03af\u03c4\u03b1\u03b9 32-bit VM @@ -1215,10 +1215,10 @@ Tracker.Dialog.Button.RelaunchNow=\u039d\u03b1\u03b9, \u03b5\u03c0\u03b1\u03bd\u Tracker.Dialog.Button.ShowPrefs=\u038c\u03c7\u03b9, \u03b1\u03bb\u03bb\u03ac \u03bd\u03b1 \u03c0\u03c1\u03bf\u03b2\u03bb\u03b7\u03b8\u03bf\u03cd\u03bd \u03bf\u03b9 \u03c0\u03c1\u03bf\u03c4\u03b9\u03bc\u03ae\u03c3\u03b5\u03b9\u03c2 Tracker.Dialog.Button.ContinueWithoutEngine=\u038c\u03c7\u03b9, \u03c3\u03c5\u03bd\u03ad\u03c7\u03b5\u03b9\u03b1 \u03c7\u03c9\u03c1\u03af\u03c2 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf Tracker.Dialog.EngineProblems.Message1=\u0388\u03bd\u03b1\u03c2 \u03ae \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03bf\u03b9 \u03b5\u03ba\u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ad\u03c2 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03b3\u03ba\u03b1\u03c4\u03b5\u03c3\u03c4\u03b7\u03bc\u03ad\u03bd\u03bf\u03b9 \u03b1\u03bb\u03bb\u03ac \u03b4\u03b5\u03bd \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03bf\u03cd\u03bd. -Tracker.Dialog.EngineProblems.Message2=\u0393\u03b9\u03b1 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b5\u03c2 \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 \u03b4\u03b5\u03af\u03c4\u03b5 Help|Diagnostics|About Xuggle \u03ae QuickTime. -Tracker.Dialog.ReplaceXuggle.Message1=\u0395\u03b9\u03c3\u03b7\u03b3\u03bf\u03cd\u03bc\u03b1\u03c3\u03c4\u03b5 \u03bd\u03b1 \u03b1\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03b1\u03c3\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf\u03bd \u03c4\u03c1\u03ad\u03c7\u03bf\u03bd\u03c4\u03b1 Xuggle \u03b5\u03ba\u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae \u03b2\u03af\u03bd\u03c4\u03b5\u03bf -Tracker.Dialog.ReplaceXuggle.Message2=\u03bc\u03b5 \u03c4\u03bf\u03bd Xuggle \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7 3.4 \u03bc\u03b5 \u03c4\u03b7\u03bd \u03b5\u03c0\u03b1\u03bd\u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c4\u03bf\u03c5 Tracker (\u03ad\u03ba\u03b4\u03bf\u03c3\u03b7 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=\u03ae \u03bd\u03b5\u03ce\u03c4\u03b5\u03c1\u03b7) \u03ba\u03b1\u03b9 \u03b5\u03c0\u03b9\u03bb\u03ad\u03b3\u03bf\u03bd\u03c4\u03b1\u03c2 \u03c4\u03bf\u03bd Xuggle \u03c3\u03c4\u03b9\u03c2 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2. +Tracker.Dialog.EngineProblems.Message2=\u0393\u03b9\u03b1 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b5\u03c2 \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 \u03b4\u03b5\u03af\u03c4\u03b5 Help|Diagnostics|About FFMPeg \u03ae QuickTime. +Tracker.Dialog.ReplaceFFMPeg.Message1=\u0395\u03b9\u03c3\u03b7\u03b3\u03bf\u03cd\u03bc\u03b1\u03c3\u03c4\u03b5 \u03bd\u03b1 \u03b1\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03b1\u03c3\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf\u03bd \u03c4\u03c1\u03ad\u03c7\u03bf\u03bd\u03c4\u03b1 FFMPeg \u03b5\u03ba\u03c4\u03b5\u03bb\u03b5\u03c3\u03c4\u03ae \u03b2\u03af\u03bd\u03c4\u03b5\u03bf +Tracker.Dialog.ReplaceFFMPeg.Message2=\u03bc\u03b5 \u03c4\u03bf\u03bd FFMPeg \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7 3.4 \u03bc\u03b5 \u03c4\u03b7\u03bd \u03b5\u03c0\u03b1\u03bd\u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c4\u03bf\u03c5 Tracker (\u03ad\u03ba\u03b4\u03bf\u03c3\u03b7 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=\u03ae \u03bd\u03b5\u03ce\u03c4\u03b5\u03c1\u03b7) \u03ba\u03b1\u03b9 \u03b5\u03c0\u03b9\u03bb\u03ad\u03b3\u03bf\u03bd\u03c4\u03b1\u03c2 \u03c4\u03bf\u03bd FFMPeg \u03c3\u03c4\u03b9\u03c2 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2. TrackerIO.Dialog.DurationIsConstant.Message=\u0397 \u03b4\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1 \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03ba\u03b1\u03c1\u03ad \u03b5\u03af\u03bd\u03b1\u03b9 \u03b7 \u03af\u03b4\u03b9\u03b1 (\u03c3\u03c4\u03b1\u03b8\u03b5\u03c1\u03cc fps). TrackerIO.ZIPResourceFilter.Description=\u0391\u03c1\u03c7\u03b5\u03af\u03bf Tracker (.trz) TToolbar.Button.Desktop.Tooltip=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03c9\u03bd \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd HTML \u03ba\u03b1\u03b9/\u03ae PDF @@ -1284,7 +1284,7 @@ TableTrackView.Dialog.NameColumn.Title=\u03a3\u03c4\u03ae\u03bb\u03b7 \u03ba\u03 TToolBar.MenuItem.StretchOff=\u0395\u03c0\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=\u0388\u03ba\u03b4\u03bf\u03c3\u03b7 Xuggle +PrefsDialog.Checkbox.WarnFFMPegVersion=\u0388\u03ba\u03b4\u03bf\u03c3\u03b7 FFMPeg PrefsDialog.Checkbox.WarnCopyFailed=\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1\u03c4\u03b1 \u03c3\u03c4\u03b7\u03bd \u03b1\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \u03bc\u03b7\u03c7\u03b1\u03bd\u03ae\u03c2 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf Tracker.Dialog.FailedToCopy.Title=\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03c3\u03c4\u03b7\u03bd \u03b1\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 Velocity.Dialog.Color.Title=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2 \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03c4\u03b1\u03c7\u03cd\u03c4\u03b7\u03c4\u03b1 diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_es.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_es.properties index 2aa93139..0bebd927 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_es.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_es.properties @@ -722,7 +722,7 @@ PrefsDialog.Checkbox.DefaultSize=Usar valores por defecto PrefsDialog.Checkbox.HintsOn=Mostrar pistas por defecto PrefsDialog.Tab.Video.Title=Video PrefsDialog.VideoPref.BorderTitle=Motor de Video -PrefsDialog.Button.Xuggle=Xuggle (recomendado) +PrefsDialog.Button.FFMPeg=FFMPeg (recomendado) PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=El manejo de memoria no está accesible cuando se usa Web Start. PrefsDialog.Dialog.WebStart.Title=Modo Web Start @@ -737,9 +737,9 @@ PrefsDialog.Upgrades.Weekly=Semanalmente PrefsDialog.Upgrades.Monthly=Mensualmente PrefsDialog.Upgrades.Never=Nunca PrefsDialog.Button.CheckForUpgrade=Buscar Ahora -PrefsDialog.Xuggle.Speed.BorderTitle=Reproducción de Video -PrefsDialog.Xuggle.Slow=Suave (puede ser lenta) -PrefsDialog.Xuggle.Fast=Rápida (Puede mostrar saltos) +PrefsDialog.FFMPeg.Speed.BorderTitle=Reproducción de Video +PrefsDialog.FFMPeg.Slow=Suave (puede ser lenta) +PrefsDialog.FFMPeg.Fast=Rápida (Puede mostrar saltos) PrefsDialog.CalibrationTool.BorderTitle=Herramienta de Calibración por Defecto Protractor.Name=Transportador Protractor.New.Name=transportador @@ -819,22 +819,22 @@ TMenuBar.Menu.MeasuringTools=Herramientad de Medida TMenuBar.Menu.AngleUnits=Unidades de Ángulo TMenuBar.MenuItem.Degrees=Grados TMenuBar.MenuItem.Radians=Radianes -Tracker.Dialog.NoXuggle.Title=No se encontró Xuggle -Tracker.Dialog.NoXuggle.Message1=No está instalado Xuggle (motor de video multiplataforma). -Tracker.Dialog.NoXuggle.Message2=Descargue Xuggle de http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=Sobre Xuggle... -Tracker.Dialog.AboutXuggle.Title=Sobre Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=Xuggle versión -Tracker.Dialog.AboutXuggle.Message.Home=Sitio de Xuggle: -Tracker.Dialog.AboutXuggle.Message.Path=Camino de Xuggle: +Tracker.Dialog.NoFFMPeg.Title=No se encontró FFMPeg +Tracker.Dialog.NoFFMPeg.Message1=No está instalado FFMPeg (motor de video multiplataforma). +Tracker.Dialog.NoFFMPeg.Message2=Descargue FFMPeg de http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=Sobre FFMPeg... +Tracker.Dialog.AboutFFMPeg.Title=Sobre FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=FFMPeg versión +Tracker.Dialog.AboutFFMPeg.Message.Home=Sitio de FFMPeg: +Tracker.Dialog.AboutFFMPeg.Message.Path=Camino de FFMPeg: Tracker.Dialog.NoVideoEngine.Message1=ĦNo se ha encontrado ningún motor de video! Sin uno, Tracker solo Tracker.Dialog.NoVideoEngine.Message2=puede abrir imágenes, secuencias de imágenes y gifs animados. -Tracker.Dialog.NoVideoEngine.Message3=Para instalar Xuggle, el motor de video preferido por Tracker para todas +Tracker.Dialog.NoVideoEngine.Message3=Para instalar FFMPeg, el motor de video preferido por Tracker para todas Tracker.Dialog.NoVideoEngine.Message4=las plataformas, descargue el último instalador de Tracker desde Tracker.Dialog.NoVideoEngine.Title=Falta Motor de Video -Tracker.Dialog.NoXuggle.Message1=Xuggle, el motor de video preferido por Tracker, no está instalado todavía. -Tracker.Dialog.NoXuggle.Message2=Para instalar Xuggle, descargue el último instalador de Tracker desde -Tracker.Dialog.NoXuggle.Title=Falta Xuggle +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg, el motor de video preferido por Tracker, no está instalado todavía. +Tracker.Dialog.NoFFMPeg.Message2=Para instalar FFMPeg, descargue el último instalador de Tracker desde +Tracker.Dialog.NoFFMPeg.Title=Falta FFMPeg Tracker.About.DefaultLocale=Local por Defecto Tracker.About.CurrentLanguage=Idioma Tracker.Dialog.InsufficientMemory.Title=Memoria Insuficiente @@ -880,7 +880,7 @@ TTrackBar.Memory.Menu.SetSize=Fijar tama TTrackBar.Button.Version=Ahora disponible: versión TTrackBar.Popup.MenuItem.Upgrade=Actalizar Ahora... TTrackBar.Popup.MenuItem.Ignore=Ignorar -XuggleVideo.MenuItem.SmoothPlay=Reproducir Suavemente (puede ser lento) +FFMPegVideo.MenuItem.SmoothPlay=Reproducir Suavemente (puede ser lento) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=Calibration Tape @@ -909,13 +909,13 @@ WorldTView.Button.World=World # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=Warnings PrefsDialog.Checkbox.WarnIfNoEngine=No video engine -PrefsDialog.Checkbox.WarnIfXuggleError=Non-fatal Xuggle errors +PrefsDialog.Checkbox.WarnIfFFMPegError=Non-fatal FFMPeg errors PropertiesDialog.Title=Properties PropertiesDialog.Label.Author=Author PropertiesDialog.Label.Contact=Contact TActions.Action.Properties=Properties... TActions.Action.OpenBrowser=Open Library Browser... -TFrame.Progress.Xuggle=Xuggle loading frame +TFrame.Progress.FFMPeg=FFMPeg loading frame TFrame.Progress.ClickToCancel=(click to cancel) TFrame.Dialog.StalledVideo.Title=Error Loading Video TFrame.Dialog.StalledVideo.Message0=The video has stalled while loading. This may be temporary. @@ -928,12 +928,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=Stop TFrame.Dialog.StalledVideo.Button.Wait=Wait Tracker.Dialog.NoVideoEngine.Checkbox=Don't show this again TrackerIO.ZipFileFilter.Description=ZIP files -TrackerIO.Dialog.ErrorFFMPEG.Message1=Xuggle has encountered the following error while opening this video: +TrackerIO.Dialog.ErrorFFMPEG.Message1=FFMPeg has encountered the following error while opening this video: TrackerIO.Dialog.ErrorFFMPEG.Message2=Not all errors are fatal. For full error messages, choose Help|Message Log. -TrackerIO.Dialog.ErrorFFMPEG.Message3=If Xuggle fails, you may be able to open the video with QuickTime. +TrackerIO.Dialog.ErrorFFMPEG.Message3=If FFMPeg fails, you may be able to open the video with QuickTime. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Note: On Mac OSX this requires running Tracker in a 32-bit Java VM. -TrackerIO.Dialog.ErrorFFMPEG.Title=Xuggle Error -TrackerIO.ErrorFFMPEG.LogMessage=For more details, turn on Xuggle warnings in the preferences dialog (Edit|Preferences). +TrackerIO.Dialog.ErrorFFMPEG.Title=FFMPeg Error +TrackerIO.ErrorFFMPEG.LogMessage=For more details, turn on FFMPeg warnings in the preferences dialog (Edit|Preferences). TToolBar.Button.OpenBrowser.Tooltip=Open the OSP Digital Library Browser # Additions by Doug Brown 2011-07-20 @@ -1190,17 +1190,17 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=Variable frame durations PrefsDialog.Button.NoEngine=None PrefsDialog.Dialog.SwitchToQT.Message=Switching to QuickTime also changes the Java VM to 32-bit. -PrefsDialog.Dialog.SwitchToXuggle32.Message=Switching to Xuggle also changes the Java VM to 32-bit. -PrefsDialog.Dialog.SwitchToXuggle64.Message=Switching to Xuggle also changes the Java VM to 64-bit. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=Switching to FFMPeg also changes the Java VM to 32-bit. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=Switching to FFMPeg also changes the Java VM to 64-bit. PrefsDialog.Dialog.SwitchVM.Title=Java VM Changed PrefsDialog.Dialog.SwitchTo32.Message=Switching to a 32-bit Java VM also changes the video engine to QuickTime. -PrefsDialog.Dialog.SwitchTo64.Message=Switching to a 64-bit Java VM also changes the video engine to Xuggle. +PrefsDialog.Dialog.SwitchTo64.Message=Switching to a 64-bit Java VM also changes the video engine to FFMPeg. PrefsDialog.Dialog.SwitchEngine.Title=Video Engine Changed PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=No video engine is available for a 64-bit Java VM. You will PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=still be able to open images (JPEG, PNG) and animated GIFs. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Are you sure you wish to switch to a 64-bit VM? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=No 64-bit Video Engine -PrefsDialog.Dialog.No32bitVMXuggle.Message=A 32-bit Java VM must be installed before Xuggle can be used. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=A 32-bit Java VM must be installed before FFMPeg can be used. PrefsDialog.Dialog.No32bitVMQT.Message=A 32-bit Java VM must be installed before QuickTime can be used. PrefsDialog.Dialog.No32bitVM.Message=For more information, see Tracker Help: Installation. PrefsDialog.Dialog.No32bitVM.Title=32-bit VM Required @@ -1216,10 +1216,10 @@ Tracker.Dialog.Button.RelaunchNow=Yes, relaunch now Tracker.Dialog.Button.ShowPrefs=No, but show preferences Tracker.Dialog.Button.ContinueWithoutEngine=No, continue without video Tracker.Dialog.EngineProblems.Message1=One or more video engines are installed but not working. -Tracker.Dialog.EngineProblems.Message2=For more information see Help|Diagnostics|About Xuggle or QuickTime. -Tracker.Dialog.ReplaceXuggle.Message1=We recommend you replace your current Xuggle video engine -Tracker.Dialog.ReplaceXuggle.Message2=with Xuggle version 3.4 by reinstalling Tracker (version 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=or above) and selecting Xuggle in the installation options. +Tracker.Dialog.EngineProblems.Message2=For more information see Help|Diagnostics|About FFMPeg or QuickTime. +Tracker.Dialog.ReplaceFFMPeg.Message1=We recommend you replace your current FFMPeg video engine +Tracker.Dialog.ReplaceFFMPeg.Message2=with FFMPeg version 3.4 by reinstalling Tracker (version 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=or above) and selecting FFMPeg in the installation options. TrackerIO.Dialog.DurationIsConstant.Message=All frame durations are equal (constant fps). TrackerIO.ZIPResourceFilter.Description=Tracker ZIP File (.trz) TToolbar.Button.Desktop.Tooltip=Display associated HTML and/or PDF documents @@ -1285,7 +1285,7 @@ TableTrackView.Dialog.NameColumn.Title=Text Column TToolBar.MenuItem.StretchOff=Reset # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Xuggle Version +PrefsDialog.Checkbox.WarnFFMPegVersion=FFMPeg Version PrefsDialog.Checkbox.WarnCopyFailed=Video Engine File Copy Errors Tracker.Dialog.FailedToCopy.Title=File Copy Error Velocity.Dialog.Color.Title=Choose Velocity Color diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_fi.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_fi.properties index f3ddc104..ac53d4b3 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_fi.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_fi.properties @@ -719,7 +719,7 @@ PrefsDialog.Checkbox.DefaultSize=K PrefsDialog.Checkbox.HintsOn=Näytä aina vinkit PrefsDialog.Tab.Video.Title=Video PrefsDialog.VideoPref.BorderTitle=Video-ohjelma -PrefsDialog.Button.Xuggle=Xuggle +PrefsDialog.Button.FFMPeg=FFMPeg PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=Muistinhallintaa ei käytetä, kun Tracker käynnistetään "Web Start":illa. PrefsDialog.Dialog.WebStart.Title=Web Start-tila @@ -734,9 +734,9 @@ PrefsDialog.Upgrades.Weekly=Viikoittain PrefsDialog.Upgrades.Monthly=Kuukausittain PrefsDialog.Upgrades.Never=Ei koskaan PrefsDialog.Button.CheckForUpgrade=Tarkista nyt -PrefsDialog.Xuggle.Speed.BorderTitle=Xuggle-videon Toisto -PrefsDialog.Xuggle.Slow=Pehmeästi (voi olla hidasta) -PrefsDialog.Xuggle.Fast=Nopeasti (voi olla nykivää) +PrefsDialog.FFMPeg.Speed.BorderTitle=FFMPeg-videon Toisto +PrefsDialog.FFMPeg.Slow=Pehmeästi (voi olla hidasta) +PrefsDialog.FFMPeg.Fast=Nopeasti (voi olla nykivää) PrefsDialog.CalibrationTool.BorderTitle=Oletuksena oleva kalibrointityökalu Protractor.Name=Astemitta Protractor.New.Name=astemitta @@ -816,23 +816,23 @@ TMenuBar.Menu.MeasuringTools=Mittausv TMenuBar.Menu.AngleUnits=Kulmayksikkö TMenuBar.MenuItem.Degrees=Asteet TMenuBar.MenuItem.Radians=Radiaanit -Tracker.Dialog.NoXuggle.Title=Xuggle ei löydy -Tracker.Dialog.NoXuggle.Message1=Xuggle (video-ohjelma) ei ole asennettu. -Tracker.Dialog.NoXuggle.Message2=Lataa Xuggle osoitteesta http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=Tietoa Xuggle'sta... -Tracker.Dialog.AboutXuggle.Title=Tietoa Xuggle'sta -Tracker.Dialog.AboutXuggle.Message.Version=Xugglen versio -Tracker.Dialog.AboutXuggle.Message.Home=Xugglen kotisivu: -Tracker.Dialog.AboutXuggle.Message.Path=Xuggle'n jar-polku: +Tracker.Dialog.NoFFMPeg.Title=FFMPeg ei löydy +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (video-ohjelma) ei ole asennettu. +Tracker.Dialog.NoFFMPeg.Message2=Lataa FFMPeg osoitteesta http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=Tietoa FFMPeg'sta... +Tracker.Dialog.AboutFFMPeg.Title=Tietoa FFMPeg'sta +Tracker.Dialog.AboutFFMPeg.Message.Version=FFMPegn versio +Tracker.Dialog.AboutFFMPeg.Message.Home=FFMPegn kotisivu: +Tracker.Dialog.AboutFFMPeg.Message.Path=FFMPeg'n jar-polku: Tracker.Dialog.NoVideoEngine.Message1=Video-ohjelmia ei ole asennettuna. Ilman niitä voit Tracker.Dialog.NoVideoEngine.Message2=avata vain kuvia (JPEG, PNG) ja GIF-animaatioita. -Tracker.Dialog.NoVideoEngine.Message3=Suositus: Asenna Tracker Xuggle-ohjelman kanssa. +Tracker.Dialog.NoVideoEngine.Message3=Suositus: Asenna Tracker FFMPeg-ohjelman kanssa. Tracker.Dialog.NoVideoEngine.Title=Ei video-ohjelmaa -Tracker.Dialog.NoXuggle.Message1=Xuggle ei toimi oikein. Varmista, että -Tracker.Dialog.NoXuggle.Message2=Xugglen jar-tiedosto on Trackerin kotikansiossa. Lisäohjeita saat -Tracker.Dialog.NoXuggle.Message3=lukemalla tiedosto Tracker_README.txt Trackerin kotikansiossa. -Tracker.Dialog.NoXuggle.Message4=Asentaaksesi Xuggle, lataa viimeisin Tracker-asennustiedosto -Tracker.Dialog.NoXuggle.Title=Xuggle ei käytettävissä +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg ei toimi oikein. Varmista, että +Tracker.Dialog.NoFFMPeg.Message2=FFMPegn jar-tiedosto on Trackerin kotikansiossa. Lisäohjeita saat +Tracker.Dialog.NoFFMPeg.Message3=lukemalla tiedosto Tracker_README.txt Trackerin kotikansiossa. +Tracker.Dialog.NoFFMPeg.Message4=Asentaaksesi FFMPeg, lataa viimeisin Tracker-asennustiedosto +Tracker.Dialog.NoFFMPeg.Title=FFMPeg ei käytettävissä Tracker.About.DefaultLocale=Oletuspaikka Tracker.About.CurrentLanguage=Kieli Tracker.Dialog.InsufficientMemory.Title=Riittämätön muisti @@ -878,7 +878,7 @@ TTrackBar.Memory.Menu.SetSize=Aseta muistin koko... TTrackBar.Button.Version=Nyt saatavissa: versio TTrackBar.Popup.MenuItem.Upgrade=Päivitä nyt... TTrackBar.Popup.MenuItem.Ignore=Ohita -XuggleVideo.MenuItem.SmoothPlay=Pehmeä toisto (voi olla hidas) +FFMPegVideo.MenuItem.SmoothPlay=Pehmeä toisto (voi olla hidas) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=Kalibrointinauha @@ -907,13 +907,13 @@ WorldTView.Button.World=Maailma # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=Varoituksia PrefsDialog.Checkbox.WarnIfNoEngine=Ei video-ohjelmaa -PrefsDialog.Checkbox.WarnIfXuggleError=Xuggle-virheitä +PrefsDialog.Checkbox.WarnIfFFMPegError=FFMPeg-virheitä PropertiesDialog.Title=Ominaisuudet PropertiesDialog.Label.Author=Tekijät PropertiesDialog.Label.Contact=Ota yhteyttä TActions.Action.Properties=Ominaisuudet... TActions.Action.OpenBrowser=Avaa Kirjastoselain... -TFrame.Progress.Xuggle=Xuggle'in latauskehys +TFrame.Progress.FFMPeg=FFMPeg'in latauskehys TFrame.Progress.ClickToCancel=(peruuta klikkaamalla) TFrame.Dialog.StalledVideo.Title=Virhe ladatessa videota TFrame.Dialog.StalledVideo.Message0=Video on pysähtynyt latautuessaan. Se voi olla väliaikaista. @@ -926,12 +926,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=Pys TFrame.Dialog.StalledVideo.Button.Wait=Odota Tracker.Dialog.NoVideoEngine.Checkbox=Älä näytä tätä enää TrackerIO.ZipFileFilter.Description=ZIP-tiedosto (.zip) -TrackerIO.Dialog.ErrorFFMPEG.Message1=Xuggle on kohdannut seuraavan virheen avatessaan videota: +TrackerIO.Dialog.ErrorFFMPEG.Message1=FFMPeg on kohdannut seuraavan virheen avatessaan videota: TrackerIO.Dialog.ErrorFFMPEG.Message2=Kaikki virheet eivät ole vakavia. Tutki virheilmoitusta komennolla Ohje|Viestiloki. -TrackerIO.Dialog.ErrorFFMPEG.Message3=Ellet pysty avaamaan videota Xuggle'illa, voit avata sen vielä QuickTime'illa. +TrackerIO.Dialog.ErrorFFMPEG.Message3=Ellet pysty avaamaan videota FFMPeg'illa, voit avata sen vielä QuickTime'illa. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Huomaa: Macillä tämä onnistuu suorittamalla Tracker 32-bitin Javalla. -TrackerIO.Dialog.ErrorFFMPEG.Title=Xuggle-virhe -TrackerIO.ErrorFFMPEG.LogMessage=Lisätietoa saat, kun kytket Xuggle-varoitukset päälle Asetuksia-komennolla (Muokkaa|Asetuksia). +TrackerIO.Dialog.ErrorFFMPEG.Title=FFMPeg-virhe +TrackerIO.ErrorFFMPEG.LogMessage=Lisätietoa saat, kun kytket FFMPeg-varoitukset päälle Asetuksia-komennolla (Muokkaa|Asetuksia). TToolBar.Button.OpenBrowser.Tooltip=Avaa OSP Digital Library'n selain # Additions by Doug Brown 2011-07-20 @@ -1188,17 +1188,17 @@ PrefsDialog.Checkbox.32BitVM=32-bittinen PrefsDialog.Checkbox.WarnVariableDuration=Muuttuvat kehysviiveet PrefsDialog.Button.NoEngine=Ei video-ohjelmaa PrefsDialog.Dialog.SwitchToQT.Message=Vaihtamalla QuickTime'iin vaihtuu myös Java VM 32-bittiseksi. -PrefsDialog.Dialog.SwitchToXuggle32.Message=Vaihtamalla Xuggleen vaihtuu myös Java VM 32-bittiseksi. -PrefsDialog.Dialog.SwitchToXuggle64.Message=Vaihtamalla Xuggleen vaihtuu myös Java VM 64-bittiseksi. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=Vaihtamalla FFMPegen vaihtuu myös Java VM 32-bittiseksi. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=Vaihtamalla FFMPegen vaihtuu myös Java VM 64-bittiseksi. PrefsDialog.Dialog.SwitchVM.Title=Java VM vaihtui PrefsDialog.Dialog.SwitchTo32.Message=Vaihtamalla Java VM 32-bittiseksi vaihtuu myös video-ohjelma QuickTime'iksi. -PrefsDialog.Dialog.SwitchTo64.Message=Vaihtamalla Java VM 64-bittiseksi vaihtuu myös video-ohjelma Xuggleksi. +PrefsDialog.Dialog.SwitchTo64.Message=Vaihtamalla Java VM 64-bittiseksi vaihtuu myös video-ohjelma FFMPegksi. PrefsDialog.Dialog.SwitchEngine.Title=Video-ohjelma vaihtui PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=Yhtään video-ohjlmaa ei ole käytettävissä 64-bittiselle Javalle. Voit PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=kuitenkin vielä avata kuvia (JPEG, PNG) and GIF-animatioita. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Oletko varma, että haluat vaihtaa 64-bittiseen Javaan? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=Ei 64-bittistä Video-ohjelmaa -PrefsDialog.Dialog.No32bitVMXuggle.Message=Ennen kuin Xugglea voi käyttää tulee ensin asentaa 32-bittinen Java VM. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=Ennen kuin FFMPega voi käyttää tulee ensin asentaa 32-bittinen Java VM. PrefsDialog.Dialog.No32bitVMQT.Message=Ennen kuin QuickTime'ia voi käyttää tulee ensin asentaa 32-bittinen Java VM. PrefsDialog.Dialog.No32bitVM.Message=Lisätietoa saa Trackerin ohjeista: Asennus. PrefsDialog.Dialog.No32bitVM.Title=Tarvitaan 32-bittinen Java VM @@ -1212,10 +1212,10 @@ Tracker.Dialog.SwitchTo32BitVM.Message2=ne tarvitsevat 32-bittisen Javan ja sin Tracker.Dialog.SwitchTo32BitVM.Message3=Muuttaaksesi tämän, avaa Asetuksia-ikkuna (Muokkaa|Asetuksia...) Tracker.Dialog.SwitchTo32BitVM.Message4=ja valitse 64-bittinen Java VM Suoritus-välilehdellä. Tracker.Dialog.EngineProblems.Message1=Yksi tai useampi video-ohjelma on asennettuna, mutta niitä ei voi käyttää. -Tracker.Dialog.EngineProblems.Message2=Lisätietoa saa: Ohje|Diagnostiikka|Tietoa Xugglesta or QuickTime'ista. -Tracker.Dialog.ReplaceXuggle.Message1=Suosittelemme nykyisen Xugglen korvaamista -Tracker.Dialog.ReplaceXuggle.Message2=uudella Xuggle-versiolla 3.4 asentamalla Tracker (versio 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=tai uudempi) ja valitsemalla Xuggle-asennusvaihtoehto. +Tracker.Dialog.EngineProblems.Message2=Lisätietoa saa: Ohje|Diagnostiikka|Tietoa FFMPegsta or QuickTime'ista. +Tracker.Dialog.ReplaceFFMPeg.Message1=Suosittelemme nykyisen FFMPegn korvaamista +Tracker.Dialog.ReplaceFFMPeg.Message2=uudella FFMPeg-versiolla 3.4 asentamalla Tracker (versio 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=tai uudempi) ja valitsemalla FFMPeg-asennusvaihtoehto. TrackerIO.Dialog.DurationIsConstant.Message=Kaikki kehyksien kestot ovat samat (vakio-fps). TrackerIO.ZIPResourceFilter.Description=Trackerin ZIP-tiedosto (.trz) TToolbar.Button.Desktop.Tooltip=Näytä täydentäviä HTML- tai/ja PDF-dokumentteja @@ -1281,7 +1281,7 @@ TableTrackView.Dialog.NameColumn.Title=Text Column TToolBar.MenuItem.StretchOff=Reset # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Xuggle Version +PrefsDialog.Checkbox.WarnFFMPegVersion=FFMPeg Version PrefsDialog.Checkbox.WarnCopyFailed=Video Engine File Copy Errors Tracker.Dialog.FailedToCopy.Title=File Copy Error Velocity.Dialog.Color.Title=Choose Velocity Color diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_fr.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_fr.properties index 6df41083..4bd15f36 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_fr.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_fr.properties @@ -730,7 +730,7 @@ PrefsDialog.Checkbox.DefaultSize=Utiliser la valeur par d PrefsDialog.Checkbox.HintsOn=Par défaut, montrer les conseils PrefsDialog.Tab.Video.Title=Vidéo PrefsDialog.VideoPref.BorderTitle=Décrypteur Vidéo -PrefsDialog.Button.Xuggle=Xuggle (recommandé) +PrefsDialog.Button.FFMPeg=FFMPeg (recommandé) PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=Le contrôle de la mémoire est impossible lorsque le démarrage se fait par le Web. PrefsDialog.Dialog.WebStart.Title=Mode de démarrage Web @@ -745,9 +745,9 @@ PrefsDialog.Upgrades.Weekly= PrefsDialog.Upgrades.Monthly=À chaque mois PrefsDialog.Upgrades.Never=Jamais PrefsDialog.Button.CheckForUpgrade=Vérifier maintenant -PrefsDialog.Xuggle.Speed.BorderTitle=Lecture de Vidéo -PrefsDialog.Xuggle.Slow=Continue (peut être lente) -PrefsDialog.Xuggle.Fast=Rapide (peut être saccadée) +PrefsDialog.FFMPeg.Speed.BorderTitle=Lecture de Vidéo +PrefsDialog.FFMPeg.Slow=Continue (peut être lente) +PrefsDialog.FFMPeg.Fast=Rapide (peut être saccadée) PrefsDialog.CalibrationTool.BorderTitle=Outil de Calibration par défaut Protractor.Name=Rapporteur d'angle Protractor.New.Name=rapporteur d'angle @@ -827,22 +827,22 @@ TMenuBar.Menu.MeasuringTools=Outils de mesure TMenuBar.Menu.AngleUnits=Unités des angles TMenuBar.MenuItem.Degrees=Degrés TMenuBar.MenuItem.Radians=Radians -Tracker.Dialog.NoXuggle.Title=Xuggle n'a pas été trouvé -Tracker.Dialog.NoXuggle.Message1=Xuggle (un moteur d'analyse de vidéos pour toutes plateformes) n'est pas installé. -Tracker.Dialog.NoXuggle.Message2=Télécharger Xuggle à partir de http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=À propos de Xuggle... -Tracker.Dialog.AboutXuggle.Title=À propos de Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=Version de Xuggle -Tracker.Dialog.AboutXuggle.Message.Home=Emplacement de Xuggle: -Tracker.Dialog.AboutXuggle.Message.Path=Chemin d'accès Xuggle +Tracker.Dialog.NoFFMPeg.Title=FFMPeg n'a pas été trouvé +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (un moteur d'analyse de vidéos pour toutes plateformes) n'est pas installé. +Tracker.Dialog.NoFFMPeg.Message2=Télécharger FFMPeg à partir de http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=À propos de FFMPeg... +Tracker.Dialog.AboutFFMPeg.Title=À propos de FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=Version de FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Home=Emplacement de FFMPeg: +Tracker.Dialog.AboutFFMPeg.Message.Path=Chemin d'accès FFMPeg Tracker.Dialog.NoVideoEngine.Message1=Aucun analyseur vidéo n'a été trouvé! Sans cet analyseur, Tracker ne peut Tracker.Dialog.NoVideoEngine.Message2=qu'ouvrir des images, des séquences d'images et des GIF animés. -Tracker.Dialog.NoVideoEngine.Message3=Pour installer Xuggle, qui est l'analyseur vidéo préféré de Tracker sur toutes les plateformes, +Tracker.Dialog.NoVideoEngine.Message3=Pour installer FFMPeg, qui est l'analyseur vidéo préféré de Tracker sur toutes les plateformes, Tracker.Dialog.NoVideoEngine.Message4=télécharger la plus récente version du fichier d'installation de Tracker à partir de Tracker.Dialog.NoVideoEngine.Title=Aucun analyseur vidéo -Tracker.Dialog.NoXuggle.Message1=Xuggle, l'analyseur vidéo préféré de Tracker n'est pas encore installé. -Tracker.Dialog.NoXuggle.Message2=Pour installer Xuggle, télécharger la plus récente version du fichier d'installation de Tracker à partir de -Tracker.Dialog.NoXuggle.Title=Xuggle manquant +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg, l'analyseur vidéo préféré de Tracker n'est pas encore installé. +Tracker.Dialog.NoFFMPeg.Message2=Pour installer FFMPeg, télécharger la plus récente version du fichier d'installation de Tracker à partir de +Tracker.Dialog.NoFFMPeg.Title=FFMPeg manquant Tracker.About.DefaultLocale=Locale par défaut Tracker.About.CurrentLanguage=Langue Tracker.Dialog.InsufficientMemory.Title=Mémoire insuffisante @@ -888,7 +888,7 @@ TTrackBar.Memory.Menu.SetSize=D TTrackBar.Button.Version=Maintenant disponible: version TTrackBar.Popup.MenuItem.Upgrade=Mettre à niveau maintenant... TTrackBar.Popup.MenuItem.Ignore=Ignorer -XuggleVideo.MenuItem.SmoothPlay=Lecture graduelle (peut être lente) +FFMPegVideo.MenuItem.SmoothPlay=Lecture graduelle (peut être lente) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=Ruban de Calibration @@ -917,13 +917,13 @@ WorldTView.Button.World=Globale # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=Avertissements PrefsDialog.Checkbox.WarnIfNoEngine=Aucun analyseur vidéo -PrefsDialog.Checkbox.WarnIfXuggleError=Erreurs non fatales de Xuggle +PrefsDialog.Checkbox.WarnIfFFMPegError=Erreurs non fatales de FFMPeg PropertiesDialog.Title=Propriétés PropertiesDialog.Label.Author=Auteur PropertiesDialog.Label.Contact=Contact TActions.Action.Properties=Propriétés... TActions.Action.OpenBrowser=Ouvrir le fureteur de librairie... -TFrame.Progress.Xuggle=Xuggle est en train de charger les images +TFrame.Progress.FFMPeg=FFMPeg est en train de charger les images TFrame.Progress.ClickToCancel=(cliquer pour annuler) TFrame.Dialog.StalledVideo.Title=Il y a eu une erreur en chargeant la vidéo TFrame.Dialog.StalledVideo.Message0=La vidéo s'est bloquée en chargeant. Ceci est peut-être temporaire. @@ -936,12 +936,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=Arr TFrame.Dialog.StalledVideo.Button.Wait=Attendre Tracker.Dialog.NoVideoEngine.Checkbox=Ne plus afficher ce message TrackerIO.ZipFileFilter.Description=Fichiers ZIP -TrackerIO.Dialog.ErrorFFMPEG.Message1=Xuggle a recontré cette erreur en tentant d'ouvrir cette vidéo: +TrackerIO.Dialog.ErrorFFMPEG.Message1=FFMPeg a recontré cette erreur en tentant d'ouvrir cette vidéo: TrackerIO.Dialog.ErrorFFMPEG.Message2=Toutes les erreurs ne sont pas fatales. Pour obtenir les messages d'erreur complets, choisissez Aide|Historique des messages. -TrackerIO.Dialog.ErrorFFMPEG.Message3=Si Xuggle ne peut y parvenir, vous pourriez peut-être ouvrir la vidéo avec QuickTime. +TrackerIO.Dialog.ErrorFFMPEG.Message3=Si FFMPeg ne peut y parvenir, vous pourriez peut-être ouvrir la vidéo avec QuickTime. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Note: Sur Mac OSX, Tracker fonctionne avec Java VM 32-bit. -TrackerIO.Dialog.ErrorFFMPEG.Title=Erreur Xuggle -TrackerIO.ErrorFFMPEG.LogMessage=Pour plus de détails, lancer les messages d'alerte Xuggle dans les préférences (Édition|Préférences). +TrackerIO.Dialog.ErrorFFMPEG.Title=Erreur FFMPeg +TrackerIO.ErrorFFMPEG.LogMessage=Pour plus de détails, lancer les messages d'alerte FFMPeg dans les préférences (Édition|Préférences). TToolBar.Button.OpenBrowser.Tooltip=Ouvrir le fureteur de la librairie digitale OSP # Additions by Doug Brown 2011-07-20 @@ -1066,7 +1066,7 @@ AlgorithmDialog.FiniteDifference.Message2=Vitesse: v[i] = (x[i+1] - x[i-1]) / ( AlgorithmDialog.FiniteDifference.Message3=Accélération: a[i] = (2*x[i+2] - x[i+1] - 2*x[i] - x[i-1] + 2*x[i-2]) / (7*dt) AlgorithmDialog.BounceDetect.Message1=Cette algorithme améliore le calcul des vitesses et des accélérations tout en détectant les variations soudaines de vitesse. AlgorithmDialog.BounceDetect.Message2=Attention: peut produire des artéfacts. Pour plus d'informations, voir: -AlgorithmDialog.BounceDetect.Message3=http://gasstationwithoutpumps.wordpress.com/2011/11/08/tracker-video-analysis-tool-fixes/ +AlgorithmDialog.BounceDetect.Message3=http://www.ffmpeg.org/download.html. TMenuBar.Menu.Diagnostics=Diagnostics # Additions by Doug Brown 2012-02-12 @@ -1199,17 +1199,17 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=Durées de séquences variables PrefsDialog.Button.NoEngine=Aucun PrefsDialog.Dialog.SwitchToQT.Message=La bascule vers QuickTime change aussi la VM Java à 32-bit. -PrefsDialog.Dialog.SwitchToXuggle32.Message=La bascule vers Xuggle change aussi la VM Java à 32-bit. -PrefsDialog.Dialog.SwitchToXuggle64.Message=La bascule vers Xuggle change aussi la VM Java à 64-bit. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=La bascule vers FFMPeg change aussi la VM Java à 32-bit. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=La bascule vers FFMPeg change aussi la VM Java à 64-bit. PrefsDialog.Dialog.SwitchVM.Title=VM Java changée PrefsDialog.Dialog.SwitchTo32.Message=La bascule vers une VM Java de 32-bit change aussi le moteur vidéo pour QuickTime. -PrefsDialog.Dialog.SwitchTo64.Message=La bascule vers une VM Java de 64-bit change aussi le moteur vidéo pour Xuggle. +PrefsDialog.Dialog.SwitchTo64.Message=La bascule vers une VM Java de 64-bit change aussi le moteur vidéo pour FFMPeg. PrefsDialog.Dialog.SwitchEngine.Title=Moteur vidéo changé PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=Aucun moteur vidéo n'est disponible pour une VM de 64-bit Java. Vous pourrez PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=tout de même ouvrir des images (JPEG, PNG) et des GIFs animés. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Êtes-vous sûr de vouloir basculer vers une VM Java de 64-bit ? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=Aucun moteur vidéo de 64-bit -PrefsDialog.Dialog.No32bitVMXuggle.Message=Une VM Java de 32-bit doit être installée pour utiliser Xuggle. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=Une VM Java de 32-bit doit être installée pour utiliser FFMPeg. PrefsDialog.Dialog.No32bitVMQT.Message=Une VM Java de 32-bit doit être installée pour utiliser QuickTime. PrefsDialog.Dialog.No32bitVM.Message=Pour plus d'infos, voir l'Aide Tracker sous : Installation. PrefsDialog.Dialog.No32bitVM.Title=Une VM de 32-bit nécessaire @@ -1225,10 +1225,10 @@ Tracker.Dialog.Button.RelaunchNow=Oui, relancer maintenant Tracker.Dialog.Button.ShowPrefs=Non, mais afficher les préférences Tracker.Dialog.Button.ContinueWithoutEngine=Non, continuer sans vidéo Tracker.Dialog.EngineProblems.Message1=Au moins un ou plusieurs moteurs vidéos sont détectés mais ne semblent pas en état de marche. -Tracker.Dialog.EngineProblems.Message2=Pour plus d'infos voir Aide|Diagnostics|À propos de Xuggle ou QuickTime. -Tracker.Dialog.ReplaceXuggle.Message1=Nous vous recommandons de remplacer votre moteur vidéo actuel Xuggle -Tracker.Dialog.ReplaceXuggle.Message2=par le Xuggle version 3.4 en réinstallant Tracker (version 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=ou mieux) et en sélectionnant Xuggle dans les options d'installation. +Tracker.Dialog.EngineProblems.Message2=Pour plus d'infos voir Aide|Diagnostics|À propos de FFMPeg ou QuickTime. +Tracker.Dialog.ReplaceFFMPeg.Message1=Nous vous recommandons de remplacer votre moteur vidéo actuel FFMPeg +Tracker.Dialog.ReplaceFFMPeg.Message2=par le FFMPeg version 3.4 en réinstallant Tracker (version 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=ou mieux) et en sélectionnant FFMPeg dans les options d'installation. TrackerIO.Dialog.DurationIsConstant.Message=Les durées d'images sont identiques (ips constantes). TrackerIO.ZIPResourceFilter.Description=Fichier ZIP Tracker (.trz) TToolbar.Button.Desktop.Tooltip=Afficher les fichiers HTML et/ou PDF liés @@ -1294,7 +1294,7 @@ TableTrackView.Dialog.NameColumn.Title=Colonne de texte TToolBar.MenuItem.StretchOff=Réinitialiser # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Version Xuggle +PrefsDialog.Checkbox.WarnFFMPegVersion=Version FFMPeg PrefsDialog.Checkbox.WarnCopyFailed=Erreurs de copie de fichier du moteur vidéo Tracker.Dialog.FailedToCopy.Title=Erreur de copie de fichier Velocity.Dialog.Color.Title=Choisir la couleur de la vélocité diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_hu_HU.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_hu_HU.properties index 79b99cf9..10e3bc6b 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_hu_HU.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_hu_HU.properties @@ -719,7 +719,7 @@ PrefsDialog.Checkbox.DefaultSize=Alap\u00e9rtelmezett PrefsDialog.Checkbox.HintsOn=Mutasd a tippeket PrefsDialog.Tab.Video.Title=Vide\u00f3 PrefsDialog.VideoPref.BorderTitle=Vide\u00f3lej\u00e1tsz\u00f3 -PrefsDialog.Button.Xuggle=Xuggle +PrefsDialog.Button.FFMPeg=FFMPeg PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=Web Start haszn\u00e1lata eset\u00e9n nincs mem\u00f3riakezel\u00e9s. PrefsDialog.Dialog.WebStart.Title=Web Start m\u00f3d @@ -734,9 +734,9 @@ PrefsDialog.Upgrades.Weekly=Hetente PrefsDialog.Upgrades.Monthly=Havonta PrefsDialog.Upgrades.Never=Soha PrefsDialog.Button.CheckForUpgrade=Friss\u00edt\u00e9sek keres\u00e9se most -PrefsDialog.Xuggle.Speed.BorderTitle=Xuggle vide\u00f3lej\u00e1tsz\u00f3 -PrefsDialog.Xuggle.Slow=Folytonos (lass\u00fa lehet) -PrefsDialog.Xuggle.Fast=Gyors (ugr\u00e1lhat) +PrefsDialog.FFMPeg.Speed.BorderTitle=FFMPeg vide\u00f3lej\u00e1tsz\u00f3 +PrefsDialog.FFMPeg.Slow=Folytonos (lass\u00fa lehet) +PrefsDialog.FFMPeg.Fast=Gyors (ugr\u00e1lhat) PrefsDialog.CalibrationTool.BorderTitle=Alap\u00e9rtelmezett kalibr\u00e1ci\u00f3s eszk\u00f6z Protractor.Name=Sz\u00f6gm\u00e9r\u0151 Protractor.New.Name=sz\u00f6gm\u00e9r\u0151 @@ -816,23 +816,23 @@ TMenuBar.Menu.MeasuringTools=M\u00e9r\u0151eszk\u00f6z\u00f6k TMenuBar.Menu.AngleUnits=Sz\u00f6g m\u00e9rt\u00e9kegys\u00e9gek TMenuBar.MenuItem.Degrees=Fok TMenuBar.MenuItem.Radians=Radi\u00e1n -Tracker.Dialog.NoXuggle.Title=A Xuggle nem tal\u00e1lhat\u00f3 -Tracker.Dialog.NoXuggle.Message1=A Xuggle (platformf\u00fcggetlen vide\u00f3lej\u00e1tsz\u00f3) nincs telep\u00edtve. -Tracker.Dialog.NoXuggle.Message2=T\u00f6ltsd le a Xuggle-t innen http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=A Xuggle-r\u00f3l... -Tracker.Dialog.AboutXuggle.Title=A Xuggle-r\u00f3l -Tracker.Dialog.AboutXuggle.Message.Version=Xuggle verzi\u00f3 -Tracker.Dialog.AboutXuggle.Message.Home=Xuggle k\u00f6nyvt\u00e1r: -Tracker.Dialog.AboutXuggle.Message.Path=Xuggle jar \u00fatvonal: +Tracker.Dialog.NoFFMPeg.Title=A FFMPeg nem tal\u00e1lhat\u00f3 +Tracker.Dialog.NoFFMPeg.Message1=A FFMPeg (platformf\u00fcggetlen vide\u00f3lej\u00e1tsz\u00f3) nincs telep\u00edtve. +Tracker.Dialog.NoFFMPeg.Message2=T\u00f6ltsd le a FFMPeg-t innen http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=A FFMPeg-r\u00f3l... +Tracker.Dialog.AboutFFMPeg.Title=A FFMPeg-r\u00f3l +Tracker.Dialog.AboutFFMPeg.Message.Version=FFMPeg verzi\u00f3 +Tracker.Dialog.AboutFFMPeg.Message.Home=FFMPeg k\u00f6nyvt\u00e1r: +Tracker.Dialog.AboutFFMPeg.Message.Path=FFMPeg jar \u00fatvonal: Tracker.Dialog.NoVideoEngine.Message1=Nincs vide\u00f3lej\u00e1tsz\u00f3 telep\u00edtve. Vide\u00f3lej\u00e1tsz\u00f3 n\u00e9lk\u00fcl Tracker.Dialog.NoVideoEngine.Message2=csak k\u00e9pek (JPEG, PNG) \u00e9s anim\u00e1lt GIF-ek megjelen\u00edt\u00e9se lehets\u00e9ges. -Tracker.Dialog.NoVideoEngine.Message3=Javaslat: telep\u00edtsd \u00fajra a Tracker-t a Xuggle vide\u00f3lej\u00e1tsz\u00f3val. +Tracker.Dialog.NoVideoEngine.Message3=Javaslat: telep\u00edtsd \u00fajra a Tracker-t a FFMPeg vide\u00f3lej\u00e1tsz\u00f3val. Tracker.Dialog.NoVideoEngine.Title=Nincs vide\u00f3lej\u00e1tsz\u00f3 -Tracker.Dialog.NoXuggle.Message1=A Xuggle nem m\u0171k\u00f6dik megfelel\u0151en. Gy\u0151z\u0151dj meg r\u00f3la, hogy a sz\u00fcks\u00e9ges -Tracker.Dialog.NoXuggle.Message2=xuggle jar f\u00e1jlok a Tracker k\u00f6nyvt\u00e1r\u00e1ban vannak. R\u00e9szleteket -Tracker.Dialog.NoXuggle.Message3=a Tracker_README.txt f\u00e1jlban tal\u00e1lsz a Tracker k\u00f6nyt\u00e1r\u00e1ban. -Tracker.Dialog.NoXuggle.Message4=A Xuggle telep\u00edt\u00e9s\u00e9hez t\u00f6ltsd le a legfrissebb Tracker telep\u00edt\u0151t innen -Tracker.Dialog.NoXuggle.Title=A Xuggle nem el\u00e9rhet\u0151 +Tracker.Dialog.NoFFMPeg.Message1=A FFMPeg nem m\u0171k\u00f6dik megfelel\u0151en. Gy\u0151z\u0151dj meg r\u00f3la, hogy a sz\u00fcks\u00e9ges +Tracker.Dialog.NoFFMPeg.Message2=ffmpeg jar f\u00e1jlok a Tracker k\u00f6nyvt\u00e1r\u00e1ban vannak. R\u00e9szleteket +Tracker.Dialog.NoFFMPeg.Message3=a Tracker_README.txt f\u00e1jlban tal\u00e1lsz a Tracker k\u00f6nyt\u00e1r\u00e1ban. +Tracker.Dialog.NoFFMPeg.Message4=A FFMPeg telep\u00edt\u00e9s\u00e9hez t\u00f6ltsd le a legfrissebb Tracker telep\u00edt\u0151t innen +Tracker.Dialog.NoFFMPeg.Title=A FFMPeg nem el\u00e9rhet\u0151 Tracker.About.DefaultLocale=Alap\u00e9rtelmezett lokaliz\u00e1ci\u00f3 Tracker.About.CurrentLanguage=Nyelv Tracker.Dialog.InsufficientMemory.Title=Mem\u00f3ria nem elegend\u0151 @@ -878,7 +878,7 @@ TTrackBar.Memory.Menu.SetSize=Mem\u00f3riam\u00e9ret megad\u00e1sa... TTrackBar.Button.Version=El\u00e9rhet\u0151 verzi\u00f3 TTrackBar.Popup.MenuItem.Upgrade=Friss\u00edt\u00e9s most... TTrackBar.Popup.MenuItem.Ignore=Mell\u0151z\u00e9s -XuggleVideo.MenuItem.SmoothPlay=Folytonos lej\u00e1tsz\u00e1s (lass\u00fa lehet) +FFMPegVideo.MenuItem.SmoothPlay=Folytonos lej\u00e1tsz\u00e1s (lass\u00fa lehet) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=Kalibr\u00e1ci\u00f3s m\u00e9r\u0151szalag @@ -907,13 +907,13 @@ WorldTView.Button.World=Fizikai n\u00e9zet # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=Figyelmeztet\u00e9sek PrefsDialog.Checkbox.WarnIfNoEngine=Nincs vide\u00f3lej\u00e1tsz\u00f3 -PrefsDialog.Checkbox.WarnIfXuggleError=Nem v\u00e9gzetes Xuggle hib\u00e1k +PrefsDialog.Checkbox.WarnIfFFMPegError=Nem v\u00e9gzetes FFMPeg hib\u00e1k PropertiesDialog.Title=Tulajdons\u00e1gok PropertiesDialog.Label.Author=Szerz\u0151k PropertiesDialog.Label.Contact=Kapcsolat TActions.Action.Properties=Tulajdons\u00e1gok... TActions.Action.OpenBrowser=K\u00f6nyvt\u00e1rb\u00f6ng\u00e9sz\u0151 megnyit\u00e1sa... -TFrame.Progress.Xuggle=A Xuggle bet\u00f6lti a k\u00e9pkock\u00e1t +TFrame.Progress.FFMPeg=A FFMPeg bet\u00f6lti a k\u00e9pkock\u00e1t TFrame.Progress.ClickToCancel=(megszak\u00edt\u00e1s kattint\u00e1ssal) TFrame.Dialog.StalledVideo.Title=Vide\u00f3bet\u00f6lt\u00e9s nem siker\u00fclt TFrame.Dialog.StalledVideo.Message0=A vide\u00f3 elakadt bet\u00f6lt\u00e9s k\u00f6zben. El\u0151fordulhat, hogy csak ideiglenesen. @@ -926,12 +926,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=Meg\u00e1ll\u00edt TFrame.Dialog.StalledVideo.Button.Wait=V\u00e1rakozik Tracker.Dialog.NoVideoEngine.Checkbox=Ne jelen\u00edtse meg \u00fajra ezt az \u00fczenetet TrackerIO.ZipFileFilter.Description=ZIP f\u00e1jl (.zip) -TrackerIO.Dialog.ErrorFFMPEG.Message1=A Xuggle a k\u00f6vetkez\u0151 hib\u00e1t \u00e9szlelte a vide\u00f3 megnyit\u00e1sa k\u00f6zben: +TrackerIO.Dialog.ErrorFFMPEG.Message1=A FFMPeg a k\u00f6vetkez\u0151 hib\u00e1t \u00e9szlelte a vide\u00f3 megnyit\u00e1sa k\u00f6zben: TrackerIO.Dialog.ErrorFFMPEG.Message2=Nem minden hiba v\u00e9gzetes. A hiba\u00fczenetek megtekint\u00e9s\u00e9hez v\u00e1laszd a S\u00fag\u00f3|Napl\u00f3zott \u00fczenetek men\u00fcpontot. -TrackerIO.Dialog.ErrorFFMPEG.Message3=Ha a Xuggle-el nem siker\u00fcl megnyitni a vide\u00f3t, QuickTime-al m\u00e9g siker\u00fclhet. +TrackerIO.Dialog.ErrorFFMPEG.Message3=Ha a FFMPeg-el nem siker\u00fcl megnyitni a vide\u00f3t, QuickTime-al m\u00e9g siker\u00fclhet. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Megjegyz\u00e9s: Mac OSX alatt ehhez a Trackert 32 bites Java VM alatt kell futtatni. -TrackerIO.Dialog.ErrorFFMPEG.Title=Xuggle hiba -TrackerIO.ErrorFFMPEG.LogMessage=R\u00e9szletek\u00e9rt kapcsold be a Xuggle figyelmeztet\u00e9seket a be\u00e1ll\u00edt\u00e1sok men\u00fcpontban (Szerkeszt\u00e9s|Be\u00e1ll\u00edt\u00e1sok). +TrackerIO.Dialog.ErrorFFMPEG.Title=FFMPeg hiba +TrackerIO.ErrorFFMPEG.LogMessage=R\u00e9szletek\u00e9rt kapcsold be a FFMPeg figyelmeztet\u00e9seket a be\u00e1ll\u00edt\u00e1sok men\u00fcpontban (Szerkeszt\u00e9s|Be\u00e1ll\u00edt\u00e1sok). TToolBar.Button.OpenBrowser.Tooltip=OSP digit\u00e1lis-k\u00f6nyvt\u00e1r b\u00f6ng\u00e9sz\u0151 megnyit\u00e1sa # Additions by Doug Brown 2011-07-20 @@ -1187,17 +1187,17 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=V\u00e1ltoz\u00f3 k\u00e9pkocka id\u0151tartam PrefsDialog.Button.NoEngine=Nincs PrefsDialog.Dialog.SwitchToQT.Message=Ha QuickTime-ra v\u00e1ltasz, a Java VM 32-bites verzi\u00f3ra v\u00e1ltozik. -PrefsDialog.Dialog.SwitchToXuggle32.Message=Ha Xuggle-ra v\u00e1ltasz, a Java VM 32-bites verzi\u00f3ra v\u00e1ltozik. -PrefsDialog.Dialog.SwitchToXuggle64.Message=Ha Xuggle-ra v\u00e1ltasz, a Java VM 64-bites verzi\u00f3ra v\u00e1ltozik. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=Ha FFMPeg-ra v\u00e1ltasz, a Java VM 32-bites verzi\u00f3ra v\u00e1ltozik. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=Ha FFMPeg-ra v\u00e1ltasz, a Java VM 64-bites verzi\u00f3ra v\u00e1ltozik. PrefsDialog.Dialog.SwitchVM.Title=Java VM megv\u00e1ltozott PrefsDialog.Dialog.SwitchTo32.Message=Ha 32-bites Java VM-re v\u00e1ltasz, a vide\u00f3lej\u00e1tsz\u00f3 QuickTime-ra v\u00e1ltozik. -PrefsDialog.Dialog.SwitchTo64.Message=Ha 64-bites Java VM-re v\u00e1ltasz, a vide\u00f3lej\u00e1tsz\u00f3 Xuggle-re v\u00e1ltozik. +PrefsDialog.Dialog.SwitchTo64.Message=Ha 64-bites Java VM-re v\u00e1ltasz, a vide\u00f3lej\u00e1tsz\u00f3 FFMPeg-re v\u00e1ltozik. PrefsDialog.Dialog.SwitchEngine.Title=Vide\u00f3lej\u00e1tsz\u00f3 megv\u00e1ltozott PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=Nem tal\u00e1lhat\u00f3 vide\u00f3lej\u00e1tsz\u00f3 a 64-bit Java VM-hez. PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=K\u00e9peket (JPEG, PNG) and anim\u00e1lt GIF-eket tov\u00e1bbra is meg lehet majd nyitni. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Biztosan 64-bites Java VM-re v\u00e1ltasz? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=Nincs 64-bites vide\u00f3lej\u00e1tsz\u00f3 -PrefsDialog.Dialog.No32bitVMXuggle.Message=A Xuggle haszn\u00e1lat\u00e1hoz sz\u00fcks\u00e9ges egy 32-bites Java VM telep\u00edt\u00e9se. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=A FFMPeg haszn\u00e1lat\u00e1hoz sz\u00fcks\u00e9ges egy 32-bites Java VM telep\u00edt\u00e9se. PrefsDialog.Dialog.No32bitVMQT.Message=A QuickTime haszn\u00e1lat\u00e1hoz sz\u00fcks\u00e9ges egy 32-bites Java VM telep\u00edt\u00e9se. PrefsDialog.Dialog.No32bitVM.Message=Tov\u00e1bbi inform\u00e1ci\u00f3t a Tracker S\u00fag\u00f3: Telep\u00edt\u00e9s tartalmaz. PrefsDialog.Dialog.No32bitVM.Title=32-bites VM sz\u00fcks\u00e9ges @@ -1213,10 +1213,10 @@ Tracker.Dialog.Button.RelaunchNow=Igen, \u00fajraind\u00edt\u00e1s most Tracker.Dialog.Button.ShowPrefs=Nem, de mutasd meg a be\u00e1ll\u00edt\u00e1sokat Tracker.Dialog.Button.ContinueWithoutEngine=Nem, tov\u00e1bb vide\u00f3 n\u00e9lk\u00fcl Tracker.Dialog.EngineProblems.Message1=Egy vagy t\u00f6bb vide\u00f3lej\u00e1tsz\u00f3 telep\u00edtve van, de nem m\u0171k\u00f6dik. -Tracker.Dialog.EngineProblems.Message2=Tov\u00e1bbi inform\u00e1ci\u00f3\u00e9rt l\u00e1sd S\u00fag\u00f3|Diagnosztika|N\u00e9vjegy Xuggle vagy QuickTime. -Tracker.Dialog.ReplaceXuggle.Message1=Azt javasoljuk, hogy cser\u00e9ld ki a jelenlegi Xuggle vide\u00f3lej\u00e1tsz\u00f3t -Tracker.Dialog.ReplaceXuggle.Message2=a Xuggle 3.4-es verzi\u00f3val a Tracker \u00fajratelep\u00edt\u00e9s\u00e9vel (4.75-es verzi\u00f3 -Tracker.Dialog.ReplaceXuggle.Message3=vagy frissebb) \u00e9s a telep\u00edt\u00e9s opci\u00f3iban a Xuggle kiv\u00e1laszt\u00e1s\u00e1val. +Tracker.Dialog.EngineProblems.Message2=Tov\u00e1bbi inform\u00e1ci\u00f3\u00e9rt l\u00e1sd S\u00fag\u00f3|Diagnosztika|N\u00e9vjegy FFMPeg vagy QuickTime. +Tracker.Dialog.ReplaceFFMPeg.Message1=Azt javasoljuk, hogy cser\u00e9ld ki a jelenlegi FFMPeg vide\u00f3lej\u00e1tsz\u00f3t +Tracker.Dialog.ReplaceFFMPeg.Message2=a FFMPeg 3.4-es verzi\u00f3val a Tracker \u00fajratelep\u00edt\u00e9s\u00e9vel (4.75-es verzi\u00f3 +Tracker.Dialog.ReplaceFFMPeg.Message3=vagy frissebb) \u00e9s a telep\u00edt\u00e9s opci\u00f3iban a FFMPeg kiv\u00e1laszt\u00e1s\u00e1val. TrackerIO.Dialog.DurationIsConstant.Message=Minden k\u00e9pkocka id\u0151tartam egyenl\u0151 TrackerIO.ZIPResourceFilter.Description=Tracker ZIP f\u00e1jl (.trz) TToolbar.Button.Desktop.Tooltip=Mutasd az ezzel kapcsolatos HTML \u00e9s/vagy PDF dokumentumokat @@ -1282,7 +1282,7 @@ TableTrackView.Dialog.NameColumn.Title=Sz\u00f6vegoszlop TToolBar.MenuItem.StretchOff=Vissza\u00e1ll\u00edt\u00e1s # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Xuggle Verzi\u00f3 +PrefsDialog.Checkbox.WarnFFMPegVersion=FFMPeg Verzi\u00f3 PrefsDialog.Checkbox.WarnCopyFailed=F\u00e1jlm\u00e1sol\u00e1si hiba a vide\u00f3lej\u00e1tsz\u00f3ban Tracker.Dialog.FailedToCopy.Title=F\u00e1jlm\u00e1sol\u00e1si hiba Velocity.Dialog.Color.Title=Sebess\u00e9g sz\u00edn\u00e9nek kiv\u00e1laszt\u00e1sa diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_in.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_in.properties index 34ff49bd..30735f87 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_in.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_in.properties @@ -164,25 +164,25 @@ Tracker.Cursor.Crosshair.Description=Krusor salib untuk menandai titik Tracker.Action.AboutTracker=Perihal Tracker Tracker.Dialog.AboutTracker.Title=Tracker Tracker.Dialog.AboutTracker.Copyright=Alih Bahasa Tampilan Tracker oleh Wachid Qomaruddin, atas ijin Douglas Brown -Tracker.Dialog.AboutTracker.URL=http://physlets.org/tracker/ +Tracker.Dialog.AboutTracker.URL=http://www.ffmpeg.org/download.html. Tracker.Action.AboutJava=Perihal JAVA VM Tracker.Dialog.AboutTrackerOSPorg=Open Source Physics (OSP) Project -Tracker.Dialog.AboutTrackerOSPurl=http://www.opensourcephysics.org/ +Tracker.Dialog.AboutTrackerOSPurl=http://www.ffmpeg.org/download.html. Tracker.Dialog.AboutJava.Title=Perihal JAVA VM Tracker.Dialog.AboutJava.UnknownVersion=Versi Tidak Diketahui Tracker.Dialog.AboutJava.Message=Versi JAVA VM -Tracker.Dialog.AboutJava.URL=Update JAVA di http://java.sun.com/javase/downloads/ +Tracker.Dialog.AboutJava.URL=Update JAVA di http://www.ffmpeg.org/download.html. Tracker.Action.AboutQT=Perihal QuickTime Tracker.Dialog.AboutQT.Title=Perihal QuickTime Tracker.Dialog.AboutQT.Message.QTVersion=Versi QuickTime Tracker.Dialog.AboutQT.Message.QTJavaVersion=Versi QTJava Tracker.Dialog.AboutQT.Message.QTJavaPath=Alokasi path QTJava: Tracker.Dialog.NoQT.Title=Tidak Ditemukan QTJava.zip -Tracker.Dialog.NoQT.Message1=QuickTime untuk Java tidak terlihat telah terinstal atau bukan versi yang diinginkan, Instal QuickTime v7 keatas, atau download di http://www.apple.com/quicktime/download/ +Tracker.Dialog.NoQT.Message1=QuickTime untuk Java tidak terlihat telah terinstal atau bukan versi yang diinginkan, Instal QuickTime v7 keatas, atau download di http://www.ffmpeg.org/download.html. Tracker.Dialog.NoQT.Message2=Jika anda ingin menganalisis QuickTime movie, silakan instal ulang QuickTime v7 keatas atau Instal iTunes v7 keatas. Tracker.Dialog.NoQT.Message3=PENTING: QuickTime untuk JAVA Sun Microsystem harus dipilih ketika anda menginstal QuickTime. Tracker.Dialog.UpdateQT.Title=Update QTJava.zip -Tracker.Dialog.UpdateQT.Message1=Ditemukan Versi terbaru QuickTime.zip, silakan download di http://www.apple.com/quicktime/download/ +Tracker.Dialog.UpdateQT.Message1=Ditemukan Versi terbaru QuickTime.zip, silakan download di http://www.ffmpeg.org/download.html. Tracker.Dialog.UpdateQT.Message2=Anda ingin memperbaharui berkas keluaran? Tracker.Dialog.CopyQT.Title=Salin QTJava.zip Tracker.Dialog.CopyQT.Message1=QuickTime telah terinstal, tetapi sebelum menggunakan Tracker dan anda harus : @@ -191,7 +191,7 @@ Tracker.Dialog.CopyQT.Message3= ke Tracker.Dialog.CopyQT.Message4= 2. Tracker harus direstart ulang. Tracker.Dialog.CopyQT.Message5=Ada ingin menyalin QTJava.zip sekarang? Tracker.Dialog.CopyFailed.Title=Penyalinan gagal. Periksa versi QuickTime anda. -Tracker.Dialog.CopyFailed.Message=QTJava.zip tidak dapat disalin. Periksa QuickTime anda sekali lagi atau gunakan iTunes v7. Silakan download di http://www.apple.com/quicktime/download/ +Tracker.Dialog.CopyFailed.Message=QTJava.zip tidak dapat disalin. Periksa QuickTime anda sekali lagi atau gunakan iTunes v7. Silakan download di http://www.ffmpeg.org/download.html. Tracker.Dialog.CopiedTo.Title=Proses penyalinan berhasil. Selamat!. Tracker.Dialog.CopiedTo.Message1=QTJava.zip telah sukses di salin Tracker.Dialog.CopiedTo.Message2=Tracker harus direstart ulang dan akan keluar sekarang. @@ -738,7 +738,7 @@ PrefsDialog.Checkbox.DefaultSize=Gunakan default PrefsDialog.Checkbox.HintsOn=Tampilkan petunjuk secara default PrefsDialog.Tab.Video.Title=Video PrefsDialog.VideoPref.BorderTitle=Mesin Video -PrefsDialog.Button.Xuggle=Xuggle +PrefsDialog.Button.FFMPeg=FFMPeg PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=Pengaturan memori tidak tersedia saat menggunakan Web Start . PrefsDialog.Dialog.WebStart.Title=Mode Web Start @@ -753,9 +753,9 @@ PrefsDialog.Upgrades.Weekly=Mingguan PrefsDialog.Upgrades.Monthly=Bulanan PrefsDialog.Upgrades.Never=Tidak pernah PrefsDialog.Button.CheckForUpgrade=Periksa Sekarang -PrefsDialog.Xuggle.Speed.BorderTitle=Putar Ulang Video Xuggle -PrefsDialog.Xuggle.Slow=Halus (mungkin lambat) -PrefsDialog.Xuggle.Fast=Cepat (mungkin cepat) +PrefsDialog.FFMPeg.Speed.BorderTitle=Putar Ulang Video FFMPeg +PrefsDialog.FFMPeg.Slow=Halus (mungkin lambat) +PrefsDialog.FFMPeg.Fast=Cepat (mungkin cepat) PrefsDialog.CalibrationTool.BorderTitle=Alat Kalibrasi Standar Protractor.Name=Busur Derajat Protractor.New.Name=busur derajat @@ -835,23 +835,23 @@ TMenuBar.Menu.MeasuringTools=Perangkat Pengukur TMenuBar.Menu.AngleUnits=Satuan Sudut TMenuBar.MenuItem.Degrees=Derajat TMenuBar.MenuItem.Radians=Radian -Tracker.Dialog.NoXuggle.Title=Xuggle tidak ditemukan -Tracker.Dialog.NoXuggle.Message1=Xuggle (mesin video cross-platform) tidak diinstal . -Tracker.Dialog.NoXuggle.Message2=Download Xuggle dari http://www.xuggle.com/xuggler/downloads/ . -Tracker.Action.AboutXuggle=Perihal Xuggle -Tracker.Dialog.AboutXuggle.Title=Perihal Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=Xuggle versi -Tracker.Dialog.AboutXuggle.Message.Home=Home Xuggle : -Tracker.Dialog.AboutXuggle.Message.Path=Jalur Xuggle.jar : +Tracker.Dialog.NoFFMPeg.Title=FFMPeg tidak ditemukan +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (mesin video cross-platform) tidak diinstal . +Tracker.Dialog.NoFFMPeg.Message2=Download FFMPeg dari http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=Perihal FFMPeg +Tracker.Dialog.AboutFFMPeg.Title=Perihal FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=FFMPeg versi +Tracker.Dialog.AboutFFMPeg.Message.Home=Home FFMPeg : +Tracker.Dialog.AboutFFMPeg.Message.Path=Jalur FFMPeg.jar : Tracker.Dialog.NoVideoEngine.Message1=mesin video terinstal . Tanpa satu, Anda Tracker.Dialog.NoVideoEngine.Message2=hanya dapat membuka gambar (JPEG , PNG) dan animasi GIF . -Tracker.Dialog.NoVideoEngine.Message3=Direkomendasikan: instal ulang Tracker dengan mesin video Xuggle . +Tracker.Dialog.NoVideoEngine.Message3=Direkomendasikan: instal ulang Tracker dengan mesin video FFMPeg . Tracker.Dialog.NoVideoEngine.Title=Tidak Ada Mesin Video -Tracker.Dialog.NoXuggle.Message1=Xuggle tidak bekerja dengan benar. Pastikan yang diperlukan -Tracker.Dialog.NoXuggle.Message2=Berkas xuggle.jar berada di folder Tracker. Untuk rincian , -Tracker.Dialog.NoXuggle.Message3=lihat Tracker_README.txt di folder Tracker -Tracker.Dialog.NoXuggle.Message4=Untuk menginstal Xuggle, download installer Tracker terbaru dari -Tracker.Dialog.NoXuggle.Title=Xuggle Tidak Tersedia +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg tidak bekerja dengan benar. Pastikan yang diperlukan +Tracker.Dialog.NoFFMPeg.Message2=Berkas ffmpeg.jar berada di folder Tracker. Untuk rincian , +Tracker.Dialog.NoFFMPeg.Message3=lihat Tracker_README.txt di folder Tracker +Tracker.Dialog.NoFFMPeg.Message4=Untuk menginstal FFMPeg, download installer Tracker terbaru dari +Tracker.Dialog.NoFFMPeg.Title=FFMPeg Tidak Tersedia Tracker.About.DefaultLocale=Bahasa default Tracker.About.CurrentLanguage=Bahasa Tracker.Dialog.InsufficientMemory.Title=Memori tidak cukup @@ -897,7 +897,7 @@ TTrackBar.Memory.Menu.SetSize=Atur ukuran memori TTrackBar.Button.Version=Sekarang tersedia: versi TTrackBar.Popup.MenuItem.Upgrade=Tingkatkan Sekarang TTrackBar.Popup.MenuItem.Ignore=Abaikan -XuggleVideo.MenuItem.SmoothPlay=Bermain Halus (mungkin lambat) +FFMPegVideo.MenuItem.SmoothPlay=Bermain Halus (mungkin lambat) # Penambahan oleh Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=Pita Kalibrasi @@ -926,13 +926,13 @@ WorldTView.Button.World=Dunia # Penambahan oleh Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=Peringatan PrefsDialog.Checkbox.WarnIfNoEngine=Tidak ada mesin video yang -PrefsDialog.Checkbox.WarnIfXuggleError=kesalahan non-fatal Xuggle +PrefsDialog.Checkbox.WarnIfFFMPegError=kesalahan non-fatal FFMPeg PropertiesDialog.Title=Properti PropertiesDialog.Label.Author=Penulis PropertiesDialog.Label.Contact=Kontak TActions.Action.Properties=Properti TActions.Action.OpenBrowser=Buka Peramban Pustaka -TFrame.Progress.Xuggle=Xuggle pemuatan frame +TFrame.Progress.FFMPeg=FFMPeg pemuatan frame TFrame.Progress.ClickToCancel=(klik untuk membatalkan ) TFrame.Dialog.StalledVideo.Title=Error Saat Memuat Video TFrame.Dialog.StalledVideo.Message0=video telah terhenti saat dimuat. Ini mungkin sementara. @@ -945,12 +945,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=Berhenti TFrame.Dialog.StalledVideo.Button.Wait=Tunggu Tracker.Dialog.NoVideoEngine.Checkbox=Jangan tampilkan ini lagi TrackerIO.ZipFileFilter.Description=Berkas ZIP (*.zip) -TrackerIO.Dialog.ErrorFFMPEG.Message1=Xuggle telah mengalami kesalahan saat membuka video ini : +TrackerIO.Dialog.ErrorFFMPEG.Message1=FFMPeg telah mengalami kesalahan saat membuka video ini : TrackerIO.Dialog.ErrorFFMPEG.Message2=Tidak semua kesalahan adalah fatal. Untuk pesan kesalahan penuh, pilih Panduan | Log Pesan . -TrackerIO.Dialog.ErrorFFMPEG.Message3=Jika Xuggle gagal, Anda mungkin dapat membuka video dengan QuickTime . +TrackerIO.Dialog.ErrorFFMPEG.Message3=Jika FFMPeg gagal, Anda mungkin dapat membuka video dengan QuickTime . TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Catatan: Pada Mac OSX ini membutuhkan menjalankan Tracker dala Java VMm 32-bit. -TrackerIO.Dialog.ErrorFFMPEG.Title=Kesalahan Xuggle -TrackerIO.ErrorFFMPEG.LogMessage=Untuk lebih jelasnya, aktifkan peringatan Xuggle dalam preferensi dialog (Pembenahan | Preferensi ) . +TrackerIO.Dialog.ErrorFFMPEG.Title=Kesalahan FFMPeg +TrackerIO.ErrorFFMPEG.LogMessage=Untuk lebih jelasnya, aktifkan peringatan FFMPeg dalam preferensi dialog (Pembenahan | Preferensi ) . TToolBar.Button.OpenBrowser.Tooltip=Buka Peramban Pustaka Digital OSP # Penambahan oleh Doug Brown 2011-07-20 @@ -1206,17 +1206,17 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=Variabel durasi frame PrefsDialog.Button.NoEngine=Tidak ada PrefsDialog.Dialog.SwitchToQT.Message=Beralih ke QuickTime juga perubahan VM Java untuk 32-bit. -PrefsDialog.Dialog.SwitchToXuggle32.Message=Beralih ke Xuggle juga perubahan VM Java untuk 32-bit. -PrefsDialog.Dialog.SwitchToXuggle64.Message=Beralih ke Xuggle juga perubahan VM Java untuk 64-bit. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=Beralih ke FFMPeg juga perubahan VM Java untuk 32-bit. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=Beralih ke FFMPeg juga perubahan VM Java untuk 64-bit. PrefsDialog.Dialog.SwitchVM.Title=Java VM Berubah PrefsDialog.Dialog.SwitchTo32.Message=Beralih ke 32-bit Java VM juga mengubah mesin video QuickTime. -PrefsDialog.Dialog.SwitchTo64.Message=Beralih ke 64-bit Java VM juga mengubah mesin video Xuggle. +PrefsDialog.Dialog.SwitchTo64.Message=Beralih ke 64-bit Java VM juga mengubah mesin video FFMPeg. PrefsDialog.Dialog.SwitchEngine.Title=Video Mesin Berubah PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=mesin ada video yang tersedia untuk 64-bit Java VM. Anda akan PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=masih dapat gambar terbuka (JPEG , PNG) dan animasi GIF. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Anda yakin ingin beralih ke VM 64-bit? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=Tidak ada 64-bit Video Mesin -PrefsDialog.Dialog.No32bitVMXuggle.Message=A 32-bit Java VM harus diinstal sebelum Xuggle dapat digunakan. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=A 32-bit Java VM harus diinstal sebelum FFMPeg dapat digunakan. PrefsDialog.Dialog.No32bitVMQT.Message=A 32-bit Java VM harus diinstal sebelum QuickTime dapat digunakan. PrefsDialog.Dialog.No32bitVM.Message=Untuk informasi lebih lanjut, lihat Bantuan Tracker: Instalasi. PrefsDialog.Dialog.No32bitVM.Title=Diperlukan VM 32-bit @@ -1232,10 +1232,10 @@ Tracker.Dialog.Button.RelaunchNow=Ya, peluncuran kembali sekarang Tracker.Dialog.Button.ShowPrefs=Tidak, tapi melalui preferensi Tracker.Dialog.Button.ContinueWithoutEngine=Tidak, lanjutkan tanpa video Tracker.Dialog.EngineProblems.Message1=Satu atau lebih mesin video terinstal tapi tidak bekerja . -Tracker.Dialog.EngineProblems.Message2=Untuk informasi lebih lanjut lihat Bantuan | Diagnostik | Tentang Xuggle atau QuickTime . -Tracker.Dialog.ReplaceXuggle.Message1=Kami sarankan anda mengganti mesin video Xuggle anda saat ini -Tracker.Dialog.ReplaceXuggle.Message2=Xuggle dengan versi 3.4 dengan menginstall ulang Tracker (versi 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=atau di atasnya) dan memilih Xuggle dalam pilihan instalasi. +Tracker.Dialog.EngineProblems.Message2=Untuk informasi lebih lanjut lihat Bantuan | Diagnostik | Tentang FFMPeg atau QuickTime . +Tracker.Dialog.ReplaceFFMPeg.Message1=Kami sarankan anda mengganti mesin video FFMPeg anda saat ini +Tracker.Dialog.ReplaceFFMPeg.Message2=FFMPeg dengan versi 3.4 dengan menginstall ulang Tracker (versi 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=atau di atasnya) dan memilih FFMPeg dalam pilihan instalasi. TrackerIO.Dialog.DurationIsConstant.Message=Semua durasi frame sama (fps konstan) . TrackerIO.ZIPResourceFilter.Description=Tracker Berkas ZIP (*.TRZ) TToolbar.Button.Desktop.Tooltip=Tampilan tambahan HTML dan atau dokumen PDF @@ -1301,7 +1301,7 @@ TableTrackView.Dialog.NameColumn.Title=Text Column TToolBar.MenuItem.StretchOff=Reset # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Xuggle Version +PrefsDialog.Checkbox.WarnFFMPegVersion=FFMPeg Version PrefsDialog.Checkbox.WarnCopyFailed=Video Engine File Copy Errors Tracker.Dialog.FailedToCopy.Title=File Copy Error Velocity.Dialog.Color.Title=Choose Velocity Color diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_it.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_it.properties index a0dfaf0a..18f162f0 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_it.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_it.properties @@ -1,12 +1,12 @@ # This is the italian tracker.properties file # Translated by Marco Ciampa 2007-2018 # this file should be ISO-8859-1 encoded -# accented chars test: àèéìòùÀÈÉÌÒÙ +# accented chars test: ïż½ïż½ïż½ïż½ïż½ïż½ïż½ïż½ïż½ïż½ïż½ïż½ # # Little list of terms usage: # # calibration stick/tape: asta/nastro di calibrazione -# world units: unità fisiche (contrapposte ai pixel...) +# world units: unitïż½ fisiche (contrapposte ai pixel...) # automark: automarcatura # handle: appiglio # frame: quadro @@ -69,7 +69,7 @@ Footprint.BigArrow=freccia grande Footprint.BigDashArrow=freccia grande tratteggiata LineProfile.Name=Profilo linea LineProfile.New.Name=profilo -LineProfile.Data.Brightness=luminosità +LineProfile.Data.Brightness=luminositïż½ LineProfile.Data.Pixel=pixel LineProfile.Data.Red=rosso LineProfile.Data.Green=verde @@ -85,7 +85,7 @@ PlotTrackView.Button.PlotCount.ToolTip=Selezione numero di punti PointMass.Name=Punto di massa PointMass.New.Name=massa PointMass.MenuItem.VectorsToPosition=Alla posizione -PointMass.MenuItem.Velocity=Velocità +PointMass.MenuItem.Velocity=Velocitïż½ PointMass.MenuItem.Acceleration=Accelerazione Star.Name=Stella Star.New.Name=stella @@ -116,7 +116,7 @@ TActions.Action.ImportVideo=Importa... TActions.Action.CloseVideo=Chiudi TActions.Action.CloseAll=Chiudi tutto TActions.Action.Exit=Esci -TActions.Dialog.PrintError.Message=Si è verificato un errore di stampa. +TActions.Dialog.PrintError.Message=Si ïż½ verificato un errore di stampa. TActions.Dialog.PrintError.Title=Errore di stampa TActions.Dialog.Description.Title=Descrizione: TActions.Dialog.DeleteLockedTracks.Message=Alcune tracce sono bloccate. Eliminarle comunque? @@ -138,7 +138,7 @@ TMenuBar.Menu.Tracks=Tracce TMenuBar.Menu.Coords=Coordinate TMenuBar.Menu.Window=Finestra TMenuBar.Menu.Help=Aiuto -TMenuBar.MenuItem.EditProperties=Proprietà... +TMenuBar.MenuItem.EditProperties=Proprietïż½... TMenuBar.MenuItem.VideoVisible=Visibile TMenuBar.MenuItem.VideoFilters=Filtri TMenuBar.MenuItem.NewVideoFilter=Nuovo @@ -167,8 +167,8 @@ TrackControl.Button.StretchVectors.ToolTip=Stendi vettori TrackControl.Button.Accelerations.ToolTip=Accelerazioni TrackControl.Button.Xmass.ToolTip=Moltiplica per la massa TrackControl.Button.Vectors.ToolTip=Vettori -TrackControl.Button.Velocities.ToolTip=Velocità -TrackControl.Button.Properties.ToolTip=Proprietà +TrackControl.Button.Velocities.ToolTip=Velocitïż½ +TrackControl.Button.Properties.ToolTip=Proprietïż½ TrackControl.Button.Positions.ToolTip=Posizioni Tracker.Popup.MenuItem.Snapshot=Istantanea Tracker.Popup.MenuItem.Help=Aiuto... @@ -189,19 +189,19 @@ Tracker.Dialog.NoQT.Message1=QuickTime per Java non sembra sia installato. Tracker.Dialog.NoQT.Message2=Se si desidera analizzare video formato QuickTime, reinstallare QuickTime. Tracker.Dialog.NoQT.Message3=NOTA: QuickTime per Java DEVE ESSERE SELEZIONATO mentre si installa QuickTime. Tracker.Dialog.UpdateQT.Title=Aggiornamento QTJava.zip -Tracker.Dialog.UpdateQT.Message1=Una nuova versione di QTJava.zip è stata rilevata su +Tracker.Dialog.UpdateQT.Message1=Una nuova versione di QTJava.zip ïż½ stata rilevata su Tracker.Dialog.UpdateQT.Message2=Vuoi aggiornare i file esistenti? Tracker.Dialog.CopyQT.Title=Copia QTJava.zip -Tracker.Dialog.CopyQT.Message1=QuickTime è installato, ma prima che Tracker possa usarlo: +Tracker.Dialog.CopyQT.Message1=QuickTime ïż½ installato, ma prima che Tracker possa usarlo: Tracker.Dialog.CopyQT.Message2= 1. QTJava.zip deve essere copiato da Tracker.Dialog.CopyQT.Message3= a Tracker.Dialog.CopyQT.Message4= 2. Tracker deve essere riavviato. Tracker.Dialog.CopyQT.Message5=Vuoi copiare ora QTJava.zip? Tracker.Dialog.CopyFailed.Title=Copia fallita -Tracker.Dialog.CopyFailed.Message=QTJava.zip non può essere copiato. +Tracker.Dialog.CopyFailed.Message=QTJava.zip non puïż½ essere copiato. Tracker.Dialog.CopiedTo.Title=Copia avvenuta con successo -Tracker.Dialog.CopiedTo.Message1=QTJava.zip è stato copiato con successo su -Tracker.Dialog.CopiedTo.Message2=Tracker deve essere riavviato e ora terminerà. +Tracker.Dialog.CopiedTo.Message1=QTJava.zip ïż½ stato copiato con successo su +Tracker.Dialog.CopiedTo.Message2=Tracker deve essere riavviato e ora terminerïż½. Tracker.Splash.Loading=Caricamento TrackerIO.Dialog.Import.Title=Importa TrackerIO.Dialog.Import.Message=Seleziona elementi da importare @@ -209,15 +209,15 @@ TrackerIO.Dialog.ImportVideo.Title=Importa Video TrackerIO.Dialog.Export.Title=Esporta TrackerIO.Dialog.Export.Message=Seleziona elementi da esportare TrackerIO.Dialog.ReplaceFile.Title=Rimpiazzare il file esistente? -TrackerIO.Dialog.ReplaceFile.Message=esiste già. Vuoi sostituirlo? +TrackerIO.Dialog.ReplaceFile.Message=esiste giïż½. Vuoi sostituirlo? TrackerIO.Dialog.NotTrackerXML.Title=XML errato TrackerIO.Dialog.NotTrackerXML.Message=contiene dati xml di una diversa applicazione. -TrackerIO.Dialog.BadVideo.Message=Il video non può essere aperto: +TrackerIO.Dialog.BadVideo.Message=Il video non puïż½ essere aperto: TrackerPanel.NewTab.Name=Senza titolo TrackerPanel.DragToMark.Hint=Maiusc-trascina per marcare TrackerPanel.ClickToMark.Hint=Maiusc-clic per marcare TrackerPanel.Dialog.LoadFailed.Title=File non caricato -TrackerPanel.Dialog.LoadFailed.Message=Il file non può essere caricato: +TrackerPanel.Dialog.LoadFailed.Message=Il file non puïż½ essere caricato: TrackerPanel.Dialog.SaveChanges.Title=Salva i cambiamenti TrackerPanel.Dialog.SaveChanges.Message=Salva i cambiamenti su TrackPlottingPanel.Popup.MenuItem.Lines=Linee @@ -320,18 +320,18 @@ TMenuBar.MenuItem.CopyMainView=Vista principale TMenuBar.MenuItem.CopyFrame=Quadro TMenuBar.MenuItem.PrintFrame=Stampa quadro... TrackerIO.Dialog.AddImage.Title=Aggiungi immagine -TTrack.Dialog.Name.BadName=già preso! Scegli un altro nome. +TTrack.Dialog.Name.BadName=giïż½ preso! Scegli un altro nome. VectorStep.Label.Momentum=p VectorStep.Label.Velocity=v VectorStep.Label.NetForce=forza rete VectorStep.Label.Acceleration=a # Additions by Doug Brown 2007-02-19 -PlotTView.Label.NoData=Questa è la vista grafici dei dati di traccia. -TableTView.Label.NoData=Questa è la vista tabella dei dati di traccia. -TrackerPanel.Message.NoData0=Questa è la vista principale di video e tracce. +PlotTView.Label.NoData=Questa ïż½ la vista grafici dei dati di traccia. +TableTView.Label.NoData=Questa ïż½ la vista tabella dei dati di traccia. +TrackerPanel.Message.NoData0=Questa ïż½ la vista principale di video e tracce. TrackerPanel.Message.NoData1=Scegli File|Apri o Tracce|Nuovo per partire. -WorldTView.Label.NoData=Questa è la vista globale di video e tracce. +WorldTView.Label.NoData=Questa ïż½ la vista globale di video e tracce. # Additions by Doug Brown 2007-03-03 DynamicParticle.Label.Solver=Risolutore: @@ -371,7 +371,7 @@ LineProfile.Data.Description.2=componente-y posizione LineProfile.Data.Description.3=rosso LineProfile.Data.Description.4=verde LineProfile.Data.Description.5=blu -LineProfile.Data.Description.6=luminosità percepita +LineProfile.Data.Description.6=luminositïż½ percepita LineProfile.Data.Description.7=spessore linea ParticleModel.MenuItem.TraceVisible=Traccia visibile ParticleModel.MenuItem.StepsVisible=Passi visibili @@ -380,16 +380,16 @@ PointMass.Data.Description.1=componente-x posizione PointMass.Data.Description.2=componente-y posizione PointMass.Data.Description.3=magnitudo posizione PointMass.Data.Description.4=angolo posizione -PointMass.Data.Description.5=componente-x velocità -PointMass.Data.Description.6=componente-y velocità -PointMass.Data.Description.7=magnitudo velocità -PointMass.Data.Description.8=angolo velocità +PointMass.Data.Description.5=componente-x velocitïż½ +PointMass.Data.Description.6=componente-y velocitïż½ +PointMass.Data.Description.7=magnitudo velocitïż½ +PointMass.Data.Description.8=angolo velocitïż½ PointMass.Data.Description.9=componente-x accelerazione PointMass.Data.Description.10=componente-y accelerazione PointMass.Data.Description.11=magnitudo accelerazione PointMass.Data.Description.12=angolo accelerazione PointMass.Data.Description.13=angolo rotazione -PointMass.Data.Description.14=velocità angolare +PointMass.Data.Description.14=velocitïż½ angolare PointMass.Data.Description.15=accelerazione angolare PointMass.Data.Description.16=nomero passo PointMass.Data.Description.17=numero quadro @@ -404,7 +404,7 @@ RGBRegion.Data.Description.2=componente-y posizione RGBRegion.Data.Description.3=rosso RGBRegion.Data.Description.4=verde RGBRegion.Data.Description.5=blu -RGBRegion.Data.Description.6=luminosità percepita +RGBRegion.Data.Description.6=luminositïż½ percepita RGBRegion.Data.Description.7=conteggio pixel RGBRegion.Data.Description.8=numero passo RGBRegion.Data.Description.9=numero quadro @@ -427,8 +427,8 @@ DynamicParticle.ForceFunction.X.Description=Componente-x forza DynamicParticle.ForceFunction.Y.Description=Componente-y forza DynamicParticle.Parameter.InitialX.Description=Componente-x posizione iniziale DynamicParticle.Parameter.InitialY.Description=Componente-y posizione iniziale -DynamicParticle.Parameter.InitialVelocityX.Description=Componente-x velocità iniziale -DynamicParticle.Parameter.InitialVelocityY.Description=Componente-y velocità iniziale +DynamicParticle.Parameter.InitialVelocityX.Description=Componente-x velocitïż½ iniziale +DynamicParticle.Parameter.InitialVelocityY.Description=Componente-y velocitïż½ iniziale TrackerPanel.ModelBuilder.Title=Costruttore modello TrackerPanel.DataBuilder.Title=Costruttore dati TrackControl.TrailMenu.NoTrail=Nessuna traccia @@ -465,13 +465,13 @@ TapeMeasure.Label.Length=lunghezza scalata TapeMeasure.Label.TapeAngle=angolo nastro TapeMeasure.Label.ArcAngle=angolo goniometro TrackerIO.Dialog.NotAnImage.Title=Tipo file non corretto -TrackerIO.Dialog.NotAnImage.Message1=non è un'immagine JPG o GIF. +TrackerIO.Dialog.NotAnImage.Message1=non ïż½ un'immagine JPG o GIF. TrackerIO.Dialog.NotAnImage.Message2=Continuare? TToolBar.Button.Zoom.Tooltip=Strumento Zoom (scorciatoia: tasto Z) TrackChooserTView.DropDown.Tooltip=Seleziona una traccia TapeMeasure.Field.ArcAngle.Tooltip=Angolo dal nastro al braccio del goniometro TapeMeasure.Field.TapeAngle.Tooltip=Angolo dall'asse x positivo al nastro -TapeMeasure.Field.Magnitude.Tooltip=Lunghezza del nastro in unità scalate +TapeMeasure.Field.Magnitude.Tooltip=Lunghezza del nastro in unitïż½ scalate TapeMeasure.Readout.Magnitude.Name=lettura lunghezza TapeMeasure.Readout.Magnitude.Hint=clic per impostare la scala TapeMeasure.Readout.Angle.Name=lettura angolo @@ -489,10 +489,10 @@ Vector.Handle.Hint=trascina per spostare il vettore Vector.ShortHandle.Hint=trascina per spostare, alt-clic per il suggerimento di selezione PointMass.Position.Name=posizione PointMass.Position.Hint=trascina o inserisci le coordinate per cambiare la posizione -PointMass.Velocity.Name=velocità +PointMass.Velocity.Name=velocitïż½ PointMass.Acceleration.Name=accelerazione PointMass.Vector.Hint=trascina per spostare -PointMass.Position.Locked.Hint=clic per selezionare--non può essere trascinato +PointMass.Position.Locked.Hint=clic per selezionare--non puïż½ essere trascinato CoordAxes.Handle.Name=asse+x CoordAxes.Handle.Hint=trascina per cambiare inclinazione CoordAxes.Origin.Name=origine @@ -509,7 +509,7 @@ LineProfile.Handle.Name=appiglio LineProfile.Handle.Hint=trascina per spostare la linea PointMass.Hint=imposta la massa sulla barra degli strumenti PointMass.Unmarked.Hint=, maiusc-clic per marcare le posizioni -TTrack.Unselected.Hint=clic per selezionare e/o impostare le proprietà +TTrack.Unselected.Hint=clic per selezionare e/o impostare le proprietïż½ Vector.Unmarked.Hint=maiusc-trascina per disegnare i vettori OffsetOrigin.Unmarked.Hint=maiusc-clic per marcare il punto di scostamento Calibration.Unmarked.Hint=maiusc-clic per marcare il primo punto @@ -536,7 +536,7 @@ TrackerPanel.CalibrateVideo.Hint=identifica un particolare del video con lunghez TrackerPanel.NoTracks.Hint=crea una nuova traccia per misurare i particolari interessanti del video TrackerPanel.SetClip.Hint=imposta o revisiona le impostazioni dei clip video nel clip inspector TrackerPanel.ShowAxes.Hint=imposta l'origine e l'angolo degli assi delle coordinate -VideoPlayer.Step.Hint=passo avanti (scorciatoia: tasto PagGiù) +VideoPlayer.Step.Hint=passo avanti (scorciatoia: tasto PagGiïż½) VideoPlayer.Back.Hint=passo indietro (scorciatoia: tasto PagSu) TrackerPanel.DVVideo.Hint=applica un filtro di ridimensionamento per correggere le distorsioni nei video in formato DV TrackerIO.DataFileFilter.Description=File di Tracker @@ -556,8 +556,8 @@ DynamicParticle.Editor.Button.Cartesian=Cartesiano DynamicParticle.Editor.Button.Polar=Polare DynamicParticle.Parameter.InitialR.Description=Raggio iniziale DynamicParticle.Parameter.InitialTheta.Description=Angolo iniziale -DynamicParticle.Parameter.InitialVelocityR.Description=Velocità radiale iniziale -DynamicParticle.Parameter.InitialOmega.Description=Velocità angolare iniziale +DynamicParticle.Parameter.InitialVelocityR.Description=Velocitïż½ radiale iniziale +DynamicParticle.Parameter.InitialOmega.Description=Velocitïż½ angolare iniziale DynamicParticle.ForceFunction.R.Description=Forza la componente radiale DynamicParticle.ForceFunction.Theta.Description=Forza la componente tangenziale DynamicParticlePolar.Name=Modello di particella dinamica (Polare) @@ -589,23 +589,23 @@ AutoTracker.TabbedPane.TabTitle.Settings=Accetta AutoTracker.TabbedPane.TabTitle.Search=Cerca AutoTracker.Info.GetStarted=Fare clic sul particolare del video che si desidera autotracciare. AutoTracker.Info.Mask1=La maschera deifinisce l'immagine da confrontare in ogni quadro video. Spostare o ridimensionare la maschera trascinandone rispettivamente il centro o l'appiglio. -AutoTracker.Info.Mask2=Suggerimento: la maschera non necessita di essere larga né di includere l'intero oggetto. Un particolare che sia unico e che abbia bordi ad elevato contrasto è generalmente una buona scelta. -AutoTracker.Info.MaskLocked1=La maschera è in uso ed è bloccata. +AutoTracker.Info.Mask2=Suggerimento: la maschera non necessita di essere larga nïż½ di includere l'intero oggetto. Un particolare che sia unico e che abbia bordi ad elevato contrasto ïż½ generalmente una buona scelta. +AutoTracker.Info.MaskLocked1=La maschera ïż½ in uso ed ïż½ bloccata. AutoTracker.Info.MaskLocked2=Fare clic sul pulsante Reimposta per cancellare tutti i passi, sbloccare la maschera e ricominciare. -AutoTracker.Info.Target1=Il bersaglio è dove i passi vengono marcati relativamente alla maschera. Spostare il bersaglio trascinandolo. -AutoTracker.Info.Target2=Suggerimento: è possibile regolare la posizione del bersaglio anche dopo aver marcato dei passi. I passi esistenti si muoveranno automaticamente con il bersaglio. -AutoTracker.Info.TargetLocked=Il bersaglio è in uso e legato alle posizioni dei passi esistenti. Spostandolo si sposteranno anche i passi. +AutoTracker.Info.Target1=Il bersaglio ïż½ dove i passi vengono marcati relativamente alla maschera. Spostare il bersaglio trascinandolo. +AutoTracker.Info.Target2=Suggerimento: ïż½ possibile regolare la posizione del bersaglio anche dopo aver marcato dei passi. I passi esistenti si muoveranno automaticamente con il bersaglio. +AutoTracker.Info.TargetLocked=Il bersaglio ïż½ in uso e legato alle posizioni dei passi esistenti. Spostandolo si sposteranno anche i passi. AutoTracker.Info.Settings1=Verifica che i punteggi sopra il livello di accettazione mostrati siano marcati automaticamente. -AutoTracker.Info.Settings2=Suggerimento: riducendo il livello di accettazione si velocizza il processo di marcatura ma si aumenta la probabilità di introdurre degli errori. -AutoTracker.Info.Search1=Il rettangolo mostrato verrà ricercato per il miglior riscontro. Spostare o ridimensionare l'area di ricerca spostandone il centro o il suo appiglio. +AutoTracker.Info.Settings2=Suggerimento: riducendo il livello di accettazione si velocizza il processo di marcatura ma si aumenta la probabilitïż½ di introdurre degli errori. +AutoTracker.Info.Search1=Il rettangolo mostrato verrïż½ ricercato per il miglior riscontro. Spostare o ridimensionare l'area di ricerca spostandone il centro o il suo appiglio. AutoTracker.Info.Search2=Suggerimento: l'area di ricerca non necessita di essere larga. Dopo aver trovato i primi due riscontri, un algoritmo di ricerca predittivo sposta l'area di ricerca alle posizioni di riscontro estrapolate. AutoTracker.Info.Frame=Quadro -AutoTracker.Info.Match=Il riscontro mostrato è stato automaticamente marcato alla posizione del bersaglio. -AutoTracker.Info.Possible=è stato trovato un possibile riscontro nell'area di ricerca mostrata. La vostra opinione è: -AutoTracker.Info.NoMatch=Non è stato trovato nessun riscontro nell'area di ricerca mostrata. La vostra opinione è: -AutoTracker.Info.Outside=L'area di ricerca è fuori dall'immagine. La vostra opinione è: -AutoTracker.Info.Accepted=Il riscontro mostrato è stato accettato dall'utente. -AutoTracker.Info.MarkedByUser=Il passo è stato marcato manualmente dall'utente. +AutoTracker.Info.Match=Il riscontro mostrato ïż½ stato automaticamente marcato alla posizione del bersaglio. +AutoTracker.Info.Possible=ïż½ stato trovato un possibile riscontro nell'area di ricerca mostrata. La vostra opinione ïż½: +AutoTracker.Info.NoMatch=Non ïż½ stato trovato nessun riscontro nell'area di ricerca mostrata. La vostra opinione ïż½: +AutoTracker.Info.Outside=L'area di ricerca ïż½ fuori dall'immagine. La vostra opinione ïż½: +AutoTracker.Info.Accepted=Il riscontro mostrato ïż½ stato accettato dall'utente. +AutoTracker.Info.MarkedByUser=Il passo ïż½ stato marcato manualmente dall'utente. AutoTracker.Info.NoVideo=L'autotracciamento richiede un video. Importare un video o chiudere questo autotracciatore. AutoTracker.Info.Height=altezza AutoTracker.Info.Width=larghezza @@ -625,7 +625,7 @@ FileDropHandler.Dialog.BadFile.Title=File non riconosciuto # Additions by Doug Brown 2009-10-27 Dialog.Button.Apply=Applica -DynamicParticle.Dialog.Delete.Message=Cancellando questa particella la si rimuoverà da un sistema. Cancellare? +DynamicParticle.Dialog.Delete.Message=Cancellando questa particella la si rimuoverïż½ da un sistema. Cancellare? DynamicParticle.Dialog.Delete.Title=Sistema dinamico DynamicParticle.System.In=in DynamicSystem.Empty=vuoto @@ -659,7 +659,7 @@ TMenuBar.MenuItem.Empty=(vuoto) TTrackBar.Button.Memory=uso della memoria: TTrackBar.Button.Memory.Tooltip=Monitora e gestisce la memoria TTrackBar.Memory.PopupItem.Launch=Esegue Tracker con memoria -TButton.Track.ToolTip=Imposta le proprietà di +TButton.Track.ToolTip=Imposta le proprietïż½ di Tracker.Dialog.OutOfMemory.Message1=Tracker ha esaurito la memoria. Tracker.Dialog.OutOfMemory.Message2=Fare clic sul pulsante della memoria per le opzioni. Tracker.Dialog.OutOfMemory.Title=Memoria esaurita @@ -669,11 +669,11 @@ AutoTracker.Wizard.Checkbox.LookAhead=Previsione AutoTracker.Label.Original=Iniziale AutoTracker.Label.NoMask=no AutoTracker.Label.Rate=Frequenza di evoluzione: -AutoTracker.Info.Mask3=Suggerimento: non è necessario che il modello sia grande né che includa completamente l'oggetto. In genere funziona bene un particolare univoco con bordi ben contrastati. +AutoTracker.Info.Mask3=Suggerimento: non ïż½ necessario che il modello sia grande nïż½ che includa completamente l'oggetto. In genere funziona bene un particolare univoco con bordi ben contrastati. AutoTracker.Wizard.Checkbox.XAxis=Solo asse X -AutoTracker.Info.SearchOnAxis1=L'asse x all'interno del rettangolo mostrato, verrà scansionato per trovare la migliore corrispondenza. Spostare o ridimensionare l'area di ricerca trascinando rispettivamente il suo centro o il suo appiglio. -AutoTracker.Info.PossibleOnAxis=Nell'area di ricerca mostrata è stato trovato un possibile riscontro lungo l'asse x. Le possibilità sono: -AutoTracker.Info.NoMatchOnAxis=Nell'area di ricerca mostrata non è stato trovato alcun riscontro lungo l'asse x. Le possibilità sono: +AutoTracker.Info.SearchOnAxis1=L'asse x all'interno del rettangolo mostrato, verrïż½ scansionato per trovare la migliore corrispondenza. Spostare o ridimensionare l'area di ricerca trascinando rispettivamente il suo centro o il suo appiglio. +AutoTracker.Info.PossibleOnAxis=Nell'area di ricerca mostrata ïż½ stato trovato un possibile riscontro lungo l'asse x. Le possibilitïż½ sono: +AutoTracker.Info.NoMatchOnAxis=Nell'area di ricerca mostrata non ïż½ stato trovato alcun riscontro lungo l'asse x. Le possibilitïż½ sono: AutoTracker.Info.RetryOnAxis=--spostare l'area di ricerca o l'asse x e cercare ancora AutoTracker.Wizard.Button.Delete=Cancellare questo punto AutoTracker.Wizard.Button.DeleteMore=Cancellare questo e tutti i punti successivi @@ -683,12 +683,12 @@ CalibrationStick.Hint=impostare la lunghezza o trascinare fino alla fine per cam CalibrationStick.End.Hint=trascinare per cambiare la scala CalibrationStick.New.Name=asta di calibrazione CalibrationTapeMeasure.New.Name=nastro di calibrazione -CalibrationTapeMeasure.Readout.Magnitude.Hint=fare clic per inserire una lunghezza nota in unità fisiche +CalibrationTapeMeasure.Readout.Magnitude.Hint=fare clic per inserire una lunghezza nota in unitïż½ fisiche CalibrationTapeMeasure.Hint=impostare la lunghezza per cambiare scala, impostare l'angolo per cambiare pendenza all'asse DynamicSystem.Data.Description.0=distanza relativa tra particelle DynamicSystem.Data.Description.1=angolo relativo -DynamicSystem.Data.Description.2=velocità radiale relativa -DynamicSystem.Data.Description.3=velocità angolare relativa +DynamicSystem.Data.Description.2=velocitïż½ radiale relativa +DynamicSystem.Data.Description.3=velocitïż½ angolare relativa ExportDataDialog.Subtitle.Table=Tabella dati ExportDataDialog.Subtitle.Content=Celle ExportDataDialog.Subtitle.Format=Formato numero @@ -712,7 +712,7 @@ ExportVideoDialog.Subtitle.Size=Dimensione ExportVideoDialog.Subtitle.Content=Contenuto ExportVideoDialog.Subtitle.View=Mostra ExportVideoDialog.Subtitle.Format=Formato -ExportVideoDialog.Complete.Message1=Il video è stato salvato come +ExportVideoDialog.Complete.Message1=Il video ïż½ stato salvato come ExportVideoDialog.Complete.Message2=Aprirlo subito in Tracker? ExportVideoDialog.Complete.Title=Esportazione completata ExportVideoDialog.VideoSize=dim. video @@ -722,7 +722,7 @@ ExportVideo.Dialog.HiddenPlots.Title=Vista incompleta Footprint.DoubleTarget=doppio crocino Footprint.BoldDoubleTarget=doppio crocino grassetto OffsetOrigin.MenuItem.Fixed=Coordinate fisiche fisse -ParticleModel.Dialog.Offscreen.Message1=Alcuni passi del modello sono vuoti perché sono troppo lontani dallo schermo. +ParticleModel.Dialog.Offscreen.Message1=Alcuni passi del modello sono vuoti perchïż½ sono troppo lontani dallo schermo. ParticleModel.Dialog.Offscreen.Message2=Per sistemare, cambiare il modello o riscalare il video. ParticleModel.Dialog.Offscreen.Title=Fuori dai limiti PrefsDialog.Tab.Configuration.Title=Configurazione @@ -737,10 +737,10 @@ PrefsDialog.Checkbox.DefaultSize=Usa i predefiniti PrefsDialog.Checkbox.HintsOn=Mostra i suggerimenti come predefinito PrefsDialog.Tab.Video.Title=Video PrefsDialog.VideoPref.BorderTitle=Motore video -PrefsDialog.Button.Xuggle=Xuggle (raccomandato) +PrefsDialog.Button.FFMPeg=FFMPeg (raccomandato) PrefsDialog.Button.QT=QuickTime -PrefsDialog.Dialog.WebStart.Message=La gestione della memoria non è disponibile usando Web Start. -PrefsDialog.Dialog.WebStart.Title=Modalità Web Start +PrefsDialog.Dialog.WebStart.Message=La gestione della memoria non ïż½ disponibile usando Web Start. +PrefsDialog.Dialog.WebStart.Title=Modalitïż½ Web Start PrefsDialog.LookFeel.BorderTitle=Aspetto PrefsDialog.Language.BorderTitle=Lingua PrefsDialog.Upgrades.BorderTitle=Controlla gli aggiornamenti @@ -752,9 +752,9 @@ PrefsDialog.Upgrades.Weekly=Settimanalmente PrefsDialog.Upgrades.Monthly=Mensilmente PrefsDialog.Upgrades.Never=Mai PrefsDialog.Button.CheckForUpgrade=Controlla ora -PrefsDialog.Xuggle.Speed.BorderTitle=Esecuzione video -PrefsDialog.Xuggle.Slow=Preciso (potrebbe essere lento) -PrefsDialog.Xuggle.Fast=Veloce (potrebbe andare a scatti) +PrefsDialog.FFMPeg.Speed.BorderTitle=Esecuzione video +PrefsDialog.FFMPeg.Slow=Preciso (potrebbe essere lento) +PrefsDialog.FFMPeg.Fast=Veloce (potrebbe andare a scatti) PrefsDialog.CalibrationTool.BorderTitle=Strumento di calibrazione predefinito Protractor.Name=Goniometro Protractor.New.Name=goniometro @@ -796,14 +796,14 @@ TableTrackView.RadiansPerSecondSquared.Tooltip=in radianti/s^2 TableTrackView.DegreesPerSecondSquared.Tooltip=in gradi/s^2 TableTrackView.MenuItem.DeleteDataFunction=Cancella la funzione dati TActions.Action.SaveFrame=Salva l'insieme dati come... -TActions.AboutVideo=Proprietà... -TActions.Dialog.AboutVideo.Title=Proprietà video +TActions.AboutVideo=Proprietïż½... +TActions.Dialog.AboutVideo.Title=Proprietïż½ video TActions.Dialog.AboutVideo.Type=Tipo TActions.Dialog.AboutVideo.Size=Dimensioni TActions.Dialog.AboutVideo.Length=Lunghezza TActions.Dialog.AboutVideo.Frames=quadri TActions.Dialog.AboutVideo.Seconds=secondi -TActions.Dialog.AboutVideo.FrameRate=Velocità quadri +TActions.Dialog.AboutVideo.FrameRate=Velocitïż½ quadri TActions.Dialog.AboutVideo.FramesPerSecond=fps TActions.Dialog.AboutVideo.Path=Percorso TActions.Action.ImportTRK=File Tracker... @@ -831,29 +831,29 @@ TMenuBar.Menu.CopyObject=Copia oggetto TMenuBar.MenuItem.Coords=Sistema di coordinate TMenuBar.MenuItem.VideoClip=Spezzone video TMenuBar.Menu.MeasuringTools=Strumenti di misura -TMenuBar.Menu.AngleUnits=Unità angolari +TMenuBar.Menu.AngleUnits=Unitïż½ angolari TMenuBar.MenuItem.Degrees=Gradi TMenuBar.MenuItem.Radians=Radianti -Tracker.Dialog.NoXuggle.Title=Xuggle non trovato -Tracker.Dialog.NoXuggle.Message1=Xuggle (motore vide multi piattaforma) non è installato. -Tracker.Dialog.NoXuggle.Message2=Scaricare Xuggle da http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=Info su Xuggle... -Tracker.Dialog.AboutXuggle.Title=Info su Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=Vesrione Xuggle -Tracker.Dialog.AboutXuggle.Message.Home=Home di Xuggle: -Tracker.Dialog.AboutXuggle.Message.Path=Percorso di Xuggle: -Tracker.Dialog.NoVideoEngine.Message1=Nessun motore video trovato! Senza, Tracker può solo aprire immagini, -Tracker.Dialog.NoVideoEngine.Message2=sequenze di immagini, e gif animate. Per installare Xuggle, il motore +Tracker.Dialog.NoFFMPeg.Title=FFMPeg non trovato +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (motore vide multi piattaforma) non ïż½ installato. +Tracker.Dialog.NoFFMPeg.Message2=Scaricare FFMPeg da http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=Info su FFMPeg... +Tracker.Dialog.AboutFFMPeg.Title=Info su FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=Vesrione FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Home=Home di FFMPeg: +Tracker.Dialog.AboutFFMPeg.Message.Path=Percorso di FFMPeg: +Tracker.Dialog.NoVideoEngine.Message1=Nessun motore video trovato! Senza, Tracker puïż½ solo aprire immagini, +Tracker.Dialog.NoVideoEngine.Message2=sequenze di immagini, e gif animate. Per installare FFMPeg, il motore Tracker.Dialog.NoVideoEngine.Message3=video preferito di Tracker per tutte le piattaforme, scaricare Tracker.Dialog.NoVideoEngine.Message4=l'ultima versione dell'installatore di Tracker da Tracker.Dialog.NoVideoEngine.Title=Motore video mancante -Tracker.Dialog.NoXuggle.Message1=Xuggle, il motore video preferito di Tracker, non è installato. -Tracker.Dialog.NoXuggle.Message2=Per installare Xuggle, scaricare l'ultimo installatore di Tracker da -Tracker.Dialog.NoXuggle.Title=Xuggle mancante +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg, il motore video preferito di Tracker, non ïż½ installato. +Tracker.Dialog.NoFFMPeg.Message2=Per installare FFMPeg, scaricare l'ultimo installatore di Tracker da +Tracker.Dialog.NoFFMPeg.Title=FFMPeg mancante Tracker.About.DefaultLocale=Locale predefinito Tracker.About.CurrentLanguage=Lingua Tracker.Dialog.InsufficientMemory.Title=Memoria insufficiente -Tracker.Dialog.InsufficientMemory.Message=La dimensione di memoria richiesta è troppo grande. +Tracker.Dialog.InsufficientMemory.Message=La dimensione di memoria richiesta ïż½ troppo grande. TrackerIO.Dialog.TabMustBeSaved.Message1=Scheda TrackerIO.Dialog.TabMustBeSaved.Message2=deve essere salvata come un file tracker per essere inclusa nell'insieme delle schede. TrackerIO.Dialog.TabMustBeSaved.Message3=Salvarla? @@ -870,7 +870,7 @@ TrackerIO.VideoAndDataFileFilter.Description=File video e Tracker TrackerPanel.Dialog.Version.Message1=Si sta aprendo un file crato con Tracker TrackerPanel.Dialog.Version.Message2=che potrebbe fare riferimento a comandi TrackerPanel.Dialog.Version.Message3=mancanti nella attuale versione in uso -TrackerPanel.Dialog.Version.Message4=L'ultima versione di Tracker è disponibile su +TrackerPanel.Dialog.Version.Message4=L'ultima versione di Tracker ïż½ disponibile su TrackerPanel.Dialog.Version.Title=Versione non corretta TrackerPanel.Label.ModelStart=Inizio TrackerPanel.Label.ModelEnd=Fine @@ -880,12 +880,12 @@ TToolbar.Button.ProtractorVisible.Tooltip=Mostra o nascondi il goniometro TToolbar.Button.AxesVisible.Tooltip=Mostra o nascondi gli assi delle coordinate TToolBar.Button.TrackControl.Tooltip=Mostra o nascondi il controllo traccia TTrack.Dialog.StepSizeWarning.Message1=Attenzione: alcune tracce sono stare marcate con una dimensione di passo maggiore di uno, lasciando i quadri saltati non marcati. -TTrack.Dialog.StepSizeWarning.Message2=Cambiando la dimensione del passo perciò porterà probabilmente ad avere delle lacune nell'insieme dei dati. -TTrack.Dialog.StepSizeWarning.Message3=Le velocità e accelerazioni attorno alle lacune non possono essere determinate se non sono stati marcati tutti i passi. +TTrack.Dialog.StepSizeWarning.Message2=Cambiando la dimensione del passo perciïż½ porterïż½ probabilmente ad avere delle lacune nell'insieme dei dati. +TTrack.Dialog.StepSizeWarning.Message3=Le velocitïż½ e accelerazioni attorno alle lacune non possono essere determinate se non sono stati marcati tutti i passi. TTrack.Dialog.StepSizeWarning.Title=Attenzione TTrack.Dialog.SkippedStepWarning.Message1=Attenzione: saltare passi durante la marcatura delle posizioni lascia delle lacune nell'insieme dei dati. TTrack.Dialog.SkippedStepWarning.Title=Attenzione -TTrack.Dialog.SkippedStepWarning.Checkbox=Non mostrarlo più +TTrack.Dialog.SkippedStepWarning.Checkbox=Non mostrarlo piïż½ TTrack.Locked.Hint=bloccato TTrack.AngleField.Radians.Tooltip=angolo in radianti TTrack.AngleField.Degrees.Tooltip=angolo in gradi @@ -895,7 +895,7 @@ TTrackBar.Memory.Menu.SetSize=Imposta la dimensione della memoria... TTrackBar.Button.Version=Disponibile: versione TTrackBar.Popup.MenuItem.Upgrade=Aggiorna ora... TTrackBar.Popup.MenuItem.Ignore=Ignora -XuggleVideo.MenuItem.SmoothPlay=Esecuzione precisa (più essere lenta) +FFMPegVideo.MenuItem.SmoothPlay=Esecuzione precisa (piïż½ essere lenta) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=Nastro di calibrazione @@ -911,8 +911,8 @@ PageTView.MenuItem.ClosePage=Chiudi pagina PointMass.Hint.Marking=fare clic con il mouse per marcare un nuovo punto, premere Invio per clonare il passo precedente PrefsDialog.Dialog.NewVersion.Title=Aggiornamenti PrefsDialog.Dialog.NewVersion.Message1=Versione -PrefsDialog.Dialog.NewVersion.Message2=è disponibile su -PrefsDialog.Dialog.NewVersion.None.Message=Al momento non è disponibile nessuna nuova versione. +PrefsDialog.Dialog.NewVersion.Message2=ïż½ disponibile su +PrefsDialog.Dialog.NewVersion.None.Message=Al momento non ïż½ disponibile nessuna nuova versione. RGBRegion.Hint.Marking=fare clic con il mouse per marcare il centro della regione TMenuBar.MenuItem.Restore=Ripristina le viste TrackControl.StretchVectors.None=Non stirare @@ -926,27 +926,27 @@ LibraryBrowser.Title=Navigatore della libreria digitale di Tracker LibraryBrowser.Label.Select=Selezionare una libreria o inserire un percorso: PrefsDialog.NoVideoWarning.BorderTitle=Avvertimenti PrefsDialog.Checkbox.WarnIfNoEngine=Nessun motore video -PrefsDialog.Checkbox.WarnIfXuggleError=Errore Xuggle -PropertiesDialog.Title=Proprietà +PrefsDialog.Checkbox.WarnIfFFMPegError=Errore FFMPeg +PropertiesDialog.Title=Proprietïż½ PropertiesDialog.Label.Author=Autore PropertiesDialog.Label.Contact=Contatto -TActions.Action.Properties=Proprietà... +TActions.Action.Properties=Proprietïż½... TActions.Action.OpenBrowser=Apri libreria... -TFrame.Progress.Xuggle=Apertura quadro Xuggle +TFrame.Progress.FFMPeg=Apertura quadro FFMPeg TFrame.Progress.ClickToCancel=(clic per annullare) Tracker.Catalog.Default=La mia libreria locale -Tracker.Dialog.NoVideoEngine.Checkbox=Non mostrarlo più +Tracker.Dialog.NoVideoEngine.Checkbox=Non mostrarlo piïż½ TrackerIO.ZipFileFilter.Description=File ZIP -TrackerIO.Dialog.ErrorFFMPEG.Message1=Xuggle ha riportato il seguente errore durante l'apertura di questo video: +TrackerIO.Dialog.ErrorFFMPEG.Message1=FFMPeg ha riportato il seguente errore durante l'apertura di questo video: TrackerIO.Dialog.ErrorFFMPEG.Message2=Non tutti gli errori sono gravi. Per consultare la segnalazione completa degli errori, selezionare Aiuto|Registro messaggi. -TrackerIO.Dialog.ErrorFFMPEG.Message3=Se Xuggle fallisce, si potrebbe poter aprire il video con QuickTime. -TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Nota: su Mac OSX ciò richiede l'esecuzione di Tracker in una Java VM a 32-bit. -TrackerIO.Dialog.ErrorFFMPEG.Title=Errore Xuggle +TrackerIO.Dialog.ErrorFFMPEG.Message3=Se FFMPeg fallisce, si potrebbe poter aprire il video con QuickTime. +TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Nota: su Mac OSX ciïż½ richiede l'esecuzione di Tracker in una Java VM a 32-bit. +TrackerIO.Dialog.ErrorFFMPEG.Title=Errore FFMPeg TToolBar.Button.OpenBrowser.Tooltip=Apre un catalogo di librerie digitali # Additions by Doug Brown 2011-07-20 TFrame.Dialog.NoTRKInComPADRE.Title=File non trovato -TFrame.Dialog.NoTRKInComPADRE.Message=Nessun file Tracker è stato trovato per il nodo +TFrame.Dialog.NoTRKInComPADRE.Message=Nessun file Tracker ïż½ stato trovato per il nodo # Additions by Doug Brown 2011-08-08 AnalyticParticle.Builder.Title=Particella cinematica @@ -957,7 +957,7 @@ PropertiesDialog.Button.CopyFilePath=Copia il percorso file PropertiesDialog.Button.CopyVideoPath=Copia il percorso video PropertiesDialog.Tab.TrackerFile=File Tracker PropertiesDialog.Tab.Metadata=Metadati -PropertiesDialog.Header.Property=Proprietà +PropertiesDialog.Header.Property=Proprietïż½ PropertiesDialog.Header.Value=Valore TActions.Action.OpenURL=Apri URL... TActions.Dialog.OpenURL.Title=Apri URL @@ -989,17 +989,17 @@ AutoTracker.Label.EvolutionRate=Frequenza di evoluzione AutoTracker.Label.Automark=Automarcamento AutoTracker.Info.Instructions=Fare clic su un pulsante di ricerca per trovare una corrispondenza nell'area di ricerca mostrata. AutoTracker.Info.KeyFrame.Instructions1=Questo quadro chiave definisce modello e bersaglio mostrati. Fare clic su un pulsante di ricerca per trovare corrispondenze al modello. -AutoTracker.Info.KeyFrame.Instructions2=Si può trascinare bersaglio, modello o area di ricerca per spostarli o ridimensionarli. +AutoTracker.Info.KeyFrame.Instructions2=Si puïż½ trascinare bersaglio, modello o area di ricerca per spostarli o ridimensionarli. AutoTracker.Info.MouseOver.Instructions=Spostare il mouse sopra i controlli per avere informazioni su impostazioni e regolazioni. -AutoTracker.Info.Mask1=Il modello è l'immagine da riscontrare. Comincia con un quadro chiave e si evolve per adattarsi ai cambiamenti di forma e colore. -AutoTracker.Info.Mask2=Il livello di automarcatura è il punteggio minimo di riscontro richiesto per la marcatura automatica. +AutoTracker.Info.Mask1=Il modello ïż½ l'immagine da riscontrare. Comincia con un quadro chiave e si evolve per adattarsi ai cambiamenti di forma e colore. +AutoTracker.Info.Mask2=Il livello di automarcatura ïż½ il punteggio minimo di riscontro richiesto per la marcatura automatica. AutoTracker.Info.Mask.Instructions=Sposta o ridimensiona il modello trascinandone i limiti o gli appigli angolari (solo quadri chiave). Regola la frequenza di evoluzione e i livelli di automarcatura usando i rotatori. AutoTracker.Info.Mask.Tip=Bassi livelli di automarcatura possono provocare falsi positivi. Nel caso provare invece ad aumentare la frequenza di evoluzione. AutoTracker.Info.Search=L'area di ricerca viene scansionata per il miglior riscontro. AutoTracker.Info.SearchOnAxis=L'asse x nell'area di ricerca viene scansionato per il miglior riscontro. AutoTracker.Info.Search.Instructions=Sposta o ridimensiona l'area di ricerca trascinandone i limiti o gli appigli angolari. Imposta l'asse x e le opzioni di previsione selezionandone le caselle corrispondenti. -AutoTracker.Info.Search.Tip=Spesso non è necessario che l'area di ricerca sia larga. L'opzione di previsione sposta automaticamente l'area di ricerca alle posizioni di riscontro predette. -AutoTracker.Info.Target=Il bersaglio è dove il punto di tracciamento mirato viene marcato. +AutoTracker.Info.Search.Tip=Spesso non ïż½ necessario che l'area di ricerca sia larga. L'opzione di previsione sposta automaticamente l'area di ricerca alle posizioni di riscontro predette. +AutoTracker.Info.Target=Il bersaglio ïż½ dove il punto di tracciamento mirato viene marcato. AutoTracker.Info.Target.Instructions=Sposta il bersaglio trascinandolo (solo quadri chiave). Scegliere la traccia e punto bersagli dagli elenchi a discesa. AutoTracker.Info.Title.Settings=Impostazioni AutoTracker.Info.Title.Tip=Suggerimento @@ -1008,7 +1008,7 @@ AutoTracker.Info.OutsideXAxis=L'asse x non passa attraverso l'area di ricerca. L AutoTracker.Info.NewKeyFrame=--fare un passo indietro e cambiare la frequenza di evoluzione or maiusct-control-clic per definire un nuovo quadro chiave AutoTracker.Info.Replace=--accettare il riscontro e rimpiazzare il punto esistente AutoTracker.Info.Keep=--mantenere il punto esistente -AutoTracker.Info.PossibleReplace=È stato trovato un riscontro possibile per rimpiazzare il punto esistente. Le scelte possibili sono: +AutoTracker.Info.PossibleReplace=ïż½ stato trovato un riscontro possibile per rimpiazzare il punto esistente. Le scelte possibili sono: AutoTracker.Wizard.Button.Accept=Accetta AutoTracker.Wizard.Button.Stop=Stop AutoTracker.Wizard.Button.Skip=Salta @@ -1030,13 +1030,13 @@ MainTView.Popup.MenuItem.ZoomIn=Zoom avanti MainTView.Popup.MenuItem.ZoomOut=Zoom indietro MainTView.Popup.MenuItem.ZoomToFit=Zoom intero TrackerIO.Dialog.DurationVaries.Title=Durata quadro variabile -TrackerIO.Dialog.DurationVaries.Message1=Questo video include quadri con durate che differiscono dalla media più di -TrackerIO.Dialog.DurationVaries.Message2=Per ottenere velocità e accelerazioni accurate, è necessario escludere questi quadri dai +TrackerIO.Dialog.DurationVaries.Message1=Questo video include quadri con durate che differiscono dalla media piïż½ di +TrackerIO.Dialog.DurationVaries.Message2=Per ottenere velocitïż½ e accelerazioni accurate, ïż½ necessario escludere questi quadri dai TrackerIO.Dialog.DurationVaries.Message3=calcoli impostando il quadro di inizio e quello di fine della clip video. TrackerIO.Dialog.DurationVaries.Message4=Quadri da escludere: -TrackerIO.Dialog.DurationVaries.Message5=Durata media e velocità di quadro se esclusi: +TrackerIO.Dialog.DurationVaries.Message5=Durata media e velocitïż½ di quadro se esclusi: TFrame.Dialog.LibraryError.Title=Errore -TFrame.Dialog.LibraryError.Message=Nessuna risorsa può essere caricata dal nodo +TFrame.Dialog.LibraryError.Message=Nessuna risorsa puïż½ essere caricata dal nodo # Additions by Doug Brown 2011-12-01 TTrack.Label.Unmarked=maiusc-clic per marcare @@ -1059,18 +1059,18 @@ Tracker.Readme.NotFound=File LEGGIMI non trovato Popup.MenuItem.Algorithm=Algoritmi... AlgorithmDialog.Button.FiniteDifference=Differenze finite AlgorithmDialog.Button.BounceDetect=Rilevamento rimbalzo -AlgorithmDialog.TitledBorder.Choose=Seleziona l'algoritmo usato per calcolare velocità e accelerazione: +AlgorithmDialog.TitledBorder.Choose=Seleziona l'algoritmo usato per calcolare velocitïż½ e accelerazione: AlgorithmDialog.Title=Algoritmi -AlgorithmDialog.FiniteDifference.Message1=Questo è l'algoritmo predefinito. -AlgorithmDialog.FiniteDifference.Message2=Velocità: v[i] = (x[i+1] - x[i-1]) / (2*dt) +AlgorithmDialog.FiniteDifference.Message1=Questo ïż½ l'algoritmo predefinito. +AlgorithmDialog.FiniteDifference.Message2=Velocitïż½: v[i] = (x[i+1] - x[i-1]) / (2*dt) AlgorithmDialog.FiniteDifference.Message3=Accelerazione: a[i] = (2*x[i+2] - x[i+1] - 2*x[i] - x[i-1] + 2*x[i-2]) / (7*dt) -AlgorithmDialog.BounceDetect.Message1=Questo algoritmo spiana velocità e accelerazioni ma rileva anche cambi improvvisi di velocità. -AlgorithmDialog.BounceDetect.Message2=Attenzione: può introdurre degli artefatti. Per ulteriori informazioni, consultare: +AlgorithmDialog.BounceDetect.Message1=Questo algoritmo spiana velocitïż½ e accelerazioni ma rileva anche cambi improvvisi di velocitïż½. +AlgorithmDialog.BounceDetect.Message2=Attenzione: puïż½ introdurre degli artefatti. Per ulteriori informazioni, consultare: TMenuBar.Menu.Diagnostics=Diagnostici # Additions by Doug Brown 2012-02-12 Tracker.Dialog.Invalid.Title=XML non valido -Tracker.Dialog.Invalid.Message=Il file non può essere letto. +Tracker.Dialog.Invalid.Message=Il file non puïż½ essere letto. TrackPlottingPanel.Popup.Menu.CompareWith=Compara con TrackerPanel.DataBuilder.TrackType.Unknown=sconosciuto TrackerPanel.DataBuilder.Button.Load.Tooltip=Carica i dati delle funzioni da un file XML @@ -1091,11 +1091,11 @@ TrackerPanel.DataBuilder.Dialog.WrongType.Message=Il file non definisce funzioni TToolbar.Button.Refresh=Aggiorna i dati e le viste # Additions by Doug Brown 2012-04-22 -ExportTRKDialog.Complete.Message1=La risorsa ZIP è stata salvata come +ExportTRKDialog.Complete.Message1=La risorsa ZIP ïż½ stata salvata come ExportTRKDialog.Complete.Message2=Aprirla in Tracker? ExportTRKDialog.Complete.Title=Esportazione completata ExportTRKDialog.Title=Esporta risorse ZIP -ExportTRKDialog.Message1=Ciò (1) esporta la clip video, (2) converte i dati tabellari per farli corrispondere al video esportato, e (3) salva la tabella convertita come un nuovo file Tracker. +ExportTRKDialog.Message1=Ciïż½ (1) esporta la clip video, (2) converte i dati tabellari per farli corrispondere al video esportato, e (3) salva la tabella convertita come un nuovo file Tracker. ExportTRKDialog.Message2=I file Tracker e video vengono salvati nella stessa directory con lo stesso nome ma con estensioni diverse. TMenuBar.MenuItem.TabClip=Risorsa ZIP TMenuBar.Menu.CalibrationTools=Strumenti di calibrazione @@ -1164,7 +1164,7 @@ ZipResourceDialog.Label.Description=Descrizione ZipResourceDialog.Label.Keywords=Parole chiave ZipResourceDialog.Label.Link=Collegamento esterno ZipResourceDialog.Label.HTML=Sorgente HTML -ZipResourceDialog.Complete.Message1=La risorsa ZIP è stata salvata come +ZipResourceDialog.Complete.Message1=La risorsa ZIP ïż½ stata salvata come ZipResourceDialog.Complete.Message2=Aprirla ora in Tracker? ZipResourceDialog.Complete.Title=Successo ZipResourceDialog.Border.Title.Documentation=Documentazione HTML @@ -1179,9 +1179,9 @@ ZipResourceDialog.Checkbox.TrimVideo=Ritaglia alla clip ZipResourceDialog.AddHTMLInfo.Title=Aggiungi un file di informazioni in HTML ZipResourceDialog.AddHTMLInfo.Message1=Aggiungere il file di informazioni HTML ZipResourceDialog.AddHTMLInfo.Message2=al file delle risorse ZIP? -ZipResourceDialog.HTMLField.DefaultText=Se non è stato specificato nulla, il file verrà creato da zero +ZipResourceDialog.HTMLField.DefaultText=Se non ïż½ stato specificato nulla, il file verrïż½ creato da zero ZipResourceDialog.Dialog.AddFiles.Title=Aggiungi file HTML e PDF -ZipResourceDialog.Tooltip.HTML=Percorso al file sorgente HTML (se assente, il file verrà creato da zero) +ZipResourceDialog.Tooltip.HTML=Percorso al file sorgente HTML (se assente, il file verrïż½ creato da zero) ZipResourceDialog.Tooltip.Author=Autori di questa risorsa ZipResourceDialog.Tooltip.Title=Mostra il nome di questa risorsa (non il nome del file) ZipResourceDialog.Tooltip.Description=Un'utile descrizione di questa risorsa @@ -1198,37 +1198,37 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=Durate quadri variabili PrefsDialog.Button.NoEngine=Niente PrefsDialog.Dialog.SwitchToQT.Message=Passando a QuickTime cambia anche la VM Java a 32-bit. -PrefsDialog.Dialog.SwitchToXuggle32.Message=Passando a Xuggle cambia anche la VM Java a 32-bit. -PrefsDialog.Dialog.SwitchToXuggle64.Message=Passando a Xuggle cambia anche la VM Java a 64-bit. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=Passando a FFMPeg cambia anche la VM Java a 32-bit. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=Passando a FFMPeg cambia anche la VM Java a 64-bit. PrefsDialog.Dialog.SwitchVM.Title=VM Java cambiata PrefsDialog.Dialog.SwitchTo32.Message=Passando alla VM Java a 32-bit cambia anche il motore video a QuickTime. -PrefsDialog.Dialog.SwitchTo64.Message=Passando alla VM Java a 64-bit cambia anche il motore video a Xuggle. +PrefsDialog.Dialog.SwitchTo64.Message=Passando alla VM Java a 64-bit cambia anche il motore video a FFMPeg. PrefsDialog.Dialog.SwitchEngine.Title=Motore video cambiato PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=Nessun motore video disponibile per una VM Java a 64-bit. Ma si -PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=potrà ancora aprire immagini (JPEG, PNG) e GIF animate. +PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=potrïż½ ancora aprire immagini (JPEG, PNG) e GIF animate. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Sicuri di voler passare ad una VM a 64-bit? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=Nessun motore video a 64-bit -PrefsDialog.Dialog.No32bitVMXuggle.Message=Per poter usare Xuggle è necessario installare prima una VM Java a 32-bit. -PrefsDialog.Dialog.No32bitVMQT.Message=Per poter usare Quicktime è necessario prima installare una VM Java a 32-bit. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=Per poter usare FFMPeg ïż½ necessario installare prima una VM Java a 32-bit. +PrefsDialog.Dialog.No32bitVMQT.Message=Per poter usare Quicktime ïż½ necessario prima installare una VM Java a 32-bit. PrefsDialog.Dialog.No32bitVM.Message=Per ulteriori informazioni, consultare la guida di Tracker: installazione. PrefsDialog.Dialog.No32bitVM.Title=Richiesta VM a 32-bit PrefsDialog.Button.ShowHelpNow=Mostra ora la guida TActions.Dialog.AboutVideo.FramesPerSecond.NotConstant=NON COSTANTE TMenuBar.MenuItem.CheckFrameDurations=Durate dei quadri TMenuBar.MenuItem.ExportZIP=Zip Tracker -Tracker.Dialog.Install32BitVM.Message=Per poter usare i motori video è necessario prima installare una VM Java a 32-bit. -Tracker.Dialog.SwitchTo32BitVM.Message1=Uno o più motori video sono installati ma non disponibili perché essi -Tracker.Dialog.SwitchTo32BitVM.Message2=richiedono una VM Java a 32-bit mentre attualmente è in esecuzione una VM a 64-bit. +Tracker.Dialog.Install32BitVM.Message=Per poter usare i motori video ïż½ necessario prima installare una VM Java a 32-bit. +Tracker.Dialog.SwitchTo32BitVM.Message1=Uno o piïż½ motori video sono installati ma non disponibili perchïż½ essi +Tracker.Dialog.SwitchTo32BitVM.Message2=richiedono una VM Java a 32-bit mentre attualmente ïż½ in esecuzione una VM a 64-bit. Tracker.Dialog.SwitchTo32BitVM.Question=Desiderate riavviare con una VM a 32-bit e con il motore predefinito? -Tracker.Dialog.Button.RelaunchNow=Sì, riavvia ora +Tracker.Dialog.Button.RelaunchNow=Sïż½, riavvia ora Tracker.Dialog.Button.ShowPrefs=No, ma mostra le preferenze Tracker.Dialog.Button.ContinueWithoutEngine=No, continua senza video -Tracker.Dialog.EngineProblems.Message1=Uno o più motori video sono installati ma non funzionanti. -Tracker.Dialog.EngineProblems.Message2=Per ulteriori informazioni consultare Aiuto|Diagnostici|Su Xuggle o QuickTime. -Tracker.Dialog.ReplaceXuggle.Message1=Si suggerisce di rimpiazzare il motore video corrente Xuggle -Tracker.Dialog.ReplaceXuggle.Message2=con Xuggle versione 3.4 reinstallando Tracker (versione 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=o successive) e selezionando Xuggle nelle opzioni di installazione. -TrackerIO.Dialog.DurationIsConstant.Message=La durata di tutti i quadri è uguale (fps costante). +Tracker.Dialog.EngineProblems.Message1=Uno o piïż½ motori video sono installati ma non funzionanti. +Tracker.Dialog.EngineProblems.Message2=Per ulteriori informazioni consultare Aiuto|Diagnostici|Su FFMPeg o QuickTime. +Tracker.Dialog.ReplaceFFMPeg.Message1=Si suggerisce di rimpiazzare il motore video corrente FFMPeg +Tracker.Dialog.ReplaceFFMPeg.Message2=con FFMPeg versione 4.0 reinstallando Tracker (versione 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=o successive) e selezionando FFMPeg nelle opzioni di installazione. +TrackerIO.Dialog.DurationIsConstant.Message=La durata di tutti i quadri ïż½ uguale (fps costante). TrackerIO.ZIPResourceFilter.Description=File ZIP di Tracker (.trz) TToolbar.Button.Desktop.Tooltip=Mostra i documenti HTML e/o PDF associati ZipResourceDialog.BadModels.Message1=Lo spezzone video non include il quadro iniziale della @@ -1237,8 +1237,8 @@ ZipResourceDialog.BadModels.Message3=modelli NON saranno inclusi nel file ZIP Tr ZipResourceDialog.BadModels.Question=Continuare e abbandonare i modelli? ZipResourceDialog.BadModels.Title=Conflitti modello-spezzone video TMenuBar.MenuItem.EditVideoFrames=Aggiungi/rimuovi quadri -TMenuBar.Dialog.RequiresMemory.Message1=Tutte le immagini devono essere caricate in memoria per modificare i quadri. Ciò incrementa anche la velocità di esecuzione. -TMenuBar.Dialog.RequiresMemory.Message2=Controllare la disponibilità di memoria e riavviare con più memoria se necessario. +TMenuBar.Dialog.RequiresMemory.Message1=Tutte le immagini devono essere caricate in memoria per modificare i quadri. Ciïż½ incrementa anche la velocitïż½ di esecuzione. +TMenuBar.Dialog.RequiresMemory.Message2=Controllare la disponibilitïż½ di memoria e riavviare con piïż½ memoria se necessario. TMenuBar.Dialog.RequiresMemory.Title=Memoria # Additions by Doug Brown 2013-01-25 @@ -1270,7 +1270,7 @@ MainTView.Popup.MenuItem.Deselect=Deseleziona punti ZipResourceDialog.Checkbox.PreviewThumbnail=Anteprima ZipResourceDialog.Dialog.BadFileName.Message=I nomi di file non possono includere i seguenti caratteri: ZipResourceDialog.Dialog.BadFileName.Title=Nomefile non permesso -ZipResourceDialog.Dialog.ExportFailed.Message=Il file ZIP non può essere esportato. +ZipResourceDialog.Dialog.ExportFailed.Message=Il file ZIP non puïż½ essere esportato. ZipResourceDialog.Dialog.ExportFailed.Title=Esportazione fallita PrefsDialog.Button.SetCache=Imposta cache @@ -1278,8 +1278,8 @@ PrefsDialog.Button.SetCache=Imposta cache Tracker.StartLog=Inizio log Tracker.StartLog.NotFound=File di inizio log non trovato Tracker.Dialog.MemoryReduced.Title=Preferenze sulla memoria ridotte -Tracker.Dialog.MemoryReduced.Message1=Tracker non può partire con una memoria di -Tracker.Dialog.MemoryReduced.Message2=perciò la preferenza sulla memoria è stata ridotta a +Tracker.Dialog.MemoryReduced.Message1=Tracker non puïż½ partire con una memoria di +Tracker.Dialog.MemoryReduced.Message2=perciïż½ la preferenza sulla memoria ïż½ stata ridotta a Tracker.Dialog.MemoryReduced.Message3=Per ulteriori informazioni vedere Aiuto|Diagnostiche|Inizio log... TrackPlottingPanel.Popup.MenuItem.ShowZero=Mostra TableTrackView.Menu.TextColumn.Text=Colonne di testo @@ -1288,15 +1288,15 @@ TableTrackView.Action.CreateTextColumn.Text=Crea... TableTrackView.Action.DeleteTextColumn.Text=Elimina TableTrackView.Action.RenameTextColumn.Text=Rinomina TableTrackView.Dialog.NameColumn.Message=Inserire un nome colonna. -TableTrackView.Dialog.NameColumn.TryAgain=Quel nome è già in uso. +TableTrackView.Dialog.NameColumn.TryAgain=Quel nome ïż½ giïż½ in uso. TableTrackView.Dialog.NameColumn.Title=Colonna di testo TToolBar.MenuItem.StretchOff=Reimposta # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Versione Xuggle +PrefsDialog.Checkbox.WarnFFMPegVersion=Versione FFMPeg PrefsDialog.Checkbox.WarnCopyFailed=Errori di copia del file del motore video Tracker.Dialog.FailedToCopy.Title=Errore di copia del file -Velocity.Dialog.Color.Title=Scegli il colore della velocità +Velocity.Dialog.Color.Title=Scegli il colore della velocitïż½ Acceleration.Dialog.Color.Title=Scegli in colore dell'accelerazione TMenuBar.Menu.FontSize=Livello del font TMenuBar.MenuItem.DefaultFontSize=Predefinito @@ -1306,14 +1306,14 @@ TrackerPanel.Booster.None=(nessuno) TrackerPanel.Dropdown.Booster.Tooltip=Punto di massa che imposta le condizioni iniziali di questo modello CoordAxes.Checkbox.Grid=Griglia CoordAxes.Checkbox.Grid.Tooltip=Mostra la griglia sovrapposta -CoordAxes.Button.Grid.Tooltip=Imposta il colore e l'opacità della griglia +CoordAxes.Button.Grid.Tooltip=Imposta il colore e l'opacitïż½ della griglia CoordAxes.Dialog.GridColor.Title=Scegli il colore della griglia CoordAxes.MenuItem.GridColor=Colore griglia... -CoordAxes.MenuItem.GridOpacity=Opacità... -CoordAxes.Dialog.GridOpacity.Title=Imposta opacità della griglia +CoordAxes.MenuItem.GridOpacity=Opacitïż½... +CoordAxes.Dialog.GridOpacity.Title=Imposta opacitïż½ della griglia DynamicSystem.Dialog.RemoveBooster.Title=Conflitto lanciatore DynamicSystem.Dialog.RemoveBooster.Message1=Le particelle in un sistema non possono lanciarsi a vicenda. -DynamicSystem.Dialog.RemoveBooster.Message2=Il lanciatore in conflitto verrà rimosso da +DynamicSystem.Dialog.RemoveBooster.Message2=Il lanciatore in conflitto verrïż½ rimosso da DynamicSystem.Dialog.RemoveBooster.Message3=prima di modificare il sistema. # Additions by Doug Brown 2014-05-09 PageTView.MenuItem.OpenInBrowser=Apri pagina nel browser @@ -1322,9 +1322,9 @@ TToolbar.Button.Desktop.Menu.OpenFile=File # Additions by Doug Brown 2014-10-24 Tracker.Prefs.MenuItem.Text=Preferenze file Tracker.Prefs.NotFound=Preferenze file non trovato -TapeMeasure.Alert.UnfixScale.Message1=La scala del sistema di coordinate non deve essere fissa per attaccarsi alle estremità. +TapeMeasure.Alert.UnfixScale.Message1=La scala del sistema di coordinate non deve essere fissa per attaccarsi alle estremitïż½. TapeMeasure.Alert.UnfixScale.Message2=Vuoi renderla non fissa? -TapeMeasure.Alert.UnfixScale.Title=La scala è fissa +TapeMeasure.Alert.UnfixScale.Title=La scala ïż½ fissa Tracker.Dialog.StarterWarning.Title=Lancio non standard # Additions by Doug Brown 2014-12-26 TrackDataBuilder.Dialog.NoFunctionsFound.Message=Nessuna funzione dati trovata per il tipo di traccia @@ -1332,10 +1332,10 @@ TrackDataBuilder.Dialog.NoFunctionsFound.Title=Funzioni non trovate TrackDataBuilder.Instructions.SelectToAutoload=Selezionare le funzioni dati da autocaricare dalla lista seguente. TrackDataBuilder.Instructions.WhereDefined=Le funzioni sono definite nei file XML Data Builder trovati nelle cartelle mostrate. TrackDataBuilder.Instructions.HowToAddFunction=Per aggiungere una nuova funzione, crearla nel Data Builder, salvarla in un file XML, e copiare il file in una delle cartelle. -TrackDataBuilder.Instructions.HowToAddDirectory=Per cambiare i percorsi di ricerca, fare clic sul pulsande ĞPercorsi di ricercağ. +TrackDataBuilder.Instructions.HowToAddDirectory=Per cambiare i percorsi di ricerca, fare clic sul pulsande ïż½Percorsi di ricercaïż½. TrackDataBuilder.Dialog.ConvertAutoload.Message1=Alcune funzioni autocaricate sono memorizzate in un vecchio formato. TrackDataBuilder.Dialog.ConvertAutoload.Message2=Vuoi convertirle nel nuovo formato portabile? -TrackDataBuilder.Dialog.ConvertAutoload.Message3=Nota: il nuovo formato non è leggibile dalle vecchie versioni di Tracker. +TrackDataBuilder.Dialog.ConvertAutoload.Message3=Nota: il nuovo formato non ïż½ leggibile dalle vecchie versioni di Tracker. TrackDataBuilder.Dialog.ConvertAutoload.Title=Convertire le funzioni di autocaricamento? TrackDataBuilder.MenuItem.SaveAll.Text=Salva tutto TrackDataBuilder.MenuItem.SaveAll.Tooltip=Salva tutte le funzioni in un formato portabile e autocaricabile (non leggibile dalle vecchie versioni di Tracker) @@ -1360,15 +1360,15 @@ DataTrackTimeControl.Button.Video=Tempo video DataTrackTimeControl.Button.Data=Tempo dati DataTrackTimeControl.Border.Title=Base oraria TActions.Action.DataTrack.Unsupported.JarFile=File jar -TActions.Action.DataTrack.Unsupported.Message=non è possibile inviare dati a Tracker -TActions.Action.DataTrack.Unsupported.Title=Non è una sorgente dati +TActions.Action.DataTrack.Unsupported.Message=non ïż½ possibile inviare dati a Tracker +TActions.Action.DataTrack.Unsupported.Title=Non ïż½ una sorgente dati # Additions by Doug Brown 2015-04-17 to 2015-05-30 DataTrackTool.Dialog.VideoNotFound.Message1=Impossibile trovare il video DataTrackTool.Dialog.VideoNotFound.Message2=Vuoi cercarlo? DataTrackTool.Dialog.VideoNotFound.Title=Video non trovato DataTrackTool.Dialog.FileNotFound.Message1=Impossibile trovare il file DataTrackTool.Dialog.FileNotFound.Title=File non trovato -DataTrackTool.Dialog.InvalidTRK.Message=Non è un file TRK valido +DataTrackTool.Dialog.InvalidTRK.Message=Non ïż½ un file TRK valido DataTrackTool.Dialog.InvalidTRK.Title=File non valido DataTrackTool.Dialog.InvalidData.Message=I dati non includono le posizioni (x, y) DataTrackTool.Dialog.InvalidData.Title=Dati non validi @@ -1389,8 +1389,8 @@ CircleFitter.Checkbox.RadialLine.Tooltip=Mostra o nasconde la linea radiale CircleFitter.Field.Radius.Tooltip=Raggio del miglior cerchio trovato CircleFitter.Field.CenterX.Tooltip=componente-x del miglior centro di cerchio CircleFitter.Field.CenterY.Tooltip=componente-y del miglior centro di cerchio -CircleFitter.Label.MarkPoint=Trovare un cerchio richiede 3 o più punti dati -CircleFitter.Hint.MarkMore=maiusc-clic per marcare più punti se desiderato +CircleFitter.Label.MarkPoint=Trovare un cerchio richiede 3 o piïż½ punti dati +CircleFitter.Hint.MarkMore=maiusc-clic per marcare piïż½ punti se desiderato CircleFitter.Hint.Mark3=maiusc-clic per marcare i punti dei dati CircleFitter.Data.Center=centro CircleFitter.Data.Description.0=tempo @@ -1412,8 +1412,8 @@ CircleFitter.MenuItem.OriginToCenter=Sposta origine al centro CircleFitter.MenuItem.Inspector=Copia passi punti di massa... CircleFitter.MenuItem.ClearPoints=Cancella punti CircleFitter.MenuItem.DeletePoint=Cancella punto selezionato -CircleFitter.Inspector.Instructions1=Questo trova un cerchio a 3 o più punti dati. -CircleFitter.Inspector.Instructions2=È possibile marcare i punti a mano o copiarli da un punto di massa. +CircleFitter.Inspector.Instructions1=Questo trova un cerchio a 3 o piïż½ punti dati. +CircleFitter.Inspector.Instructions2=ïż½ possibile marcare i punti a mano o copiarli da un punto di massa. CircleFitter.Inspector.Label.SourceTrack=Traccia sorgente CircleFitter.Inspector.Label.From=Passi CircleFitter.Inspector.Label.To=a @@ -1434,11 +1434,11 @@ AttachmentInspector.Label.Frames=Quadri AttachmentInspector.Label.To=a AttachmentInspector.Label.Offset=Scostamento AttachmentInspector.Button.Steps=Singola traccia -AttachmentInspector.Button.Tracks=Più tracce -AttachmentInspector.Button.Steps.Tooltip=Allega più punti dati ad una singola traccia +AttachmentInspector.Button.Tracks=Piïż½ tracce +AttachmentInspector.Button.Steps.Tooltip=Allega piïż½ punti dati ad una singola traccia AttachmentInspector.Button.Tracks.Tooltip=Allega un punto dati ad ogni traccia AttachmentInspector.Checkbox.Relative=Numerazione quadri relativa -AttachmentInspector.Checkbox.Relative.Tooltip=Il campo quadri specificato è relativo al quadro corrente +AttachmentInspector.Checkbox.Relative.Tooltip=Il campo quadri specificato ïż½ relativo al quadro corrente AttachmentInspector.Border.Title.AttachTo=Allega a CircleFitter.Button.DataPoints=punti dati CircleFitter.Circle.Name=perimetro @@ -1457,7 +1457,7 @@ Undo.Description.Edit=Modifica Undo.Description.Video=Video Undo.Description.Step=Passo Undo.Description.Steps=Passi -Undo.Description.Properties=Proprietà +Undo.Description.Properties=Proprietïż½ Undo.Description.Add=Aggiungi Undo.Description.Remove=Rimuovi Undo.Description.Images=Immagini @@ -1480,15 +1480,15 @@ TTrack.MenuItem.NumberFormat=Formato numero... TTrack.NumberField.Format.Tooltip=Clic destro per formattare TTrack.NumberField.Format.Tooltip.OSX=Control-clic per formattare NumberFormatSetter.Title=Formati numero -NumberFormatSetter.ApplyToVariables.Text=Seleziona una traccia e una o più variabili: +NumberFormatSetter.ApplyToVariables.Text=Seleziona una traccia e una o piïż½ variabili: NumberFormatSetter.TitledBorder.ApplyTo.Text=Applica i cambiamenti a: NumberFormatSetter.Button.ApplyToTrackOnly.Text=Solo questa traccia NumberFormatSetter.Button.ApplyToTrackType.Text=Tutte le tracce di tipo NumberFormatSetter.Button.ApplyToDimension.Text=Tutte le variabili con dimensioni -NumberFormatSetter.TitledBorder.Units.Text=Unità angolo: +NumberFormatSetter.TitledBorder.Units.Text=Unitïż½ angolo: NumberFormatSetter.NoPattern=predefinito NumberFormatSetter.Button.Revert=Ripristina -NumberFormatSetter.DimensionList.More=di più +NumberFormatSetter.DimensionList.More=di piïż½ NumberFormatSetter.Help.Dimensions.1=Le dimensioni variabile sono combinazioni di: NumberFormatSetter.Help.Dimensions.2=L lunghezza NumberFormatSetter.Help.Dimensions.3=T tempo @@ -1536,12 +1536,12 @@ ParticleModel.Stamp.Name=timbro # Additions by Doug Brown 2017-08-21 PlotGuestDialog.Instructions=Confronta con: TTrackBar.Dialog.Relaunch.DownloadLabel.Text=Scaricamento file su -TTrackBar.Dialog.Relaunch.RelaunchLabel.Text=Tracker si riavvierà a breve. +TTrackBar.Dialog.Relaunch.RelaunchLabel.Text=Tracker si riavvierïż½ a breve. PrefsDialog.Tab.Tracking.Title=Traccce PrefsDialog.Marking.BorderTitle=Nuove Tracce PrefsDialog.Checkbox.ResetToZero.Text=Auto-reimpostazione al passo 0 per marcatura Tracker.Dialog.ChangePrefVersionAfterUpgrade.Message1=Hai appena aggiornato alla versione -Tracker.Dialog.ChangePrefVersionAfterUpgrade.Message2=ma la tua versione corrente preferita è +Tracker.Dialog.ChangePrefVersionAfterUpgrade.Message2=ma la tua versione corrente preferita ïż½ Tracker.Dialog.ChangePrefVersionAfterUpgrade.Message3=Impostare come preferita la nuova versione? Tracker.Dialog.ChangePrefVersionAfterUpgrade.Title=Preferita di Tracker CircleFitter.Data.PointCount=punti @@ -1562,10 +1562,10 @@ TTrackBar.Dialog.Relaunch.RelaunchLabel.Upgrade.Text=L'installazione dovrebbe pa TTrackBar.Dialog.Relaunch.Title.Text=Scaricamento TTrackBar.Dialog.Download.Title=Aggiornamento Tracker TTrackBar.Dialog.Download.Message1=I file di aggiornamento di Tracker verranno scaricati su -TTrackBar.Dialog.Download.Message2=Tracker poi si riavvierà. Continuare? -TTrackBar.Dialog.Download.Upgrade.Message1=L'aggiornamento di Tracker verrà scaricato su -TTrackBar.Dialog.Download.Upgrade.Message2=Tracker poi avvierà l'installazione e si chiuderà. -TTrackBar.Dialog.LinuxCommand.Message1=L'aggiornamento dovrà essere eseguito come root. Usare il comando seguente +TTrackBar.Dialog.Download.Message2=Tracker poi si riavvierïż½. Continuare? +TTrackBar.Dialog.Download.Upgrade.Message1=L'aggiornamento di Tracker verrïż½ scaricato su +TTrackBar.Dialog.Download.Upgrade.Message2=Tracker poi avvierïż½ l'installazione e si chiuderïż½. +TTrackBar.Dialog.LinuxCommand.Message1=L'aggiornamento dovrïż½ essere eseguito come root. Usare il comando seguente TTrackBar.Dialog.LinuxCommand.Message2=selezionando il teso e battendo Ctrl-C, per poi incollarlo nel terminale. TTrackBar.Dialog.LinuxCommand.Message3=Fare clic su OK per chiudere Tracker dopo aver incollato. @@ -1593,7 +1593,7 @@ PencilControlDialog.Button.Color.Tooltip=Seleziona la linea e il colore dell'eti PencilControlDialog.Field.Caption.Tooltip=Modifica il testo dell'etichetta PencilControlDialog.Dropdown.Drawing.Tooltip=Seleziona il disegno attivo PencilControlDialog.Spinner.FontSize.Tooltip=Imposta la dimensine del carattere dell'etichetta -PencilControlDialog.Spinner.FrameRange.Tooltip=Imposta il campo dei quadri sui quali è visibile il disegno +PencilControlDialog.Spinner.FrameRange.Tooltip=Imposta il campo dei quadri sui quali ïż½ visibile il disegno PencilControlDialog.DrawingEdit.Undo.Text=Cancella la linea PencilControlDialog.DrawingEdit.Redo.Text=Annulla la cancellazione della linea PencilControlDialog.CaptionEdit.Undo.Text=Annulla la modifica del testo dell'etichetta @@ -1621,20 +1621,20 @@ PointMass.Description.Pixel=posizione pixel Vector.Description.Magnitudes=magnitude e componenti LineProfile.Description.RGB=componenti del colore CircleFitter.Description.Positions=posizioni -TapeMeasure.MenuItem.Attach=Attacca estremità... -UnitsDialog.Title=Unità -UnitsDialog.Checkbox.Visible.Text=Unità visibili -UnitsDialog.Checkbox.Visible.Tooltip=Mostra o nascondi unità nei campi e nelle tabelle -UnitsDialog.Checkbox.Visible.Disabled.Tooltip=Le unità non definite non possono essere visualizzate -UnitsDialog.Field.Undefined.Tooltip=Le unità non sono definite -UnitsDialog.Border.LMT.Text=Unità LMT -TTrack.MenuItem.ShowUnits=Mostra unità -TTrack.MenuItem.HideUnits=Nascondi unità -TapeMeasure.Dialog.ChangeLengthUnit.Message=Cambia l'unità di lunghezza in -TapeMeasure.Dialog.ChangeLengthUnit.Title=Unità di lunghezza +TapeMeasure.MenuItem.Attach=Attacca estremitïż½... +UnitsDialog.Title=Unitïż½ +UnitsDialog.Checkbox.Visible.Text=Unitïż½ visibili +UnitsDialog.Checkbox.Visible.Tooltip=Mostra o nascondi unitïż½ nei campi e nelle tabelle +UnitsDialog.Checkbox.Visible.Disabled.Tooltip=Le unitïż½ non definite non possono essere visualizzate +UnitsDialog.Field.Undefined.Tooltip=Le unitïż½ non sono definite +UnitsDialog.Border.LMT.Text=Unitïż½ LMT +TTrack.MenuItem.ShowUnits=Mostra unitïż½ +TTrack.MenuItem.HideUnits=Nascondi unitïż½ +TapeMeasure.Dialog.ChangeLengthUnit.Message=Cambia l'unitïż½ di lunghezza in +TapeMeasure.Dialog.ChangeLengthUnit.Title=Unitïż½ di lunghezza Popup.Menu.Numbers=Numeri Popup.MenuItem.Formats=Formati -Popup.MenuItem.Units=Unità +Popup.MenuItem.Units=Unitïż½ HelpFinder.SearchResults=Risultati della ricerca HelpFinder.ResultsFor=Risultati della ricerca per HelpFinder.Label.SearchFor.Text=Cerca aiuto per @@ -1645,10 +1645,10 @@ HelpFinder.Dialog.UnableToWrite.Text=I risultati della ricerca non possono esser HelpFinder.Dialog.UnableToWrite.Title=Scrittura fallita # Additions by Doug Brown 2018-02-27 -PointMass.Dialog.ChangeMassUnit.Message=Cambia l'unità di massa in -PointMass.Dialog.ChangeMassUnit.Title=Unità di massa +PointMass.Dialog.ChangeMassUnit.Message=Cambia l'unitïż½ di massa in +PointMass.Dialog.ChangeMassUnit.Title=Unitïż½ di massa AlgorithmDialog.Button.SmoothFiniteDifference=Arrotonda la differenza finita -AlgorithmDialog.SmoothFiniteDifference.Message1=Usa un algoritmo di arrotondamento della velocità. -AlgorithmDialog.SmoothFiniteDifference.Message2=Velocità: v[i] = (-2*x[i+2] - x[i+1] + x[i-1] + 2*x[i-2]) / (10*dt) +AlgorithmDialog.SmoothFiniteDifference.Message1=Usa un algoritmo di arrotondamento della velocitïż½. +AlgorithmDialog.SmoothFiniteDifference.Message2=Velocitïż½: v[i] = (-2*x[i+2] - x[i+1] + x[i-1] + 2*x[i-2]) / (10*dt) AlgorithmDialog.SmoothFiniteDifference.Message3=Accelerazione: a[i] = (2*x[i+2] - x[i+1] - 2*x[i] - x[i-1] + 2*x[i-2]) / (7*dt^2) AlgorithmDialog.TargetMasses.All=Tutte le tracce dei punti di massa \ No newline at end of file diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_iw_IL.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_iw_IL.properties index d51417e0..1b438641 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_iw_IL.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_iw_IL.properties @@ -732,7 +732,7 @@ PrefsDialog.Checkbox.DefaultSize=\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05d1\u05 PrefsDialog.Checkbox.HintsOn=\u05d4\u05e8\u05d0\u05d4 \u05e8\u05de\u05d6\u05d9\u05dd \u05db\u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc PrefsDialog.Tab.Video.Title=\u05e1\u05e8\u05d8 PrefsDialog.VideoPref.BorderTitle=\u05de\u05e0\u05d5\u05e2 \u05d5\u05d9\u05d3\u05d0\u05d5 -PrefsDialog.Button.Xuggle=\u05e9\u05d5\u05d2\u05dc +PrefsDialog.Button.FFMPeg=\u05e9\u05d5\u05d2\u05dc PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=\u05e0\u05d9\u05d4\u05d5\u05dc \u05d6\u05d9\u05db\u05e8\u05d5\u05df \u05d0\u05d9\u05e0\u05d5 \u05d6\u05de\u05d9\u05df \u05db\u05d0\u05e9\u05e8 \u05de\u05e9\u05ea\u05de\u05e9\u05d9\u05dd \u05d1- Web Start. PrefsDialog.Dialog.WebStart.Title=\u05de\u05e6\u05d1 Web Start @@ -747,9 +747,9 @@ PrefsDialog.Upgrades.Weekly=\u05e9\u05d1\u05d5\u05e2\u05d9 PrefsDialog.Upgrades.Monthly=\u05d7\u05d5\u05d3\u05e9\u05d9 PrefsDialog.Upgrades.Never=\u05d0\u05e3-\u05e4\u05e2\u05dd PrefsDialog.Button.CheckForUpgrade=\u05d1\u05d3\u05d5\u05e7 \u05e2\u05db\u05e9\u05d9\u05d5 -PrefsDialog.Xuggle.Speed.BorderTitle=\u05d4\u05e7\u05e8\u05e0\u05d4 \u05de\u05d7\u05d3\u05e9 \u05e2\u05dd \u05e9\u05d5\u05d2\u05dc -PrefsDialog.Xuggle.Slow=\u05d4\u05d7\u05dc\u05e7 (\u05e2\u05dc\u05d5\u05dc \u05dc\u05d4\u05d9\u05d5\u05ea \u05d0\u05d9\u05d8\u05d9) -PrefsDialog.Xuggle.Fast=\u05de\u05d4\u05e8 (\u05e2\u05dc\u05d5\u05dc \u05dc\u05d4\u05d9\u05d5\u05ea \u05e7\u05d5\u05e4\u05e6\u05e0\u05d9) +PrefsDialog.FFMPeg.Speed.BorderTitle=\u05d4\u05e7\u05e8\u05e0\u05d4 \u05de\u05d7\u05d3\u05e9 \u05e2\u05dd \u05e9\u05d5\u05d2\u05dc +PrefsDialog.FFMPeg.Slow=\u05d4\u05d7\u05dc\u05e7 (\u05e2\u05dc\u05d5\u05dc \u05dc\u05d4\u05d9\u05d5\u05ea \u05d0\u05d9\u05d8\u05d9) +PrefsDialog.FFMPeg.Fast=\u05de\u05d4\u05e8 (\u05e2\u05dc\u05d5\u05dc \u05dc\u05d4\u05d9\u05d5\u05ea \u05e7\u05d5\u05e4\u05e6\u05e0\u05d9) PrefsDialog.CalibrationTool.BorderTitle=\u05db\u05dc\u05d9 \u05db\u05d9\u05d5\u05dc \u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc Protractor.Name=\u05de\u05d3-\u05d6\u05d5\u05d9\u05ea Protractor.New.Name=\u05de\u05d3-\u05d6\u05d5\u05d9\u05ea @@ -829,23 +829,23 @@ TMenuBar.Menu.MeasuringTools=\u05db\u05dc\u05d9 \u05de\u05d3\u05d9\u05d3\u05d4 TMenuBar.Menu.AngleUnits=\u05d9\u05d7\u05d9\u05d3\u05d5\u05ea \u05d6\u05d5\u05d9\u05ea TMenuBar.MenuItem.Degrees=\u05de\u05e2\u05dc\u05d5\u05ea TMenuBar.MenuItem.Radians=\u05e8\u05d3\u05d9\u05d0\u05e0\u05d9\u05dd -Tracker.Dialog.NoXuggle.Title=\u05e9\u05d5\u05d2\u05dc \u05dc\u05d0 \u05e0\u05de\u05e6\u05d0 -Tracker.Dialog.NoXuggle.Message1=\u05e9\u05d5\u05d2\u05dc (\u05de\u05e0\u05d5\u05e2 \u05d5\u05d9\u05d3\u05d0\u05d5 \u05de\u05e6\u05d5\u05de\u05d3) \u05dc\u05d0 \u05de\u05d5\u05ea\u05e7\u05df. -Tracker.Dialog.NoXuggle.Message2=\u05d4\u05d5\u05e8\u05d3 \u05d0\u05ea \u05e9\u05d5\u05d2\u05dc \u05de- http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=\u05d0\u05d5\u05d3\u05d5\u05ea \u05e9\u05d5\u05d2\u05dc... -Tracker.Dialog.AboutXuggle.Title=\u05d0\u05d5\u05d3\u05d5\u05ea \u05e9\u05d5\u05d2\u05dc -Tracker.Dialog.AboutXuggle.Message.Version=\u05d2\u05e8\u05e1\u05ea \u05e9\u05d5\u05d2\u05dc -Tracker.Dialog.AboutXuggle.Message.Home=\u05de\u05d9\u05e7\u05d5\u05dd \u05e9\u05d5\u05d2\u05dc: -Tracker.Dialog.AboutXuggle.Message.Path=\u05de\u05d9\u05e7\u05d5\u05dd \u05e7\u05d1\u05e6\u05d9 jar \u05e9\u05dc \u05e9\u05d5\u05d2\u05dc: +Tracker.Dialog.NoFFMPeg.Title=\u05e9\u05d5\u05d2\u05dc \u05dc\u05d0 \u05e0\u05de\u05e6\u05d0 +Tracker.Dialog.NoFFMPeg.Message1=\u05e9\u05d5\u05d2\u05dc (\u05de\u05e0\u05d5\u05e2 \u05d5\u05d9\u05d3\u05d0\u05d5 \u05de\u05e6\u05d5\u05de\u05d3) \u05dc\u05d0 \u05de\u05d5\u05ea\u05e7\u05df. +Tracker.Dialog.NoFFMPeg.Message2=\u05d4\u05d5\u05e8\u05d3 \u05d0\u05ea \u05e9\u05d5\u05d2\u05dc \u05de- http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=\u05d0\u05d5\u05d3\u05d5\u05ea \u05e9\u05d5\u05d2\u05dc... +Tracker.Dialog.AboutFFMPeg.Title=\u05d0\u05d5\u05d3\u05d5\u05ea \u05e9\u05d5\u05d2\u05dc +Tracker.Dialog.AboutFFMPeg.Message.Version=\u05d2\u05e8\u05e1\u05ea \u05e9\u05d5\u05d2\u05dc +Tracker.Dialog.AboutFFMPeg.Message.Home=\u05de\u05d9\u05e7\u05d5\u05dd \u05e9\u05d5\u05d2\u05dc: +Tracker.Dialog.AboutFFMPeg.Message.Path=\u05de\u05d9\u05e7\u05d5\u05dd \u05e7\u05d1\u05e6\u05d9 jar \u05e9\u05dc \u05e9\u05d5\u05d2\u05dc: Tracker.Dialog.NoVideoEngine.Message1=\u05dc\u05d0 \u05de\u05d5\u05ea\u05e7\u05df \u05de\u05e0\u05d5\u05e2 \u05d5\u05d9\u05d3\u05d0\u05d5. \u05dc\u05dc\u05d0 \u05de\u05e0\u05d5\u05e2 \u05d0\u05ea\u05d4 Tracker.Dialog.NoVideoEngine.Message2=\u05d9\u05db\u05d5\u05dc \u05dc\u05e4\u05ea\u05d5\u05d7 \u05e8\u05e7 \u05ea\u05de\u05d5\u05e0\u05d5\u05ea (JPEG, PNG) \u05d5\u05d4\u05e0\u05e4\u05e9\u05ea GIFs. Tracker.Dialog.NoVideoEngine.Message3=\u05de\u05d5\u05de\u05dc\u05e5: \u05d4\u05ea\u05e7\u05df \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05d8\u05e8\u05e7\u05e8 \u05e2\u05dd \u05e9\u05d5\u05d2\u05dc. Tracker.Dialog.NoVideoEngine.Title=\u05d0\u05d9\u05df \u05de\u05e0\u05d5\u05e2 \u05d5\u05d9\u05d3\u05d0\u05d5 -Tracker.Dialog.NoXuggle.Message1=\u05e9\u05d5\u05d2\u05dc \u05dc\u05d0 \u05e2\u05d5\u05d1\u05d3 \u05db\u05e9\u05d5\u05e8\u05d4. \u05d1\u05d1\u05e7\u05e9\u05d4 \u05d1\u05d3\u05d5\u05e7 \u05e9\u05e7\u05d1\u05e6\u05d9 -Tracker.Dialog.NoXuggle.Message2=jar \u05e9\u05dc \u05e9\u05d5\u05d2\u05dc \u05e0\u05de\u05e6\u05d0\u05d9\u05dd \u05d1\u05ea\u05d9\u05e7\u05d9\u05d9\u05ea \u05d4\u05d1\u05d9\u05ea \u05e9\u05dc \u05d8\u05e8\u05e7\u05e8. \u05dc\u05e4\u05e8\u05d8\u05d9\u05dd, -Tracker.Dialog.NoXuggle.Message3=\u05e8\u05d0\u05d4 Tracker_README.txt \u05d1\u05ea\u05d9\u05e7\u05d9\u05d9\u05ea \u05d4\u05d1\u05d9\u05ea \u05e9\u05dc \u05d8\u05e8\u05e7\u05e8. -Tracker.Dialog.NoXuggle.Message4=\u05dc\u05d4\u05ea\u05e7\u05e0\u05ea \u05e9\u05d5\u05d2\u05dc, \u05d4\u05d5\u05e8\u05d3 \u05d0\u05ea \u05de\u05ea\u05e7\u05d9\u05df \u05d8\u05e8\u05e7\u05e8 \u05d4\u05d0\u05d7\u05e8\u05d5\u05df -Tracker.Dialog.NoXuggle.Title=\u05e9\u05d5\u05d2\u05dc \u05dc\u05d0 \u05e0\u05d2\u05d9\u05e9 +Tracker.Dialog.NoFFMPeg.Message1=\u05e9\u05d5\u05d2\u05dc \u05dc\u05d0 \u05e2\u05d5\u05d1\u05d3 \u05db\u05e9\u05d5\u05e8\u05d4. \u05d1\u05d1\u05e7\u05e9\u05d4 \u05d1\u05d3\u05d5\u05e7 \u05e9\u05e7\u05d1\u05e6\u05d9 +Tracker.Dialog.NoFFMPeg.Message2=jar \u05e9\u05dc \u05e9\u05d5\u05d2\u05dc \u05e0\u05de\u05e6\u05d0\u05d9\u05dd \u05d1\u05ea\u05d9\u05e7\u05d9\u05d9\u05ea \u05d4\u05d1\u05d9\u05ea \u05e9\u05dc \u05d8\u05e8\u05e7\u05e8. \u05dc\u05e4\u05e8\u05d8\u05d9\u05dd, +Tracker.Dialog.NoFFMPeg.Message3=\u05e8\u05d0\u05d4 Tracker_README.txt \u05d1\u05ea\u05d9\u05e7\u05d9\u05d9\u05ea \u05d4\u05d1\u05d9\u05ea \u05e9\u05dc \u05d8\u05e8\u05e7\u05e8. +Tracker.Dialog.NoFFMPeg.Message4=\u05dc\u05d4\u05ea\u05e7\u05e0\u05ea \u05e9\u05d5\u05d2\u05dc, \u05d4\u05d5\u05e8\u05d3 \u05d0\u05ea \u05de\u05ea\u05e7\u05d9\u05df \u05d8\u05e8\u05e7\u05e8 \u05d4\u05d0\u05d7\u05e8\u05d5\u05df +Tracker.Dialog.NoFFMPeg.Title=\u05e9\u05d5\u05d2\u05dc \u05dc\u05d0 \u05e0\u05d2\u05d9\u05e9 Tracker.About.DefaultLocale=\u05de\u05d9\u05e7\u05d5\u05dd \u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc Tracker.About.CurrentLanguage=\u05e9\u05e4\u05d4 Tracker.Dialog.InsufficientMemory.Title=\u05d6\u05d9\u05db\u05e8\u05d5\u05df \u05d0\u05d9\u05e0\u05d5 \u05de\u05e1\u05e4\u05e7 @@ -891,7 +891,7 @@ TTrackBar.Memory.Menu.SetSize=\u05d4\u05d2\u05d3\u05e8 \u05d2\u05d5\u05d3\u05dc TTrackBar.Button.Version=\u05e2\u05db\u05e9\u05d9\u05d5 \u05d6\u05de\u05d9\u05df, \u05d2\u05e8\u05e1\u05d4 TTrackBar.Popup.MenuItem.Upgrade=\u05e9\u05d3\u05e8\u05d2 \u05e2\u05db\u05e9\u05d9\u05d5... TTrackBar.Popup.MenuItem.Ignore=\u05d4\u05ea\u05e2\u05dc\u05dd -XuggleVideo.MenuItem.SmoothPlay=\u05d4\u05e7\u05e8\u05e0\u05d4 \u05d7\u05dc\u05e7\u05d4 (\u05e2\u05dc\u05d5\u05dc \u05dc\u05d4\u05d9\u05d5\u05ea \u05d0\u05d9\u05d8\u05d9) +FFMPegVideo.MenuItem.SmoothPlay=\u05d4\u05e7\u05e8\u05e0\u05d4 \u05d7\u05dc\u05e7\u05d4 (\u05e2\u05dc\u05d5\u05dc \u05dc\u05d4\u05d9\u05d5\u05ea \u05d0\u05d9\u05d8\u05d9) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=\u05e1\u05e8\u05d8 \u05db\u05d9\u05d5\u05dc @@ -920,13 +920,13 @@ WorldTView.Button.World=\u05d1\u05d9\u05d7\u05d9\u05d3\u05d5\u05ea \u05d0\u05de\ # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=\u05d4\u05d6\u05d4\u05e8\u05d5\u05ea PrefsDialog.Checkbox.WarnIfNoEngine=\u05d0\u05d9\u05df \u05de\u05e0\u05d5\u05e2 \u05d5\u05d9\u05d3\u05d0\u05d5 -PrefsDialog.Checkbox.WarnIfXuggleError=\u05e9\u05d2\u05d9\u05d0\u05ea \u05e9\u05d5\u05d2\u05dc \u05dc\u05d0 \u05e7\u05d8\u05dc\u05e0\u05d9\u05ea +PrefsDialog.Checkbox.WarnIfFFMPegError=\u05e9\u05d2\u05d9\u05d0\u05ea \u05e9\u05d5\u05d2\u05dc \u05dc\u05d0 \u05e7\u05d8\u05dc\u05e0\u05d9\u05ea PropertiesDialog.Title=\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9\u05dd PropertiesDialog.Label.Author=\u05d9\u05d5\u05e6\u05e8\u05d9\u05dd PropertiesDialog.Label.Contact=\u05e7\u05e9\u05e8 TActions.Action.Properties=\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9\u05dd... TActions.Action.OpenBrowser=\u05e4\u05ea\u05d7 \u05d3\u05e4\u05d3\u05e4\u05df \u05e1\u05e4\u05e8\u05d9\u05d5\u05ea... -TFrame.Progress.Xuggle=\u05e9\u05d5\u05d2\u05dc \u05d8\u05d5\u05e2\u05df \u05ea\u05de\u05d5\u05e0\u05d4 +TFrame.Progress.FFMPeg=\u05e9\u05d5\u05d2\u05dc \u05d8\u05d5\u05e2\u05df \u05ea\u05de\u05d5\u05e0\u05d4 TFrame.Progress.ClickToCancel=(\u05dc\u05d7\u05e5 \u05dc\u05d1\u05d9\u05d8\u05d5\u05dc) TFrame.Dialog.StalledVideo.Title=\u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d8\u05e2\u05d9\u05e0\u05ea \u05d4\u05e1\u05e8\u05d8 TFrame.Dialog.StalledVideo.Message0=\u05d4\u05e1\u05e8\u05d8 \u05e0\u05e2\u05e6\u05e8 \u05d1\u05d6\u05de\u05df \u05d4\u05d8\u05e2\u05d9\u05e0\u05d4. \u05d6\u05d4 \u05e2\u05e9\u05d5\u05d9 \u05dc\u05d4\u05d9\u05d5\u05ea \u05d6\u05de\u05e0\u05d9. @@ -1200,17 +1200,17 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=\u05de\u05e9\u05da \u05ea\u05de\u05d5\u05e0\u05d4 \u05de\u05e9\u05ea\u05e0\u05d4 PrefsDialog.Button.NoEngine=\u05d0\u05e3-\u05d0\u05d7\u05d3 PrefsDialog.Dialog.SwitchToQT.Message=Switching to QuickTime also changes the Java VM to 32-bit. -PrefsDialog.Dialog.SwitchToXuggle32.Message=Switching to Xuggle also changes the Java VM to 32-bit. -PrefsDialog.Dialog.SwitchToXuggle64.Message=Switching to Xuggle also changes the Java VM to 64-bit. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=Switching to FFMPeg also changes the Java VM to 32-bit. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=Switching to FFMPeg also changes the Java VM to 64-bit. PrefsDialog.Dialog.SwitchVM.Title=Java VM Changed PrefsDialog.Dialog.SwitchTo32.Message=Switching to a 32-bit Java VM also changes the video engine to QuickTime. -PrefsDialog.Dialog.SwitchTo64.Message=Switching to a 64-bit Java VM also changes the video engine to Xuggle. +PrefsDialog.Dialog.SwitchTo64.Message=Switching to a 64-bit Java VM also changes the video engine to FFMPeg. PrefsDialog.Dialog.SwitchEngine.Title=Video Engine Changed PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=No video engine is available for a 64-bit Java VM. You will PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=still be able to open images (JPEG, PNG) and animated GIFs. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Are you sure you wish to switch to a 64-bit VM? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=No 64-bit Video Engine -PrefsDialog.Dialog.No32bitVMXuggle.Message=A 32-bit Java VM must be installed before Xuggle can be used. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=A 32-bit Java VM must be installed before FFMPeg can be used. PrefsDialog.Dialog.No32bitVMQT.Message=A 32-bit Java VM must be installed before QuickTime can be used. PrefsDialog.Dialog.No32bitVM.Message=For more information, see Tracker Help: Installation. PrefsDialog.Dialog.No32bitVM.Title=32-bit VM Required @@ -1226,10 +1226,10 @@ Tracker.Dialog.Button.RelaunchNow=Yes, relaunch now Tracker.Dialog.Button.ShowPrefs=No, but show preferences Tracker.Dialog.Button.ContinueWithoutEngine=No, continue without video Tracker.Dialog.EngineProblems.Message1=One or more video engines are installed but not working. -Tracker.Dialog.EngineProblems.Message2=For more information see Help|Diagnostics|About Xuggle or QuickTime. -Tracker.Dialog.ReplaceXuggle.Message1=We recommend you replace your current Xuggle video engine -Tracker.Dialog.ReplaceXuggle.Message2=with Xuggle version 3.4 by reinstalling Tracker (version 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=or above) and selecting Xuggle in the installation options. +Tracker.Dialog.EngineProblems.Message2=For more information see Help|Diagnostics|About FFMPeg or QuickTime. +Tracker.Dialog.ReplaceFFMPeg.Message1=We recommend you replace your current FFMPeg video engine +Tracker.Dialog.ReplaceFFMPeg.Message2=with FFMPeg version 3.4 by reinstalling Tracker (version 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=or above) and selecting FFMPeg in the installation options. TrackerIO.Dialog.DurationIsConstant.Message=All frame durations are equal (constant fps). TrackerIO.ZIPResourceFilter.Description=Tracker ZIP File (.trz) TToolbar.Button.Desktop.Tooltip=Display supplemental HTML and/or PDF documents @@ -1295,7 +1295,7 @@ TableTrackView.Dialog.NameColumn.Title=\u05e2\u05de\u05d5\u05d3\u05ea \u05d8\u05 TToolBar.MenuItem.StretchOff=Reset # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Xuggle Version +PrefsDialog.Checkbox.WarnFFMPegVersion=FFMPeg Version PrefsDialog.Checkbox.WarnCopyFailed=Video Engine File Copy Errors Tracker.Dialog.FailedToCopy.Title=File Copy Error Velocity.Dialog.Color.Title=Choose Velocity Color diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_ko.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_ko.properties index 78fb4bf9..5a172149 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_ko.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_ko.properties @@ -720,7 +720,7 @@ PrefsDialog.Checkbox.DefaultSize=\uae30\ubcf8 \uc124\uc815\uc73c\ub85c PrefsDialog.Checkbox.HintsOn=\ud48d\uc120 \ub3c4\uc6c0\ub9d0 \ubcf4\uae30 PrefsDialog.Tab.Video.Title=\ube44\ub514\uc624 PrefsDialog.VideoPref.BorderTitle=\ube44\ub514\uc624 \uc5d4\uc9c4 -PrefsDialog.Button.Xuggle=Xuggle (\uad8c\uc7a5) +PrefsDialog.Button.FFMPeg=FFMPeg (\uad8c\uc7a5) PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=\uc6f9 \uc2dc\uc791 \ubaa8\ub4dc\uc77c \uacbd\uc6b0 \uba54\ubaa8\ub9ac \uad00\ub9ac\uac00 \ubd88\uac00\ub2a5\ud569\ub2c8\ub2e4. PrefsDialog.Dialog.WebStart.Title=\uc6f9 \uc2dc\uc791 \ubaa8\ub4dc @@ -735,9 +735,9 @@ PrefsDialog.Upgrades.Weekly=1\uc8fc\uc77c \uac04\uaca9 PrefsDialog.Upgrades.Monthly=1\ub2ec \uac04\uaca9 PrefsDialog.Upgrades.Never=\ud655\uc778\ud558\uc9c0 \uc54a\uc74c PrefsDialog.Button.CheckForUpgrade=\uc9c0\uae08 \ud655\uc778 -PrefsDialog.Xuggle.Speed.BorderTitle=Xuggle \ube44\ub514\uc624 \uc7ac\uc0dd -PrefsDialog.Xuggle.Slow=\ubd80\ub4dc\ub7fd\uac8c (\ub290\ub9bc) -PrefsDialog.Xuggle.Fast=\uac70\uce60\uac8c (\ube60\ub984) +PrefsDialog.FFMPeg.Speed.BorderTitle=FFMPeg \ube44\ub514\uc624 \uc7ac\uc0dd +PrefsDialog.FFMPeg.Slow=\ubd80\ub4dc\ub7fd\uac8c (\ub290\ub9bc) +PrefsDialog.FFMPeg.Fast=\uac70\uce60\uac8c (\ube60\ub984) PrefsDialog.CalibrationTool.BorderTitle=\uae30\ubcf8 \uad50\uc815 \ub3c4\uad6c Protractor.Name=\uac01\ub3c4\uae30 Protractor.New.Name=\uac01\ub3c4\uae30 @@ -817,24 +817,24 @@ TMenuBar.Menu.MeasuringTools=\uce21\uc815 \ub3c4\uad6c TMenuBar.Menu.AngleUnits=\uac01 TMenuBar.MenuItem.Degrees=\ub3c4 TMenuBar.MenuItem.Radians=\ub77c\ub514\uc548 -Tracker.Dialog.NoXuggle.Title=Xuggle \uc744 \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. -Tracker.Dialog.NoXuggle.Message1=Xuggle \ube44\ub514\uc624 \uc5d4\uc9c4\uc774 \uc124\uce58\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. -Tracker.Dialog.NoXuggle.Message2=Xuggle \ub2e4\uc6b4\ub85c\ub4dc: http://www.xuggle.com/xuggler/downloads/ -Tracker.Action.AboutXuggle=Xuggle \uc815\ubcf4... -Tracker.Dialog.AboutXuggle.Title=Xuggle \uc815\ubcf4 -Tracker.Dialog.AboutXuggle.Message.Version=Xuggle \ubc84\uc804 -Tracker.Dialog.AboutXuggle.Message.Home=Xuggle \uc124\uce58 \uacbd\ub85c: -Tracker.Dialog.AboutXuggle.Message.Path=Xuggle jar \uacbd\ub85c: +Tracker.Dialog.NoFFMPeg.Title=FFMPeg \uc744 \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg \ube44\ub514\uc624 \uc5d4\uc9c4\uc774 \uc124\uce58\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. +Tracker.Dialog.NoFFMPeg.Message2=FFMPeg \ub2e4\uc6b4\ub85c\ub4dc: http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=FFMPeg \uc815\ubcf4... +Tracker.Dialog.AboutFFMPeg.Title=FFMPeg \uc815\ubcf4 +Tracker.Dialog.AboutFFMPeg.Message.Version=FFMPeg \ubc84\uc804 +Tracker.Dialog.AboutFFMPeg.Message.Home=FFMPeg \uc124\uce58 \uacbd\ub85c: +Tracker.Dialog.AboutFFMPeg.Message.Path=FFMPeg jar \uacbd\ub85c: Tracker.Dialog.NoVideoEngine.Message1=Tracker \ub294 \uae30\ubcf8 \ud615\uc2dd\uc758 \uc560\ub2c8\uba54\uc774\uc158 GIF, \uadf8\ub9bc\uacfc \ub3d9\uc601\uc0c1\uc744 \ubd88\ub7ec\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4. Tracker.Dialog.NoVideoEngine.Message2=\uadf8\ub7ec\ub098 \ub2e4\ub978 \ube44\ub514\uc624 \ud615\uc2dd\uc744 \ubd88\ub7ec\uc624\ub824\uba74 \ubcc4\ub3c4\uc758 \ube44\ub514\uc624 \uc5d4\uc9c4\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. -Tracker.Dialog.NoVideoEngine.Message3=\uacf5\uac1c \ucf54\ub4dc\uc774\uba70 \uacf5\ud1b5 \ud615\uc2dd\uc73c\ub85c \uad8c\uc7a5\ub41c \ube44\ub514\uc624 \uc5d4\uc9c4\uc778 Xuggle \uc744 \uc124\uce58\ud558\uae30 \uc704\ud55c +Tracker.Dialog.NoVideoEngine.Message3=\uacf5\uac1c \ucf54\ub4dc\uc774\uba70 \uacf5\ud1b5 \ud615\uc2dd\uc73c\ub85c \uad8c\uc7a5\ub41c \ube44\ub514\uc624 \uc5d4\uc9c4\uc778 FFMPeg \uc744 \uc124\uce58\ud558\uae30 \uc704\ud55c Tracker.Dialog.NoVideoEngine.Message4=\uac00\uc7a5 \ucd5c\uadfc\uc758 Tracker \uc124\uce58 \ud30c\uc77c \ub2e4\uc6b4\ub85c\ub4dc: Tracker.Dialog.NoVideoEngine.Title=\ube44\ub514\uc624 \uc5d4\uc9c4 \uc5c6\uc74c -Tracker.Dialog.NoXuggle.Message1=Xuggle \uc744 \uc62c\ubc14\ub974\uac8c \uc2e4\ud589\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. -Tracker.Dialog.NoXuggle.Message2=xuggle jar \ud30c\uc77c\uc774 \uc124\uce58 \uacbd\ub85c\uc5d0 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4. -Tracker.Dialog.NoXuggle.Message3=\uc124\uce58 \uacbd\ub85c\uc5d0 \uc788\ub294 Tracker_README.txt \ub97c \ucc38\uace0\ud558\uc138\uc694. -Tracker.Dialog.NoXuggle.Message4=Xuggle \uc744 \uc124\uce58\ud558\uae30 \uc704\ud55c \uac00\uc7a5 \ucd5c\uadfc\uc758 Tracker \uc124\uce58 \ud30c\uc77c \ub2e4\uc6b4\ub85c\ub4dc: -Tracker.Dialog.NoXuggle.Title=Xuggle \uc744 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc74c +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg \uc744 \uc62c\ubc14\ub974\uac8c \uc2e4\ud589\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +Tracker.Dialog.NoFFMPeg.Message2=ffmpeg jar \ud30c\uc77c\uc774 \uc124\uce58 \uacbd\ub85c\uc5d0 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4. +Tracker.Dialog.NoFFMPeg.Message3=\uc124\uce58 \uacbd\ub85c\uc5d0 \uc788\ub294 Tracker_README.txt \ub97c \ucc38\uace0\ud558\uc138\uc694. +Tracker.Dialog.NoFFMPeg.Message4=FFMPeg \uc744 \uc124\uce58\ud558\uae30 \uc704\ud55c \uac00\uc7a5 \ucd5c\uadfc\uc758 Tracker \uc124\uce58 \ud30c\uc77c \ub2e4\uc6b4\ub85c\ub4dc: +Tracker.Dialog.NoFFMPeg.Title=FFMPeg \uc744 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc74c Tracker.About.DefaultLocale=\uae30\ubcf8 \uc124\uc815 Tracker.About.CurrentLanguage=\uc5b8\uc5b4 Tracker.Dialog.InsufficientMemory.Title=\uba54\ubaa8\ub9ac \ubd80\uc871 @@ -880,7 +880,7 @@ TTrackBar.Memory.Menu.SetSize=\uba54\ubaa8\ub9ac \ud06c\uae30 \uc124\uc815... TTrackBar.Button.Version=\uc9c0\uae08 \ud65c\uc6a9 \uac00\ub2a5: \ubc84\uc804 TTrackBar.Popup.MenuItem.Upgrade=\uc9c0\uae08 \uc5c5\uadf8\ub808\uc774\ub4dc... TTrackBar.Popup.MenuItem.Ignore=\ubb34\uc2dc -XuggleVideo.MenuItem.SmoothPlay=\ubd80\ub4dc\ub7ec\uc6b4 \uc7ac\uc0dd (\ub290\ub9bc) +FFMPegVideo.MenuItem.SmoothPlay=\ubd80\ub4dc\ub7ec\uc6b4 \uc7ac\uc0dd (\ub290\ub9bc) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=\uad50\uc815 \uc904\uc790 @@ -909,13 +909,13 @@ WorldTView.Button.World=\uc6d4\ub4dc \ubdf0 # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=\uc8fc\uc758 PrefsDialog.Checkbox.WarnIfNoEngine=\ube44\ub514\uc624 \uc5d4\uc9c4 \uc5c6\uc74c -PrefsDialog.Checkbox.WarnIfXuggleError=Xuggle \uc624\ub958 +PrefsDialog.Checkbox.WarnIfFFMPegError=FFMPeg \uc624\ub958 PropertiesDialog.Title=\uc18d\uc131 PropertiesDialog.Label.Author=\uc800\uc790 PropertiesDialog.Label.Contact=\uc5f0\ub77d\ucc98 TActions.Action.Properties=\uc18d\uc131... TActions.Action.OpenBrowser=\ub514\uc9c0\ud138 \ub77c\uc774\ube0c\ub7ec\ub9ac... -TFrame.Progress.Xuggle=Xuggle \ud504\ub808\uc784 \ubd88\ub7ec\uc624\ub294 \uc911 +TFrame.Progress.FFMPeg=FFMPeg \ud504\ub808\uc784 \ubd88\ub7ec\uc624\ub294 \uc911 TFrame.Progress.ClickToCancel=(\ucde8\uc18c\ud558\ub824\uba74 \ub204\ub984) TFrame.Dialog.StalledVideo.Title=\ube44\ub514\uc624 \ubd88\ub7ec\uc624\uae30 \uc624\ub958 TFrame.Dialog.StalledVideo.Message0=\ube44\ub514\uc624\ub97c \ubd88\ub7ec\uc624\ub294 \uc911\uc5d0 \uc77c\uc2dc\uc801\uc73c\ub85c \uba48\ucd94\uc5c8\uc2b5\ub2c8\ub2e4. @@ -928,11 +928,11 @@ TFrame.Dialog.StalledVideo.Button.Stop=\uba48\ucda4 TFrame.Dialog.StalledVideo.Button.Wait=\uae30\ub2e4\ub9bc Tracker.Dialog.NoVideoEngine.Checkbox=\ub2e4\uc2dc \ubcf4\uc9c0 \uc54a\uae30 TrackerIO.ZipFileFilter.Description=\uc555\ucd95 (zip) \ud30c\uc77c -TrackerIO.Dialog.ErrorFFMPEG.Message1=\uc774 \ube44\ub514\uc624\ub97c \ubd88\ub7ec\uc624\ub294 \ub3d9\uc548 Xuggle \uc5d0\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 \uc624\ub958 \ubc1c\uc0dd: +TrackerIO.Dialog.ErrorFFMPEG.Message1=\uc774 \ube44\ub514\uc624\ub97c \ubd88\ub7ec\uc624\ub294 \ub3d9\uc548 FFMPeg \uc5d0\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 \uc624\ub958 \ubc1c\uc0dd: TrackerIO.Dialog.ErrorFFMPEG.Message2=\ubaa8\ub4e0 \uc624\ub958\uac00 \uce58\uba85\uc801\uc778 \uac83\uc740 \uc544\ub2c8\uba70 \uc624\ub958 \uba54\uc2dc\uc2dc\ub97c \ubcf4\ub824\uba74 [\ub3c4\uc6c0\ub9d0|\uba54\uc2dc\uc9c0 \ub85c\uadf8]\ub97c \ubd05\ub2c8\ub2e4. -TrackerIO.Dialog.ErrorFFMPEG.Message3=Xuggle \uc624\ub958\uac00 \ubc1c\uc0dd\ud55c\ub2e4\uba74, QuickTime \uc73c\ub85c \ube44\ub514\uc624\ub97c \uc5f4\uc5b4 \ubcfc \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. +TrackerIO.Dialog.ErrorFFMPEG.Message3=FFMPeg \uc624\ub958\uac00 \ubc1c\uc0dd\ud55c\ub2e4\uba74, QuickTime \uc73c\ub85c \ube44\ub514\uc624\ub97c \uc5f4\uc5b4 \ubcfc \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=\ub178\ud2b8: Mac OSX \uc5d0\uc11c\ub294 32-\ube44\ud2b8 Java VM \uc5d0\uc11c Tracker \ub97c \uc5f4\uc5b4\uc57c \ud569\ub2c8\ub2e4. -TrackerIO.Dialog.ErrorFFMPEG.Title=Xuggle \uc624\ub958 +TrackerIO.Dialog.ErrorFFMPEG.Title=FFMPeg \uc624\ub958 TrackerIO.ErrorFFMPEG.LogMessage=\ubcf4\ub2e4 \uc790\uc138\ud55c \ub0b4\uc6a9\uc744 \ubcf4\uae30 \uc704\ud574, \ud658\uacbd \uc124\uc815 \ub300\ud654 \uc0c1\uc790 [\ud3b8\uc9d1|\ud658\uacbd \uc124\uc815]\uc5d0\uc11c [\ube44\ub514\uc624|\uc8fc\uc758] \ud56d\ubaa9\uc744 \uc120\ud0dd\ud569\ub2c8\ub2e4. TToolBar.Button.OpenBrowser.Tooltip=OSP \ub514\uc9c0\ud138 \ub77c\uc774\ube0c\ub7ec\ub9ac @@ -1203,17 +1203,17 @@ PrefsDialog.Checkbox.32BitVM=32 \ube44\ud2b8 PrefsDialog.Checkbox.WarnVariableDuration=\uc77c\uc815\ud558\uc9c0 \uc54a\uc740 \ud504\ub808\uc784 \uae38\uc774 PrefsDialog.Button.NoEngine=\uc5c6\uc74c PrefsDialog.Dialog.SwitchToQT.Message=QuickTime \uc73c\ub85c \uc124\uc815\ud558\uace0 Java VM \uc744 32 \ube44\ud2b8\ub85c \ubcc0\uacbd -PrefsDialog.Dialog.SwitchToXuggle32.Message=Xuggle \ub85c \uc124\uc815\ud558\uace0 Java VM \uc744 32 \ube44\ud2b8\ub85c \ubcc0\uacbd -PrefsDialog.Dialog.SwitchToXuggle64.Message=Xuggle \ub85c \uc124\uc815\ud558\uace0 Java VM \uc744 64 \ube44\ud2b8\ub85c \ubcc0\uacbd +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=FFMPeg \ub85c \uc124\uc815\ud558\uace0 Java VM \uc744 32 \ube44\ud2b8\ub85c \ubcc0\uacbd +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=FFMPeg \ub85c \uc124\uc815\ud558\uace0 Java VM \uc744 64 \ube44\ud2b8\ub85c \ubcc0\uacbd PrefsDialog.Dialog.SwitchVM.Title=Java VM \ubcc0\uacbd PrefsDialog.Dialog.SwitchTo32.Message=32 \ube44\ud2b8 Java VM \uc73c\ub85c \uc124\uc815\ud558\uace0 \ube44\ub514\uc624 \uc5d4\uc9c4\uc744 QuickTime \uc73c\ub85c \ubcc0\uacbd -PrefsDialog.Dialog.SwitchTo64.Message=64 \ube44\ud2b8 Java VM \uc73c\ub85c \uc124\uc815\ud558\uace0 \ube44\ub514\uc624 \uc5d4\uc9c4\uc744 Xuggle \ub85c \ubcc0\uacbd +PrefsDialog.Dialog.SwitchTo64.Message=64 \ube44\ud2b8 Java VM \uc73c\ub85c \uc124\uc815\ud558\uace0 \ube44\ub514\uc624 \uc5d4\uc9c4\uc744 FFMPeg \ub85c \ubcc0\uacbd PrefsDialog.Dialog.SwitchEngine.Title=\ube44\ub514\uc624 \uc5d4\uc9c4 \ubcc0\uacbd PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=64 \ube44\ud2b8 Java VM\uc5d0 \uc801\ud569\ud55c \ube44\ub514\uc624 \uc5d4\uc9c4\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=\uadf8\ub9bc \ud30c\uc77c (JPEG, PNG) \uacfc \uc560\ub2c8\uba54\uc774\uc158 GIR \ud30c\uc77c\uc740 \ubd88\ub7ec\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=\uadf8\ub798\ub3c4 64 \ube44\ud2b8 VM \uc73c\ub85c \uc124\uc815\ud560\uae4c\uc694? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=64 \ube44\ud2b8 \ube44\ub514\uc624 \uc5d4\uc9c4 \uc5c6\uc74c -PrefsDialog.Dialog.No32bitVMXuggle.Message=Xuggle \uc744 \uc0ac\uc6a9\ud558\uae30 \uc804\uc5d0 32 \ube44\ud2b8 Java VM \uc744 \uc124\uce58\ud574\uc57c \ud569\ub2c8\ub2e4. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=FFMPeg \uc744 \uc0ac\uc6a9\ud558\uae30 \uc804\uc5d0 32 \ube44\ud2b8 Java VM \uc744 \uc124\uce58\ud574\uc57c \ud569\ub2c8\ub2e4. PrefsDialog.Dialog.No32bitVMQT.Message=QuickTime \uc744 \uc0ac\uc6a9\ud558\uae30 \uc804\uc5d0 32 \ube44\ud2b8 Java VM \uc744 \uc124\uce58\ud574\uc57c \ud569\ub2c8\ub2e4. PrefsDialog.Dialog.No32bitVM.Message=\ubcf4\ub2e4 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 Tracker \ub3c4\uc6c0\ub9d0\uc744 \ucc38\uace0\ud558\uc138\uc694. PrefsDialog.Dialog.No32bitVM.Title=32 \ube44\ud2b8 VM \ud544\uc694 @@ -1229,10 +1229,10 @@ Tracker.Dialog.Button.RelaunchNow=\uc608 (\ub2e4\uc2dc \uc2dc\uc791\ud558\uae30) Tracker.Dialog.Button.ShowPrefs=\uc544\ub2c8\uc624 (\uc124\uc815 \ubcf4\uae30) Tracker.Dialog.Button.ContinueWithoutEngine=\uc544\ub2c8\uc624 (\ube44\ub514\uc624 \uc5c6\uc774 \uacc4\uc18d \ud558\uae30) Tracker.Dialog.EngineProblems.Message1=\ud558\ub098 \ub610\ub294 \uadf8 \uc774\uc0c1\uc758 \ube44\ub514\uc624 \uc5d4\uc9c4\uc774 \uc124\uce58\ub418\uc5c8\uc73c\ub098 \ub3d9\uc791\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. -Tracker.Dialog.EngineProblems.Message2=\ubcf4\ub2e4 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \ub3c4\uc6c0\ub9d0>\ud504\ub85c\uadf8\ub7a8 \uc815\ubcf4> Xuggle \ub610\ub294 QuickTime \uc815\ubcf4\ub97c \ucc38\uace0\ud558\uc138\uc694. -Tracker.Dialog.ReplaceXuggle.Message1=Tracker (\ubc84\uc804 4.75 \ub610\ub294 \uadf8 \uc774\uc0c1) \uc744 \ub2e4\uc2dc \uc124\uce58\ud558\uc5ec -Tracker.Dialog.ReplaceXuggle.Message2=Xuggle \ube44\ub514\uc624 \uc5d4\uc9c4\uc744 \ubc84\uc804 3.4 (\ub610\ub294 \uadf8 \uc774\uc0c1) \uc73c\ub85c \ubcc0\uacbd\ud558\uae30\ub97c \uad8c\uc7a5\ud569\ub2c8\ub2e4. -Tracker.Dialog.ReplaceXuggle.Message3=Xuggle \uc744 \uc124\uce58 \uc635\uc158\uc5d0\uc11c \uc120\ud0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. +Tracker.Dialog.EngineProblems.Message2=\ubcf4\ub2e4 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \ub3c4\uc6c0\ub9d0>\ud504\ub85c\uadf8\ub7a8 \uc815\ubcf4> FFMPeg \ub610\ub294 QuickTime \uc815\ubcf4\ub97c \ucc38\uace0\ud558\uc138\uc694. +Tracker.Dialog.ReplaceFFMPeg.Message1=Tracker (\ubc84\uc804 4.75 \ub610\ub294 \uadf8 \uc774\uc0c1) \uc744 \ub2e4\uc2dc \uc124\uce58\ud558\uc5ec +Tracker.Dialog.ReplaceFFMPeg.Message2=FFMPeg \ube44\ub514\uc624 \uc5d4\uc9c4\uc744 \ubc84\uc804 3.4 (\ub610\ub294 \uadf8 \uc774\uc0c1) \uc73c\ub85c \ubcc0\uacbd\ud558\uae30\ub97c \uad8c\uc7a5\ud569\ub2c8\ub2e4. +Tracker.Dialog.ReplaceFFMPeg.Message3=FFMPeg \uc744 \uc124\uce58 \uc635\uc158\uc5d0\uc11c \uc120\ud0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. TrackerIO.Dialog.DurationIsConstant.Message=\ubaa8\ub4e0 \ud504\ub808\uc784 \uae38\uc774\ub294 \uac19\uc544\uc57c \ud569\ub2c8\ub2e4 (\uc77c\uc815\ud55c \ud504\ub808\uc784 \uc18d\ub3c4). TrackerIO.ZIPResourceFilter.Description=Tracker ZIP \ud30c\uc77c(.trz) TToolbar.Button.Desktop.Tooltip=HTML \ub610\ub294 PDF \ubb38\uc11c\ub97c \ubcf4\uc5ec\uc90d\ub2c8\ub2e4. @@ -1298,7 +1298,7 @@ TableTrackView.Dialog.NameColumn.Title=\ub370\uc774\ud130 \ud589 TToolBar.MenuItem.StretchOff=\uc6d0\ub798\ub300\ub85c # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Xuggle \ubc84\uc804 +PrefsDialog.Checkbox.WarnFFMPegVersion=FFMPeg \ubc84\uc804 PrefsDialog.Checkbox.WarnCopyFailed=\ube44\ub514\uc624 \uc5d4\uc9c4 \ud30c\uc77c \ubcf5\uc0ac \uc2e4\ud328 Tracker.Dialog.FailedToCopy.Title=\ud30c\uc77c \ubcf5\uc0ac \uc2e4\ud328 Velocity.Dialog.Color.Title=\uc18d\ub3c4 \uc0c9 \uc120\ud0dd diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_ms_MY.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_ms_MY.properties index 19035f86..acd503cc 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_ms_MY.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_ms_MY.properties @@ -1,3 +1,1256 @@ -# This is the Malaysian tracker.properties file # Translations 2015 by Shahrul Kadri Ayop (UPSI) & Nik Syaharudin Nik Daud (KPM) Calibration.Name=Titik Penentukuran Calibration.New.Name=titik penentukuran CenterOfMass.Name=Pusat Jisim CenterOfMass.New.Name=cm CenterOfMass.MenuItem.Inspector=Pilih Jisim... CenterOfMassInspector.Title=Pusat Jisim CenterOfMassInspector.Border.Title=Pilih Jisim ConfigInspector.Border.Title=Ciri Dikehendaki ConfigInspector.Title=Keutamaan ConfigInspector.Button.SaveAsDefault=Simpan Sebagai Lalai CoordAxes.Name=Paksi CoordAxes.New.Name=paksi Dialog.Button.Cancel=Batal Dialog.Button.OK=OK Dialog.Button.Close=Tutup Dialog.Button.All=Semua Dialog.Button.None=Tiada Dialog.Button.Copy=Salin Dialog.Button.Update=Kemas kini Dialog.Button.SelectAll=Pilih Semua Footprint.Diamond=intan Footprint.BoldDiamond=intan tebal Footprint.SolidDiamond=intan padu Footprint.Triangle=segi tiga Footprint.BoldTriangle=segi tiga tebal Footprint.SolidTriangle=segi tiga padu Footprint.Circle=bulatan Footprint.BoldCircle=bulatan tebal Footprint.SolidCircle=bulatan padu Footprint.VerticalLine=garis tegak Footprint.BoldVerticalLine=garis tegak tebal Footprint.HorizontalLine=garis ufuk Footprint.BoldHorizontalLine=garis ufuk tebal Footprint.Crosshair=rerambut silang Footprint.BoldCrosshair=rerambut silang tebal Footprint.SimpleAxes=paksi mudah Footprint.BoldSimpleAxes=paksi mudah tebal Footprint.Spot=titik Footprint.Line=garis Footprint.BoldLine=garis tebal Footprint.Outline=rangka Footprint.BoldOutline=rangka tebal Footprint.Arrow=anak panah Footprint.BoldArrow=anak panah tebal Footprint.DoubleArrow=anak panah berganda Footprint.BoldDoubleArrow=anak panah berganda tebal Footprint.2xArrow=anak panah 2x Footprint.Bold2xArrow=anak panah tebal 2x Footprint.4xArrow=anak panah 4x Footprint.Bold4xArrow=anak panah tebal 4x Footprint.DashArrow=anak panah putus-putus Footprint.BoldDashArrow=anak panah putus-putus tebal Footprint.BigArrow=anak panah besar Footprint.BigDashArrow=anak panah besar putus-putus LineProfile.Name=Profil Garis LineProfile.New.Name=profil LineProfile.Data.Brightness=kecerahan LineProfile.Data.Pixel=piksel LineProfile.Data.Red=merah LineProfile.Data.Green=hijau LineProfile.Data.Blue=biru LineProfile.Data.Weighting=kiraan MainTView.Popup.MenuItem.QTPlayer=Pemain QuickTime MainTView.Popup.MenuItem.Zoom=Zum MainTView.Popup.MenuItem.ToFit=Untuk Padanan OffsetOrigin.Name=Asalan Ofset OffsetOrigin.New.Name=asalan ofset PlotTrackView.Button.PlotCount=Plot PlotTrackView.Button.PlotCount.ToolTip=Set kiraan plot PointMass.Name=Titik Jisim PointMass.New.Name=jisim PointMass.MenuItem.VectorsToPosition=Ke Kedudukan PointMass.MenuItem.Velocity=Halaju PointMass.MenuItem.Acceleration=Pecutan Star.Name=Bintang Star.New.Name=bintang TableTrackView.Action.CopyData=Salin Data TableTrackView.Button.SelectTableData=Jadual TableTrackView.Button.SelectTableData.ToolTip=Pilih lajur jadual TableTrackView.Popup.MenuItem.Analyze=Analisis... TableTrackView.Dialog.Border.Title=Tampak: TActions.Action.Description=Nota TActions.Action.ClearTracks=Semua Trek TActions.Action.NewTab=Tab Baharu TActions.Action.Copy=Salin TActions.Action.Paste=Tampal TActions.Action.Open=Buka Fail... TActions.Action.Close=Tutup Tab TActions.Action.Import=Import... TActions.Action.Save=Simpan Tab TActions.Action.SaveAs=Simpan Tab Sebagai... TActions.Action.Export=Export... TActions.Action.CaptureVideo=Ambil Video... TActions.Action.Delete=Buang TActions.Action.Config=Keutamaan... TActions.Action.AxesVisible=Tampak TActions.Action.TapeVisible=Tampak TActions.Action.Print=Cetak... TActions.Action.ClearFilters=Bersih TActions.Action.ImportVideo=Import... TActions.Action.CloseVideo=Tutup TActions.Action.CloseAll=Tutup Semua Tab TActions.Action.Exit=Keluar TActions.Dialog.PrintError.Message=Ralat cetakan berlaku. TActions.Dialog.PrintError.Title=Ralat Cetakan TActions.Dialog.Description.Title=Nota: TActions.Dialog.DeleteLockedTracks.Message=Sebahagian trek berkunci. Buang sahaja? TActions.Dialog.DeleteLockedTracks.Title=Buang trek Berkunci? TActions.Dialog.NewPointMass.Title=Titik Jisim Baharu TapeMeasure.Name=Pita Ukur TapeMeasure.New.Name=pita TapeMeasure.MenuItem.Fixed=Tetap TFrame.View.Plot=Pandangan Plot TFrame.View.Table=Pandangan Jadual TFrame.View.World=Pandangan Dunia TFrame.View.Video=Pandangan Video TFrame.Dialog.Help.Title=Bantuan Tracker TMenuBar.Menu.File=Fail TMenuBar.Menu.Edit=Sunting TMenuBar.Menu.Video=Video TMenuBar.Menu.Tracks=Trek TMenuBar.Menu.Coords=Sistem Koordinat TMenuBar.Menu.Window=Pandangan TMenuBar.Menu.Help=Bantuan TMenuBar.MenuItem.EditProperties=Sifat... TMenuBar.MenuItem.VideoVisible=Tampak TMenuBar.MenuItem.VideoFilters=Penapis TMenuBar.MenuItem.NewVideoFilter=Baharu TMenuBar.MenuItem.NewTrack=Baharu TMenuBar.MenuItem.CoordsLocked=Berkunci TMenuBar.MenuItem.CoordsFixedOrigin=Asalan Tetap TMenuBar.MenuItem.CoordsFixedAngle=Sudut Tetap TMenuBar.MenuItem.CoordsFixedScale=Skala Tetap TMenuBar.MenuItem.CoordsRefFrame=Bingkai Rujukan TMenuBar.MenuItem.CoordsDefault=Lalai TMenuBar.MenuItem.WindowRight=Pandangan Kanan TMenuBar.MenuItem.WindowBottom=Pandangan Bawah TMenuBar.MenuItem.PlayAllSteps=Main Semua Langkah TMenuBar.MenuItem.Record=Rakam TMenuBar.MenuItem.MatSize=Saiz Alas TMenuBar.MenuItem.Language=Bahasa TMenuBar.MenuItem.DeleteTrack=Buang TMenuBar.MenuItem.TrackerHelp=Bantuan Tracker... TMenuBar.MenuItem.MessageLog=Log Mesej... TrackControl.Name=Pengawal trek TrackControl.Button.NewTrack=Cipta TrackControl.Button.NewTrack.ToolTip=Cipta trek baharu TrackControl.Button.Trails.ToolTip=Set panjang trek TrackControl.Button.Labels.ToolTip=Tunjuk atau sembunyi penomboran TrackControl.Button.StretchVectors.ToolTip=Vektor regang TrackControl.Button.Accelerations.ToolTip=Tunjuk atau sembunyi vektor pecutan TrackControl.Button.Xmass.ToolTip=Darab vektor dengan jisim TrackControl.Button.Vectors.ToolTip=Vektor TrackControl.Button.Velocities.ToolTip=Tunjuk atau sembunyi vektor halaju TrackControl.Button.Properties.ToolTip=Klik untuk pilih TrackControl.Button.Positions.ToolTip=Tunjuk atau sembunyi kedudukan Tracker.Popup.MenuItem.Snapshot=Petikan... Tracker.Popup.MenuItem.Help=Bantuan... Tracker.Cursor.Crosshair.Description=Kursor rerambut silang Tracker.Action.AboutTracker=Tentang Tracker... Tracker.Dialog.AboutTracker.Title=Tentang Tracker Tracker.Action.AboutJava=Tentang Java... Tracker.Dialog.AboutJava.Title=Tentang Java Tracker.Dialog.AboutJava.UnknownVersion=tak diketahui Tracker.Dialog.AboutJava.Message=Versi Java Tracker.Action.AboutQT=Tentang QuickTime... Tracker.Dialog.AboutQT.Title=Tentang QuickTime Tracker.Dialog.AboutQT.Message.QTVersion=Versi QuickTime Tracker.Dialog.AboutQT.Message.QTJavaVersion=Versi QTJava Tracker.Dialog.AboutQT.Message.QTJavaPath=Laluan QTJava: Tracker.Dialog.NoQT.Title=QTJava.zip tidak ditemui Tracker.Dialog.NoQT.Message1=QuickTime untuk Java tidak muncul untuk dipasang Tracker.Dialog.NoQT.Message2=Jika anda ingin analisis wayang QuickTime, sila pasang semula QuickTime. Tracker.Dialog.NoQT.Message3=NOTA: QuickTime untuk Java MESTI DIPILIH apabila memasang QuickTime. Tracker.Dialog.UpdateQT.Title=Kemas kini QTJava.zip Tracker.Dialog.UpdateQT.Message1=Versi baru QTJava.zip telah ditemui di Tracker.Dialog.UpdateQT.Message2=Adakah anda ingin kemas kini fail yang sedia ada? Tracker.Dialog.CopyQT.Title=Salin QTJava.zip Tracker.Dialog.CopyQT.Message1=QuickTime telah terpasang, tetapi sebelum Tracker boleh gunakannya: Tracker.Dialog.CopyQT.Message2=1. QTJava.zip mesti disalin dari Tracker.Dialog.CopyQT.Message3=ke Tracker.Dialog.CopyQT.Message4= 2. Tracker mesti dimulakan semula. Tracker.Dialog.CopyQT.Message5=Adakah anda ingin salin QTJava.zip sekarang? Tracker.Dialog.CopyFailed.Title=Salinan Gagal Tracker.Dialog.CopyFailed.Message=QTJava.zip tidak dapat disalin. Tracker.Dialog.CopiedTo.Title=Salinan Berjaya Tracker.Dialog.CopiedTo.Message1=QTJava.zip telah berjaya disalin ke Tracker.Dialog.CopiedTo.Message2=Tracker perlu dimulakan semula dan akan keluar sekarang. Tracker.Splash.Loading=Pemuatan TrackerIO.Dialog.Import.Title=Import Fail Tracker TrackerIO.Dialog.Import.Message=Pilih butir untuk import TrackerIO.Dialog.ImportVideo.Title=Import Video TrackerIO.Dialog.Export.Title=Eksport TrackerIO.Dialog.Export.Message=Pilih butir untuk eksport TrackerIO.Dialog.ReplaceFile.Title=Ganti Fail Sedia Ada? TrackerIO.Dialog.ReplaceFile.Message=telah wujud. Adakah anda ingin menggantikannya? TrackerIO.Dialog.NotTrackerXML.Title=XML tak sepadan TrackerIO.Dialog.NotTrackerXML.Message=mengandungi data xml untuk aplikasi berbeza. TrackerIO.Dialog.BadVideo.MessageFile is not a recognized video type: Fail bukan jenis video yang dikenali: TrackerIO.Dialog.BadVideo.Title=Fail Video Tidak Dikenali TrackerPanel.NewTab.Name=Tak Bertajuk TrackerPanel.DragToMark.Hint=Shift-seret untuk tanda TrackerPanel.ClickToMark.Hint=Shift-klik untuk tanda TrackerPanel.Dialog.LoadFailed.Title=Fail Tracker Tidak Sah TrackerPanel.Dialog.LoadFailed.Message=Fail bukan fail Tracker yang sah: TrackerPanel.Dialog.SaveChanges.Title=Simpan Perubahan TrackerPanel.Dialog.SaveChanges.Message=Simpan perubahan ke TrackPlottingPanel.Popup.MenuItem.Lines=Garis TrackPlottingPanel.Popup.MenuItem.Points=Titik TrackPlottingPanel.Popup.MenuItem.Scale=Skala... TrackPlottingPanel.Popup.MenuItem.Print=Cetak... TrackPlottingPanel.Popup.MenuItem.Measure=Skala untuk Muat TrackPlottingPanel.Popup.MenuItem.Analyze=Analisis... TrackPlottingPanel.Popup.MenuItem.ZoomIn=Zum masuk TrackPlottingPanel.Popup.MenuItem.ZoomOut=Zum keluar TrackPlottingPanel.Popup.MenuItem.ZoomToFit=Skala Automatik TrackPlottingPanel.Popup.MenuItem.ZoomToBox=Zum Ke Kotak TrackPlottingPanelInspector.Title=Skala TrackPlottingPanelInspector.Label.Min=Min TrackPlottingPanelInspector.Label.Max=Maks TrackPlottingPanelInspector.Label.Auto=Auto TToolBar.Button.Footprint.Tooltip=Set trek TToolBar.Dropdown.SelectedTrack.Tooltip=Pilih Trek TToolBar.Dropdown.SelectedTrack.None=Tiada TTrack.MenuItem.Delete=Buang TTrack.MenuItem.Color=Warna... TTrack.Dialog.Color.Title=Pilih Warna Trek TTrack.MenuItem.Name=Nama... TTrack.MenuItem.Footprint=Trek TTrack.MenuItem.Description=Nota... TTrack.MenuItem.Visible=Tampak TTrack.MenuItem.TrailVisible=Trek Tampak TTrack.MenuItem.Autostep=Autolangkah TTrack.MenuItem.MarkByDefault=Tanda dengan Lalai TTrack.MenuItem.Locked=Berkunci TTrack.MenuItem.Delete=Buang TTrack.Name.None=tiada nama TTrack.Dialog.Description.Title=Nota: TTrack.Dialog.Name.Title=Set Nama TTrack.Dialog.Name.Label=Nama: TViewChooser.Button.Choose.Tooltip=Pilih pandangan Vector.Name=Vektor Vector.New.Name=vektor Vector.MenuItem.ToOrigin=Ke Asalan Vector.MenuItem.Label=Label Tampak VectorSum.Name=Hasil Tambah Vektor VectorSum.New.Name=hasil tambah VectorSum.MenuItem.Inspector=Pilih Vektor... VectorSumInspector.Title=Hasil Tambah Vektor VectorSumInspector.Border.Title=ilih Vektor WorldTView.Popup.MenuItem.Projectile=Model Peluncur # Additions by Doug Brown 2006-11-01 AnalyticParticle.Name=Model Zarah Kinematik AnalyticParticle.Inspector.Title=Model Zarah Kinematik AnalyticParticle.Property.FunctionX=x AnalyticParticle.Property.FunctionY=y CircleFootprint.Circle_4=jejari 4 CircleFootprint.Circle_6=jejari 6 CircleFootprint.Circle_8=jejari 8 DynamicParticle.Name=Model Zarah Dinamik (Cartes) DynamicParticle.Inspector.Title=odel Zarah Dinamik DynamicParticle.Property.ForceX=daya x DynamicParticle.Property.ForceY=daya y DynamicParticle.Property.InitialX=x DynamicParticle.Property.InitialY=y DynamicParticle.Property.InitialVelocityX=vx DynamicParticle.Property.InitialVelocityY=vy LineProfile.MenuItem.Fixed=Kedudukan Tetap ParticleModel.New.Name=model ParticleModel.MenuItem.InspectModel=Pembinaan Model... ParticleModel.Inspector.Button.Undo=Buat Asal ParticleModel.Inspector.Button.Redo=Buat Semula ParticleModel.Inspector.Button.Close=Tutup ParticleModel.Inspector.Button.Help=Bantuan # Additions by Doug Brown 2006-12-29 Calibration.Axes.XOnly=Hanya X Calibration.Axes.YOnly=Hanya Y Calibration.Axes.XY=XY Calibration.Spinner.Axes.Tooltip=Pilih paksi penentukuran Calibration.Label.Axes=paksi Calibration.Dialog.InvalidCoordinates.Title=Koordinat Tak Sah Calibration.Dialog.InvalidCoordinates.Message=Titik tidak boleh mempunyai koordinat dunia yang sama. Calibration.Dialog.InvalidXCoordinates.Message=Titik tidak boleh mempunyai koordinat-x dunia yang sama. Calibration.Dialog.InvalidYCoordinates.Message=Titik tidak boleh mempunyai koordinat-y dunia yang sama. SpectralLineFilter.Title=Spektrum Gas SpectralLineFilter.H=Hidrogen SpectralLineFilter.He=Helium SpectralLineFilter.Ne=Neon SpectralLineFilter.Hg=Merkuri TFrame.View.Unknown=Pandangan TMenuBar.MenuItem.Undo=Buat Asal TMenuBar.MenuItem.Redo=Buat Semula TMenuBar.MenuItem.Replace=Ganti... TMenuBar.Menu.AddImage=Import Imej TMenuBar.MenuItem.AddBefore=Sebelum Bingkai Ini... TMenuBar.MenuItem.AddAfter=Selepas Bingkai Ini... TMenuBar.MenuItem.RemoveImage=Singkir Bingkai Ini... TMenuBar.Menu.Tools=Alat TMenuBar.MenuItem.DataFunctionTool=Pembina Data TMenuBar.MenuItem.DatasetTool=Alat Data TMenuBar.Menu.CopyImage=Salin Imej TMenuBar.MenuItem.CopyMainView=Pandangan Utama TMenuBar.MenuItem.CopyFrame=Bingkai TMenuBar.MenuItem.PrintFrame=Cetak... TrackerIO.Dialog.AddImage.Title=Import Imej (pilih satu atau lebih) TTrack.Dialog.Name.BadName=sedang digunakan. Sila pilih nama lain. VectorStep.Label.Momentum=p VectorStep.Label.Velocity=v VectorStep.Label.NetForce=daya bersih VectorStep.Label.Acceleration=a # Additions by Doug Brown 2007-02-19 PlotTView.Label.NoData=Pandangan plot data trek akan terpapar di sini. TableTView.Label.NoData=Pandangan jadual data trek akan terpapar di sini. TrackerPanel.Message.NoData0=Pandangan utama video dan trek akan terpapar di sini. TrackerPanel.Message.NoData1=Pilih Fail|Buka atau Trek|Baharu untuk mula. WorldTView.Label.NoData=Pandangan dunia video dan trek akan terpapar di sini. # Additions by Doug Brown 2007-03-03 DynamicParticle.Label.Solver=Penyelesai: DynamicParticle.Solver.Euler=Euler DynamicParticle.Solver.Verlet=Verlet DynamicParticle.Solver.RK4=Runge-Kutta DynamicParticle.Solver.ODEMultistep=Multilangkah Mudah Suai DynamicParticle.Table.Force.Border.Title=Fungsi Daya (t, x, y, vx, vy) AnalyticParticle.Table.Functions.Border.Title=Fungsi Kedudukan (t) ParticleModel.Table.Initial.Border.Title=Nilai Awal ParticleModel.Property.InitialT=t # Additions by Doug Brown 2007-04-25 TMenuBar.MenuItem.PasteImage=Tampal Imej TMenuBar.MenuItem.PasteAfter=Selepas Bingkai Ini TMenuBar.MenuItem.PasteBefore=Sebelum Bingkai Ini TMenuBar.MenuItem.PasteReplace=Ganti Video # Additions by Doug Brown 2007-07-01 TMenuBar.MenuItem.GettingStarted=Panduan Mula... Tracker.Splash.HelpMessage=Pengguna baharu? Lihat # Additions by Doug Brown 2007-08-12 CoordAxes.Label.Angle=sudut dari ufuk LineProfile.Checkbox.Rotates=putar LineProfile.Label.Spread=sebar RGBRegion.Name=Rantau MHB RGBRegion.New.Name=rantau RGBRegion.MenuItem.Fixed=Posisi Tetap RGBRegion.Label.Radius=jejari piksel TTrack.Label.Step=langkah # Additions by Doug Brown 2007-10-24 LineProfile.Data.Description.0=nombor kedudukan LineProfile.Data.Description.1=kedudukan komponen-x LineProfile.Data.Description.2=kedudukan komponen-y LineProfile.Data.Description.3=merah LineProfile.Data.Description.4=hijau LineProfile.Data.Description.5=biru LineProfile.Data.Description.6=kecerahan diamati LineProfile.Data.Description.7=lebar garis ParticleModel.MenuItem.TraceVisible=Surih Tampak ParticleModel.MenuItem.StepsVisible=Langkah Tampak PointMass.Data.Description.0=masa PointMass.Data.Description.1=kedudukan komponen-x PointMass.Data.Description.2=kedudukan komponen-y PointMass.Data.Description.3=kedudukan magnitud PointMass.Data.Description.4=kedudukan sudut PointMass.Data.Description.5=halaju komponen-x PointMass.Data.Description.6=halaju komponen-y PointMass.Data.Description.7=halaju magnitud PointMass.Data.Description.8=halaju sudut PointMass.Data.Description.9=pecutan komponen-x PointMass.Data.Description.10=pecutan komponen-y PointMass.Data.Description.11=pecutan magnitud PointMass.Data.Description.12=pecutan sudut PointMass.Data.Description.13=sudut putaran PointMass.Data.Description.14=halaju sudut PointMass.Data.Description.15=pecutan sudut PointMass.Data.Description.16=nombor langakh PointMass.Data.Description.17=nombor bingkai PointMass.Data.Description.18=momentum komponen-x PointMass.Data.Description.19=momentum komponen-y PointMass.Data.Description.20=momentum magnitud PointMass.Data.Description.21=momentum sudut PointMass.Data.Description.22=tenaga kinetik RGBRegion.Data.Description.0=masa RGBRegion.Data.Description.1=kedudukan komponen-x RGBRegion.Data.Description.2=kedudukan komponen-y RGBRegion.Data.Description.3=merah RGBRegion.Data.Description.4=hijau RGBRegion.Data.Description.5=biru RGBRegion.Data.Description.6=pamatan kecerahan diamati RGBRegion.Data.Description.7=kiraan piksel RGBRegion.Data.Description.8=nombor langkah RGBRegion.Data.Description.9=nombor bingkai TView.Menuitem.Define=Takrif... Vector.Data.Description.0=masa Vector.Data.Description.1=komponen-x Vector.Data.Description.2=komponen-y Vector.Data.Description.3=magnitud Vector.Data.Description.4=sudut Vector.Data.Description.5=kedudukan ekor komponen-x Vector.Data.Description.6=kedudukan ekor komponen-y Vector.Data.Description.7=nombor langkah Vector.Data.Description.8=nombor bingkai # Additions by Doug Brown 2008-01-02 ParticleModel.Parameter.Mass.Description=Jisim zarah ini ParticleModel.Parameter.InitialTime.Description=Masa awal AnalyticParticle.PositionFunction.X.Description=Kedudukan komponen-x AnalyticParticle.PositionFunction.Y.Description=Kedudukan komponen-y DynamicParticle.ForceFunction.X.Description=Daya komponen-x DynamicParticle.ForceFunction.Y.Description=Daya komponen-y DynamicParticle.Parameter.InitialX.Description=Kedudukan awal komponen-x DynamicParticle.Parameter.InitialY.Description=Kedudukan awal komponen-y DynamicParticle.Parameter.InitialVelocityX.Description=Halaju awal komponen-x DynamicParticle.Parameter.InitialVelocityY.Description=Halaju awal komponen-y TrackerPanel.ModelBuilder.Title=Pembina Model TrackerPanel.DataBuilder.Title=Pembina Data TrackControl.TrailMenu.NoTrail=Tiada Trek. TrackControl.TrailMenu.ShortTrail=Trek pendek TrackControl.TrailMenu.LongTrail=Trek panjang TrackControl.TrailMenu.FullTrail=Semua langkah TrackerPanel.ModelBuilder.Spinner.Tooltip=Model yang sedang dipilih TrackerPanel.ModelBuilder.LineButton.Text=Gaya Garis TrackerPanel.ModelBuilder.LineButton.Tooltip=Set gaya garis ParticleModel.LineStyle.None=Tiada garis ParticleModel.LineStyle.Connect=Sambung langkah ParticleModel.LineStyle.Smooth=Garis licin ModelFunctionPanel.Label=Model AnalyticFunctionPanel.FunctionEditor.Border.Title=Fungsi Kedudukan DynamicFunctionPanel.FunctionEditor.Border.Title=Fungsi Daya # Additions by Doug Brown 2008-11-14 TableTView.Dialog.TableColumns.Title=Lajur Jadual Tampak Tracker.About.ProjectOf=Projek: Tracker.About.TranslationBy=Terjemahan oleh Tracker.About.Translator=Shahrul Kadri Ayop (UPSI)\n& Nik Syaharudin Nik Daud (KPM) TMenuBar.Menu.SaveVideoAs=Simpan Klip Sebagai TActions.SaveClipAs.ProgressMonitor.Message=Simpan klip sebagai TActions.SaveClipAs.ProgressMonitor.Progress=Lengkap # Additions by Doug Brown 2008-12-07 PlotTrackView.Checkbox.Synchronize=Segerak PlotTrackView.Checkbox.Synchronize.Tooltip=Synchronize horizontal axes Segerakkan paksi ufuk RGBRegion.MenuItem.FixedRadius=Jejari Tetap Tracker.VideoZoom.Hint=klik untuk zum dekat atau jauh, klik berganda untuk zum muat Tracker.PlotZoomIn.Hint=seret untuk zum dekat, klik berganda untuk autoskala Tracker.PlotZoomOut.Hint=klik untuk zum jauh Tracker.MenuItem.Hints=Tunjuk Petua TapeMeasure.Label.Length=panjang TapeMeasure.Label.TapeAngle=sudut dari paksi-x TapeMeasure.Label.ArcAngle=sudut jangka sudut TrackerIO.Dialog.NotAnImage.Title=Jenis Fail Salah TrackerIO.Dialog.NotAnImage.Message1=adalah bukan imej JPG atau GIF. TrackerIO.Dialog.NotAnImage.Message2=Adakah anda ingin teruskan? TToolBar.Button.Zoom.Tooltip=Set aras zum TrackChooserTView.DropDown.Tooltip=Pilih trek TapeMeasure.Field.TapeAngle.Tooltip=Sudut dari paksi-x positif ke pita TapeMeasure.Field.Magnitude.Tooltip=Panjang dalam unit dunia berskala TapeMeasure.Readout.Magnitude.Name=panjang TapeMeasure.Readout.Magnitude.Hint=unit dunia TapeMeasure.Readout.Angle.Name=bacaan sudut TapeMeasure.Readout.Angle.Hint=sudut diukur dari paksi-x+ TapeMeasure.End.Name=hujung TapeMeasure.End.Hint=seret untuk ukur jarak dan sudut, shift-klik untuk tanda semula TapeMeasure.Handle.Name=pemegang TapeMeasure.Handle.Hint=seret untuk alih Vector.Tip.Name=petua Vector.Tip.Hint=klik untuk pilih, seret untuk alih Vector.Handle.Name=pemegang Vector.Handle.Hint=klik untuk pilih, seret untuk alih Vector.ShortHandle.Hint=klik untuk pilih, seret untuk alih, alt-klik untuk pilih petua PointMass.Position.Name=kedudukan PointMass.Position.Hint=seret untuk alih PointMass.Velocity.Name=halaju PointMass.Acceleration.Name=pecutan PointMass.Vector.Hint=klik untuk pilih, seret untuk alih PointMass.Position.Locked.Hint=klik untuk pilih--tidak boleh diseret CoordAxes.Handle.Name=paksi +x CoordAxes.Handle.Hint=seret untuk ubah condong CoordAxes.Origin.Name=asalan CoordAxes.Origin.Hint=seret untuk ubah kedudukan OffsetOrigin.Position.Name=kedudukan OffsetOrigin.Position.Hint=seret atau masukkan koordinat untuk alihkan asalan Calibration.Point.Name=titik Calibration.Point.Hint=seret atau masukkan koordinat untuk ubah paksi dan skala RGBRegion.Position.Name=kedudukan RGBRegion.Position.Hint=seret atau masukkan koordinat untuk ubah kedudukan LineProfile.End.Name=akhir LineProfile.End.Hint=seret untuk laras panjang garis LineProfile.Handle.Name=pemegang LineProfile.Handle.Hint=seret untuk alihkan garis PointMass.Hint=set jisim pada bar alat PointMass.Unmarked.Hint=, shift-klik untuk tanda TTrack.Unselected.Hint=lik untuk pilih dan/atau set ciri Vector.Unmarked.Hint=shift-seret untuk tanda OffsetOrigin.Unmarked.Hint=hift-klik untuk tanda semula Calibration.Unmarked.Hint=shift-klik untuk tanda titik pertama Calibration.Halfmarked.Hint=shift-klik untuk tanda semula CenterOfMass.Empty.Hint=pilih jisim untuk takrif sistem VectorSum.Empty.Hint=pilih vector untuk takrif hasil tambah TapeMeasure.Hint=seret hujung untuk tentukan jarak dan sudut CoordAxes.Hint=set sudut untuk ubah condong ParticleModel.Hint=set jisim pada bar alat, masukkan ungkapan dalam Pembina Model untuk hidupkannya RGBRegion.Hint=masukan jejari untuk ubah saiz RGBRegion.Unmarked.Hint=shift-klik untuk tanda kedudukan TTrack.ImportVideo.Hint=import video atau imej untuk ukur MHB TTrack.Selected.Hint=terpilih LineProfile.Hint=masukkan sebaran untuk ubah lebar garis LineProfile.Unmarked.Hint=shift-seret untuk lukis garis LineProfile.Menu.Orientation=Orentasi LineProfile.MenuItem.Horizontal=Ufuk LineProfile.MenuItem.XAxis=Sepanjang Paksi-X Footprint.PositionVector=vektor Footprint.BoldPositionVector=vektor tebal Tracker.Startup.Hint=lihat di sini untuk petua (atau pilih petua di menu Bantuan), tekan kekunci F1 pada bila-bila masa untuk bantuan TrackerPanel.NoVideo.Hint=buka atau import video untuk analisis TrackerPanel.CalibrateVideo.Hint=tentu ukur video menggunakan alat penentukuran TrackerPanel.NoTracks.Hint=cipta trek baru untuk ukur ciri yang dikehendaki TrackerPanel.SetClip.Hint=set atau semak tetapan klip video TrackerPanel.ShowAxes.Hint=set asalan dan sudut paksi koordinat VideoPlayer.Step.Hint=langkah ke depan (pintas: kekunci PageDown) VideoPlayer.Back.Hint=langkah ke belakang (pintas: kekunci PageUp) TrackerPanel.DVVideo.Hint=guna penapis saiz semula untuk betulkan herotan dalam video format-DV TrackerIO.DataFileFilter.Description=Fail Tracker(.trk) Tracker.Button.PDFHelp=Versi Boleh Cetak PDF TToolbar.Button.TapeVisible.Tooltip=Tunjuk, sembunyi atau cipta alat penentukuran # Additions by Doug Brown 2009-03-06 TMenuBar.MenuItem.TrackControl=Pengawal Trek TMenuBar.MenuItem.Description=Nota TrackPlottingPanel.RightDrag.Hint=seret-kanan untuk pilihan TMenuBar.MenuItem.DeleteSelectedPoint=Langkah Terpilih TFrame.InfoDialog.SaveChanges.Title=Simpan Perubahan TFrame.InfoDialog.SaveChanges.Message=Adakah anda ingin menyimpan perubahan? # Additions by Doug Brown 2009-04-27 DynamicParticle.Editor.Button.Cartesian=Cartes DynamicParticle.Editor.Button.Polar=Kutub DynamicParticle.Parameter.InitialR.Description=Jejari awal DynamicParticle.Parameter.InitialTheta.Description=Sudut awal DynamicParticle.Parameter.InitialVelocityR.Description=Halaju jejarian awal DynamicParticle.Parameter.InitialOmega.Description=Halaju sudut awal DynamicParticle.ForceFunction.R.Description=Daya komponen jejarian DynamicParticle.ForceFunction.Theta.Description=Daya komponen tangen DynamicParticlePolar.Name=Model Zarah Dinamik (Kutub) TMenuBar.Menu.DynamicParticle=Model Zarah Dinamik TMenuBar.MenuItem.Cartesian=Cartes TMenuBar.MenuItem.Polar=Kutub # Additions by Doug Brown 2009-08-24 PointMass.MenuItem.Autotrack=Autotrekâ€Ĥ Dialog.Button.Help=Bantuan AutoTracker.Wizard.Button.Reset=Set Semula AutoTracker.Wizard.Button.Back=Undur AutoTracker.Wizard.Button.Next=Maju AutoTracker.Wizard.Button.Accept=Terima AutoTracker.Wizard.Button.Search=Carian AutoTracker.Wizard.Button.Pause=Jeda AutoTracker.Wizard.Button.Skip=Langkau AutoTracker.Label.Mask=Templat AutoTracker.Label.AcceptLevel=Ambang AutoTracker.TabbedPane.TabTitle.Mask=Templat AutoTracker.TabbedPane.TabTitle.Target=Sasaran AutoTracker.TabbedPane.TabTitle.Settings=Terima AutoTracker.TabbedPane.TabTitle.Search=Carian AutoTracker.Info.GetStarted=Untuk cipta bingkai kekunci baharu, shift-control-klik ciri video yang dikehendaki. AutoTracker.Info.Mask1=Templat mentakrifkan imej yang hendak dipadankan dalam setiap bingkai video. AutoTracker.Info.Mask2=Ia berevolusi untuk disesuaikan dengan bentuk dan perubahan warna dari masa ke masa. Kadar evolusi tinggi mengesan perubahan yang lebih cepat, tetapi kurang tepat dalam jangka masa panjang. AutoTracker.Info.MaskLocked1=Templat ini sedang digunakan dan berkunci. AutoTracker.Info.MaskLocked2=Klik butang Set Semula untuk bersihkankan semua langkah dan mula dari awal. AutoTracker.Info.Target1=Sasaran ditanda secara automatik untuk skor padanan melebihi aras autotanda. AutoTracker.Info.Target2=Petua: Anda boleh laras kedudukan sasaran walaupun selepas langkah telah ditanda. Langkah sedia ada akan beralih secara automatik bersama-sama dengan sasaran. AutoTracker.Info.TargetLocked=Sasaran sedang digunakan dan terikat kepada kedudukan langkah sedia ada. Mengalihkan sasaran akan menyebabkan langkah juga beralih. AutoTracker.Info.Settings1=Skor padanan melebihi aras autotanda akan ditanda secara automatik. AutoTracker.Info.Settings2=Petua: mengurangkan aras autotanda berkemungkinan meningkatkan penandaan padanan salah. Sebaliknya cuba tingkatkan kadar evolusi. -AutoTracker.Info.Search1=Rantau carian diimbas untuk mendapatkan padanan terbaik. Alih atau ubah saiz rantau carian dengan menyeret tepi atau pemegangnya. AutoTracker.Info.Search2=Petua: Rantau carian tidak semestinya besar dalam banyak kes. Pilihan lihat-ke-depan mengalihkan rantau carian secara automatik ke kedudukan padanan yang diramalkan. AutoTracker.Info.Frame=Bingkai AutoTracker.Info.Match=Padanan telah ditanda secara automatik. AutoTracker.Info.Possible=Satu padanan mungkin ditemui dalam kawasan carian ditunjukkan. Pilihan anda adalah: AutoTracker.Info.NoMatch=Tiada padanan ditemui di kawasan carian ditunjukkan. Pilihan anda adalah: AutoTracker.Info.Outside=Kawasan carian berada di luar imej. Pilihan anda adalah: AutoTracker.Info.Accepted=Padanan diterima. AutoTracker.Info.MarkedByUser=Langkah ditanda secara manual oleh pengguna. AutoTracker.Info.NoVideo=Autotrek memerlukan video. AutoTracker.Info.Height=tinggi AutoTracker.Info.Width=lebar AutoTracker.Info.Accept=--terima padanan AutoTracker.Info.Retry=--ubah suai kawasan carian dan cari semula AutoTracker.Info.Mark=--shift-klik untuk tandaan secara manual AutoTracker.Info.Skip=--langkau bingkai ini dan teruskan dengan yang berikutnya AutoTracker.Info.Reset=-- undur untuk bingkai yang ditanda dengan betul dan shift-control-klik untuk mentakrifkan bingkai kekunci baharu AutoTracker.Info.MatchScore=skor padanan AutoTracker.Dialog.MaskLocked.Title=Templat Berkunci PointMass.Cursor.Autotrack.Description=Kursor autotrek VideoPlayer.StartFrame.Hint=seret untuk menetapkan bingkai mula VideoPlayer.EndFrame.Hint=seret untuk menetapkan bingkai akhir VideoPlayer.Slider.Hint=seret untuk imbas video FileDropHandler.Dialog.BadFile.Message=tidak dapat dimuatkan. FileDropHandler.Dialog.BadFile.Title=Fail Tak Dikenali # Additions by Doug Brown 2009-10-27 Dialog.Button.Apply=Guna DynamicParticle.Dialog.Delete.Message=Membuang zarah ini akan mengeluarkannya dari sistem. Buang sahaja? DynamicParticle.Dialog.Delete.Title=Sistem Dinamik DynamicParticle.System.In=masuk DynamicSystem.Empty=kosong DynamicSystem.Force.Name.Internal=dalaman DynamicSystem.ForceFunction.R.Description=Daya dalaman komponen jejarian DynamicSystem.ForceFunction.Theta.Description=Daya dalaman komponen tangen DynamicSystem.MenuItem.Inspector=Pilih Zarah... DynamicSystem.Name=Dinamik Sistem Dua Jasad DynamicSystem.New.Name=sistem DynamicSystem.Parameter.Of=daripada DynamicSystem.Parameter.RelativeTo=relatif terhadap DynamicSystem.Parameter.Name.Relative=relatif DynamicSystem.Parameter.ParticleMass.Description=Jisim DynamicSystem.Parameter.Mass.Description=Jumlah jisim sistem ini DynamicSystemInspector.Border.Title=Zarah DynamicSystemInspector.Title=TSistem Dua Jasad DynamicSystemInspector.Button.Change=Ubah Ke... DynamicSystemInspector.ParticleName.None=(tiada) TMenuBar.MenuItem.Clone=Klon TMenuBar.MenuItem.TwoBody=Sistem Dua Jasad TrackerPanel.DataBuilder.Dropdown.Tooltip=Trek yang sedang dipilih TrackPlottingPanel.Popup.MenuItem.MergeYAxes=Segerakkan Paksi Tegak TrackControl.Button.Trace.ToolTip=Tunjuk atau sembunyi laluan TToolBar.Button.Open.Tooltip=Buka video atau fail tracker dalam tab baharu TToolBar.Button.Save.Tooltip=Simpan tab semasa dalam fail TToolBar.Button.SelectTrack=Pilih TToolBar.Button.SelectTrack.Tooltip=Pilih trek sedia ada TTrack.MenuItem.ClearSteps=Bersih Langkah PointMass.MenuItem.Position=Kedudukan TMenuBar.MenuItem.Empty=(Kosong) TTrackBar.Button.Memory=memori digunakan: TTrackBar.Button.Memory.Tooltip=Pantau dan urus memori TTrackBar.Memory.PopupItem.Launch1=Lancar TTrackBar.Memory.PopupItem.Launch2=dengan memori TButton.Track.ToolTip=Set ciri-ciri bagi Tracker.Dialog.OutOfMemory.Message1=Tracker telah kehabisan memori. Tracker.Dialog.OutOfMemory.Message2=Klik butang memori untuk pilihan. Tracker.Dialog.OutOfMemory.Title=Memori habis # Additions by Doug Brown 2010-12-27 AutoTracker.Wizard.Checkbox.LookAhead=Lihat Ke Depan AutoTracker.Label.Original=Bingkai Kekunci AutoTracker.Label.NoMask=tiada AutoTracker.Label.Rate=Kadar: AutoTracker.Info.Mask3=Petua: templat tidak semestinya besar mahupun terkandung keseluruhan objek. Ciri yang unik dengan piggir berkontras tinggi biasanya memberikan hasil terbaik. AutoTracker.Wizard.Checkbox.XAxis=Hanya paksi-X AutoTracker.Info.SearchOnAxis1= Paksi-x di kawasan carian diimbas untuk padanan terbaik. Alih atau ubah saiz kawasan carian dengan menyeret pusat atau pemegangnya, AutoTracker.Info.PossibleOnAxis=Satu padanan mungkin telah ditemui sepanjang paksi-x dalam kawasan carian yang ditunjukkan. Pilihan anda adalah: AutoTracker.Info.NoMatchOnAxis=Tiada padanan ditemui sepanjang paksi-x dalam rantau carian yang ditunjukkan. Pilihan anda adalah: AutoTracker.Info.RetryOnAxis=-—alih kawasan carian atau paksi-x dan carian semula AutoTracker.Wizard.Button.Delete=Buang AutoTracker.Wizard.Button.DeleteMoreDelete Later Points Buang Titik-titik Kemudian Button.Define.Tooltip=Mentakrif fungsi pembolehubah lajur sedia ada Calibration.Label.Point=titik CalibrationStick.Hint=set panjang atau seret hujung untuk ubah skala, set sudut untuk ubah condong CalibrationStick.End.Hint=seret untuk ubah skala, shift-klik untuk tanda semula CalibrationStick.New.Name=kayu tentu ukur CalibrationTapeMeasure.New.Name=pita tentu ukur CalibrationTapeMeasure.Readout.Magnitude.Hint=klik untuk memasukkan panjang yang diketahui dalam unit dunia CalibrationTapeMeasure.Hint=set panjang untuk ubah skala, set sudut untuk ubah condong DynamicSystem.Data.Description.0=jarak relatif di antara zarah DynamicSystem.Data.Description.1=sudut relatif DynamicSystem.Data.Description.2=halaju jejarian relatif DynamicSystem.Data.Description.3=halaju sudut relatif ExportDataDialog.Subtitle.Table=Jadual Data ExportDataDialog.Subtitle.Content=Sel ExportDataDialog.Subtitle.Format=Format Nombor ExportDataDialog.Subtitle.Delimiter=Pembatas ExportDataDialog.Title=Eksport Data ExportDataDialog.Delimiter.Add=Tambah... ExportDataDialog.Delimiter.Remove=Singkir... ExportDataDialog.Content.AllCells= Sel ExportDataDialog.Content.SelectedCells=Sel terpilih ExportDataDialog.MenuItem.RemoveDelimiter=Padam pembatas tersuai ExportDataDialog.Chooser.SaveData.Title=Simpan Data Sebagai ExportVideoDialog.Button.SaveAs=Simpan Sebagai... ExportVideoDialog.Button.FullSize=Saiz penuh ExportVideoDialog.Button.DrawnSize=Seperti yang terlukis ExportVideoDialog.Content.VideoOnly=Video sahaja ExportVideoDialog.Content.VideoAndGraphics=Video dan grafik ExportVideoDialog.Content.GraphicsOnly=Grafik sahaja ExportVideoDialog.Title=Eksport Klip video ExportVideoDialog.Label.ClipSettings=Tetapan klip ExportVideoDialog.Subtitle.Size=Saiz ExportVideoDialog.Subtitle.Content=Kandungan ExportVideoDialog.Subtitle.View=Pandangan ExportVideoDialog.Subtitle.Format=Format ExportVideoDialog.Complete.Message1=Video ini telah disimpan sebagai ExportVideoDialog.Complete.Message2=Adakah anda ingin membukanya dalam Tracker sekarang? ExportVideoDialog.Complete.Title=Eksport Selesai ExportVideoDialog.VideoSize=saiz video ExportVideoDialog.MatSize=saiz alas ExportVideo.Dialog.HiddenPlots.Message=Plot mestilah tampak keseluruhannya untuk dieksport. ExportVideo.Dialog.HiddenPlots.Title=Paparan Tak Lengkap Footprint.DoubleTarget=rerambut silang berganda Footprint.BoldDoubleTarget=rerambut silang tebal OffsetOrigin.MenuItem.Fixed=Koordinat Dunia Tetap ParticleModel.Dialog.Offscreen.Message1=Beberapa langkah model adalah kosong kerana terlalu jauh tersasar dari skrin. ParticleModel.Dialog.Offscreen.Message2=Untuk membaikinya, ubah model atau skala semula video. ParticleModel.Dialog.Offscreen.Title=Luar Sempadan PrefsDialog.Tab.Configuration.Title=Konfigurasi PrefsDialog.Memory.BorderTitle=Saiz Memori PrefsDialog.Tab.General.Title=Umum PrefsDialog.RecentFiles.BorderTitle=Buka Menu Terakhir PrefsDialog.Label.RecentSize=Kiraan fail PrefsDialog.Hints.BorderTitle=Panduan PrefsDialog.Button.Relaunch=Lancar Semula Sekarang PrefsDialog.Button.ClearRecent=Bersih PrefsDialog.Checkbox.DefaultSize=Guna lalai PrefsDialog.Checkbox.HintsOn=Tunjukkan panduan dengan lalai PrefsDialog.Tab.Video.Title=Video PrefsDialog.VideoPref.BorderTitle=Enjin Video PrefsDialog.Button.Xuggle=Xuggle PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=Pengurusan ingatan tak tersedia apabila menggunakan Web Start PrefsDialog.Dialog.WebStart.Title=Mod Web Start PrefsDialog.LookFeel.BorderTitle=Lihat dan Rasa PrefsDialog.Language.BorderTitle=Language Bahasa PrefsDialog.Upgrades.BorderTitle=Periksa Penaik Taraf PrefsDialog.Tab.Runtime.Title=Runtime Waktu Jalan PrefsDialog.Tab.Display.Title=Paparan PrefsDialog.Language.Default=lalai PrefsDialog.Upgrades.Always=Setiap hari PrefsDialog.Upgrades.Weekly=Setiap minggu PrefsDialog.Upgrades.Monthly=Setiap bulan PrefsDialog.Upgrades.Never=Tak perlu PrefsDialog.Button.CheckForUpgrade=Periksa Sekarang PrefsDialog.Xuggle.Speed.BorderTitle=Main Semula Video Xuggle PrefsDialog.Xuggle.Slow=Licin (mungkin perlahan) PrefsDialog.Xuggle.Fast=Laju (mungkin tersekat-sekat) PrefsDialog.CalibrationTool.BorderTitle=Tool Alat Tentu Ukur Lalai Protractor.Name=Jangka Sudut Protractor.New.Name=jangka sudut Protractor.Hint=seret lengan untuk ukur sudut Protractor.Label.Angle=sudut Protractor.Field.Angle.Tooltip=Sudut di antara lengan jangka sudut Protractor.Vertex.Name=bucu Protractor.Vertex.Hint=seret untuk alih bucu Protractor.End.Name=hujung lengan Protractor.End.Hint=drag to rotate the arm seret untuk putar lengan Protractor.Handle.Name=pemegang Protractor.Handle.Hint=seret untuk alihkan jangka sudut Protractor.Rotator.Name=pemutar Protractor.Rotator.Hint=seret untuk putarkan jangka sudut Protractor.Readout.Name=bacaan Protractor.Readout.Hint=sudut di antara lengan jangka sudut ProtractorFootprint.Circle3=bulatan kecil ProtractorFootprint.Circle5=bulatan besar ProtractorFootprint.Circle3Bold=bulatan kecil tebal ProtractorFootprint.Circle5Bold=bulatan besar tebal Stick.Name=Kayu Tentu Ukur Stick.New.Name=kayu tentu ukur TableTrackView.MenuItem.Unformatted=Kepersisan Penuh TableTrackView.MenuItem.Formatted=Seperti yang Terformat TableTrackView.Menu.SetDelimiter=Set Penghehad TableTrackView.MenuItem.AddDelimiter=Tambah... TableTrackView.MenuItem.RemoveDelimiter=Singkir... TableTrackView.Dialog.CustomDelimiter.Message=Masukkan tetali pembatas baharu: TableTrackView.Dialog.CustomDelimiter.Title=Tambah Pembatas TableTrackView.Header.Tooltip=Klik untuk sisih atau klik-berganda untuk pilih lajur TableTrackView.MenuItem.CopySelectedData=Salin Sel Terpilih TableTrackView.Dialog.RemoveDelimiter.Message=Pilih pembatas untuk singkir: TableTrackView.Dialog.RemoveDelimiter.Title=Singkkir Pembatas TableTrackView.Radians.Tooltip=dalam radian TableTrackView.Degrees.Tooltip=dalam darjah TableTrackView.RadiansPerSecond.Tooltip=dalam radian/s TableTrackView.DegreesPerSecond.Tooltip=dalam darjah/s TableTrackView.RadiansPerSecondSquared.Tooltip=dalam radian/s^2 TableTrackView.DegreesPerSecondSquared.Tooltip=dalam darjah/s^2 TableTrackView.MenuItem.DeleteDataFunction=DBuang Fungsi Data TActions.Action.SaveFrame=Simpan Tabset Sebagai... TActions.AboutVideo=Sifat... TActions.Dialog.AboutVideo.Title=Sifat Video TActions.Dialog.AboutVideo.Type=Jenis TActions.Dialog.AboutVideo.SizeDimensi TActions.Dialog.AboutVideo.Length=Panjang TActions.Dialog.AboutVideo.Frames=bingkai TActions.Dialog.AboutVideo.Seconds=saat TActions.Dialog.AboutVideo.FrameRate=Kadar Bingkai TActions.Dialog.AboutVideo.FramesPerSecond=fps TActions.Dialog.AboutVideo.Path=Laluan TActions.Action.ImportTRK=Fail Trackerâ€Ĥ TActions.Action.ProtractorVisible=Tampak TapeMeasure.MenuItem.FixedLength=Panjang Tetap TextTView.Label.NoTab=Klik “Halaman” untuk tambah teks dan halaman HTML di sini. TextTView.NewTab.Text1=Klik-berganda untuk sunting teks atau judul. Klik-kanan untuk lebih pilihan. TextTView.NewTab.Text2=Untuk papar halaman HTML, masukkan url atau klik-kanan untuk buka fail. TextTView.NewTab.Title=Tak Bertajuk TextTView.Dialog.TabTitle.Title=Set Judul TextTView.MenuItem.OpenHTML=Buka HTML... TextTView.MenuItem.SetTitle=Set Judul... TextTView.Button.NewTab=Baharu TextTView.TextEdit.Description=Teks TFrame.Dialog.FileNotFound.Message=Fail tak dapat ditemui. TFrame.Dialog.FileNotFound.Title=Fail Tak Ditemui. TFrame.View.Text=Pandangan Halaman TFrame.View.Main=Pandangan Utama TMenuBar.Menu.OpenRecent=Buka Terakhir TMenuBar.Menu.Import=Import TMenuBar.Menu.Export=Eksport TMenuBar.MenuItem.Video=Video... TMenuBar.MenuItem.Data=Fail Data... TMenuBar.Menu.CopyObject=Salin Objek TMenuBar.MenuItem.Coords=Sistem Koordinat TMenuBar.MenuItem.VideoClip=Klip video TMenuBar.Menu.MeasuringTools=Alat Pengukuran TMenuBar.Menu.AngleUnits=Unit Sudut TMenuBar.MenuItem.Degrees=Darjah TMenuBar.MenuItem.Radians=Radian Tracker.Dialog.NoXuggle.Title=Xuggle tak ditemui Tracker.Dialog.NoXuggle.Message1=Xuggle (enjin video rentas platform) tak terpasang. Tracker.Dialog.NoXuggle.Message2=Muat turun Xuggle daripada http://www.xuggle.com/xuggler/downloads/. Tracker.Action.AboutXuggle=Tentang Xuggle... Tracker.Dialog.AboutXuggle.Title=Tentang Xuggle Tracker.Dialog.AboutXuggle.Message.Version=Versi Xuggle Tracker.Dialog.AboutXuggle.Message.Home=Rumah Xuggle: Tracker.Dialog.AboutXuggle.Message.Path=Laluan jar Xuggle: Tracker.Dialog.NoVideoEngine.Message1=Tiada enjin video terpasang. Tanpanya, anda Tracker.Dialog.NoVideoEngine.Message2=hanya boleh buka imej (JPEG, PNG) dan GIF bergerak. Tracker.Dialog.NoVideoEngine.Message3=Disyorkan: pasang semula Tracker dengan enjin video Xuggle. Tracker.Dialog.NoVideoEngine.Title=Tiada Engin Video Tracker.Dialog.NoXuggle.Message1=Xuggle tidak berfungsi dengan betul. Sila pastikan keperluan Tracker.Dialog.NoXuggle.Message2=fail jar xuggle berada dalam direktori rumah Tracker. Untuk butiran lanjut, Tracker.Dialog.NoXuggle.Message3=lihat Tracker_README.txt dalam direktori rumah Tracker. Tracker.Dialog.NoXuggle.Message4=Untuk pasang Xuggle, muat turun pemasang Tracker terkini daripada Tracker.Dialog.NoXuggle.Title=Xuggle Tak Tersedia Tracker.About.DefaultLocale=Penempatan lalai Tracker.About.CurrentLanguage=ahasa Tracker.Dialog.InsufficientMemory.Title=Insufficient Memory Ingatan Tak Cukup Tracker.Dialog.InsufficientMemory.Message=Saiz ingatan yang dikehendaki terlalu besar. TrackerIO.Dialog.TabMustBeSaved.Message1=Tab TrackerIO.Dialog.TabMustBeSaved.Message2=mesti disimpan sebagai fail tracker untuk dimasukkan dalam tabset. TrackerIO.Dialog.TabMustBeSaved.Message3=Adakah anda ingin menyimpannya? TrackerIO.Dialog.TabMustBeSaved.Title=Tab Belum Simpan TrackerIO.Dialog.NoTabs.Message=Tiada tab untuk disimpan! TrackerIO.Dialog.NoTabs.Title=Tabset Kosong TrackerIO.Dialog.SaveTabset.Title=Simpan Tabset TrackerIO.Dialog.SaveTab.TitleSimpan Tab TrackerIO.Delimiter.Tab=Tab TrackerIO.Delimiter.Space=Jarak TrackerIO.Delimiter.Comma=Koma TrackerIO.Delimiter.Semicolon=Koma bernoktah TrackerIO.VideoAndDataFileFilter.Description=Fail Video dan Tracker TrackerPanel.Dialog.Version.Message1=Anda sedang membuka fail yang dihasilkan dengan Tracker TrackerPanel.Dialog.Version.Message2=yang mungkin merujuk kepada TrackerPanel.Dialog.Version.Message3=ciri-ciri yang tiada dalam versi yang sedang anda gunakan TrackerPanel.Dialog.Version.Message4=Versi terkini tersedia di TrackerPanel.Dialog.Version.Title=Ketaksepadanan Versi TrackerPanel.Label.ModelStart=Bingkai mula TrackerPanel.Label.ModelEnd=Bingkai akhir TrackerPanel.Spinner.ModelStart.Tooltip=Set bingkai mula untuk model ini TrackerPanel.Spinner.ModelEnd.Tooltip=Set bingkai akhir untuk model ini TToolbar.Button.ProtractorVisible.Tooltip=Tunjuk atau sembunyi jangka sudut TToolbar.Button.AxesVisible.Tooltip=Tunjuk atau sembunyi paksi koordinat TToolBar.Button.TrackControl.Tooltip=Tunjuk atau sembunyi kawalan trek TTrack.Dialog.StepSizeWarning.Message1=Awas: sesetengah trek ditandai pada saiz langkah besar daripada satu, membiarkan bingkai yang dilangkau tak bertanda. TTrack.Dialog.StepSizeWarning.Message2=Perubahan saiz langkah akan menyebabkan sela dalam set data. TTrack.Dialog.StepSizeWarning.Message3=Halaju dan pecutan sekitar sela tak boleh ditentukan sehingga semua langkah ditandai. TTrack.Dialog.StepSizeWarning.Title=Awas TTrack.Dialog.SkippedStepWarning.Message1=Awas: langkau langkah ketika menandai kedudukan menghasilkan sela dalam set data. TTrack.Dialog.SkippedStepWarning.Title=Awas TTrack.Dialog.SkippedStepWarning.Checkbox=Jangan tunjuk ini lagi TTrack.Locked.Hint=berkunci TTrack.AngleField.Radians.Tooltip=Sudut dalam radian TTrack.AngleField.Degrees.Tooltip=Sudut dalam darjah TTrack.AngleField.Popup.Radians=Tukar Ke Radian TTrack.AngleField.Popup.Degrees=Tukar Ke Darjah TTrackBar.Memory.Menu.SetSize=Set saiz ingatanâ€Ĥ TTrackBar.Button.Version=ekarang tersedia: versi TTrackBar.Popup.MenuItem.Upgrade=Naik taraf sekarang... TTrackBar.Popup.MenuItem.Ignore=Abai XuggleVideo.MenuItem.SmoothPlay=Main Licin (mungkin perlahan) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=Pita Tentu Ukur CircleFootprint.Circle=bulatan CircleFootprint.FilledCircle=bulatan berisi CircleFootprint.Dialog.Title=Trek Bulatan CircleFootprint.Dialog.Label.Radius=Jejari CircleFootprint.Dialog.Checkbox.Bold=Tebal CircleFootprint.Dialog.Checkbox.CenterSpot=Titik Pusat LineProfile.Hint.Marking=seret tetikus untuk menanda profil garis PageTView.Button.Page=Halaman PageTView.MenuItem.ClosePage=Tutup Halaman PointMass.Hint.Marking=klik tetikus untuk menanda, tekan kekunci Enter untuk klon langkah sebelumnya PrefsDialog.Dialog.NewVersion.Title=Penaik taraf PrefsDialog.Dialog.NewVersion.Message1Versi PrefsDialog.Dialog.NewVersion.Message2=sekarang tersedia di PrefsDialog.Dialog.NewVersion.None.Message=Tiada versi baharu tersedia pada masa ini. RGBRegion.Hint.Marking=klik tetikus untuk menanda pusat rantau TMenuBar.MenuItem.Restore=Kembalikan Pandangan TrackControl.StretchVectors.None=Tiada regangan TViewChooser.Maximize.Tooltip=Maksimumkan pandangan ini TViewChooser.Restore.Tooltip=Kembalikan pandangan Vector.Hint.Marking=seret tetikus untuk menanda, tekan Enter untuk klon langkah sebelumnya WorldTView.Button.World=Dunia # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=Amaran PrefsDialog.Checkbox.WarnIfNoEngine=Tiada enjin video PrefsDialog.Checkbox.WarnIfXuggleError=Ralat tak maut Xuggle PropertiesDialog.Title=Sifat PropertiesDialog.Label.Author=Pengarang PropertiesDialog.Label.Contact=Contact Hubungi TActions.Action.Properties=Sifat... TActions.Action.OpenBrowser=Buka Pelayar Pustaka... TFrame.Progress.Xuggle=bingkai pemuatan Xuggle TFrame.Progress.ClickToCancel=(klik untuk batal) TFrame.Dialog.StalledVideo.Title=Ralat Pemuatan Videa TFrame.Dialog.StalledVideo.Message0=Video tersekat ketika pemuatan. Ini mungkin sementara. TFrame.Dialog.StalledVideo.Message1=Anda boleh pilih untuk hentikan pemuatan sekarang atau terus menunggu. TFrame.Dialog.StalledVideo.Message2=Pilihan lain untuk membuka video ini termasuklah: TFrame.Dialog.StalledVideo.Message3=1. Gunakan perisian penukaran video untuk menukarkannya ke format lain. TFrame.Dialog.StalledVideo.Message4=2. Pilih QuickTime dalam pemilih fail atau dialog keutamaan. TFrame.Dialog.StalledVideo.MessageMac=2. Buka Tracker dalam Java JM 32-bit dan bukanya dengan QuickTime. TFrame.Dialog.StalledVideo.Button.Stop=Henti TFrame.Dialog.StalledVideo.Button.Wait=Tunggu Tracker.Dialog.NoVideoEngine.Checkbox=Jangan tunjuk ini lagi TrackerIO.ZipFileFilter.Description=fail ZIP (.zip) TrackerIO.Dialog.ErrorFFMPEG.Message1=Xuggle mengalami ralat berikut apabila membuka video ini: TrackerIO.Dialog.ErrorFFMPEG.Message2=Tidak semua ralat adalah maut. Untuk mesej ralat penuh, pilih Bantuan|Log Mesej TrackerIO.Dialog.ErrorFFMPEG.Message3=Jika Xuggle gagal, anda boleh buka video dengan QuickTime. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Nota: Pada Mac OSX, ini memerlukan Tracker digunakan dalam Java JM 32-bit. TrackerIO.Dialog.ErrorFFMPEG.Title=Ralat Xuggle TrackerIO.ErrorFFMPEG.LogMessage=Untuk butiran lanjut, aktifkan amaran Xuggle dalam dialog keutamaan (Sunting/Keutamaan). TToolBar.Button.OpenBrowser.Tooltip=Buka Pelayar Pustaka Digital OSP # Additions by Doug Brown 2011-07-20 TFrame.Dialog.NoTRKInComPADRE.Title=Fail Tak Ditemui TFrame.Dialog.NoTRKInComPADRE.Message=No Tracker file was found for node Tiada fail Tracker ditemui untuk nod # Additions by Doug Brown 2011-08-08 AnalyticParticle.Builder.Title=Zarah Kinematik DynamicParticle.Builder.Title=Zarah Dinamik (Cartes) DynamicParticlePolar.Builder.Title=Zarah Dinamik (Kutub) DynamicSystem.Builder.Title=Sistem Dinamik (Dalaman) PropertiesDialog.Button.CopyFilePath=Salin Laluan Fail PropertiesDialog.Button.CopyVideoPath=Salin Laluan Video PropertiesDialog.Tab.TrackerFile=Fail Tracker PropertiesDialog.Tab.Metadata=Metadata PropertiesDialog.Header.Property=Sifat PropertiesDialog.Header.Value=Nilai TActions.Action.OpenURL=Buka URL... TActions.Dialog.OpenURL.Title=Buka URL TActions.Dialog.OpenURL.Message=Masukkan URL video berasaskan web, fail Tracker atau fail zip Tracker TActions.Dialog.AboutVideo.Name=Nama # Additions by Doug Brown 2011-08-25 PrefsDialog.CacheFiles.BorderTitle=Fail Web Tercache? PrefsDialog.Button.ClearCache=Bersih Semua # Additions by Doug Brown 2011-10-07 PointMass.Remark.Hint=, shift-klik untuk tanda semula kedudukan yang diserlahkan PointMass.Remarking.Hint=klik tetikus untuk tanda semula kedudukan PointMass.PositionSelected.Hint=seret atau masukkan kedudukan pada bar alat PointMass.VectorSelected.Hint=seret untuk alih Vector.Remark.Hint=hift-klik untuk tanda semula tip yang diserlahkan Vector.TipSelected.Hint=seret atau masukkan komponen pada bar alat Vector.HandleSelected.Hint=seret untuk alih Vector.Remarking.Hint=klik tetikus untuk tanda semula tip AutoTracker.Label.Search=Cari AutoTracker.Label.Target=Sasaran AutoTracker.Label.Frame=Bingkai AutoTracker.Label.Point=Titik AutoTracker.Label.Template=Templat AutoTracker.Label.Track=Trek AutoTracker.Label.Match=Padan AutoTracker.Label.NoTemplate=Tiada Templat AutoTracker.Label.EvolutionRate=Kadar Evolusi AutoTracker.Label.Automark=Autotanda AutoTracker.Info.Instructions=Klik butang Cari untuk mendapatkan padanan dalam kawasan carian yang ditunjukkan. AutoTracker.Info.KeyFrame.Instructions1=Bingkai kekunci ini mentakrifkan templat dan sasaran yang ditunjukkan. Klik butang Cari untuk mendapatkan padanan pada templat. AutoTracker.Info.KeyFrame.Instructions2=Anda boleh seret sasaran, template atau kawasan carian untuk alihkan atau saizkannya semula. AutoTracker.Info.MouseOver.Instructions=Lalukan tetikus pada kawalan di atas untuk ketahui lebih lanjut tentang tetapan dan pelarasan. AutoTracker.Info.Mask1=Templat adalah imej yang ingin dipadankan. Ia bermula dengan bingkai kekunci dan berubah ansur dengan penyesuaian terhadap perubahan bentuk dan warna. AutoTracker.Info.Mask2=Aras autotanda adalah skor padanan minimum yang diperlukan untuk penandaan automatik, AutoTracker.Info.Mask.Instructions=Alih atau saizkan semula templat dengan menyeret tepi atau bucu pemegang (bingkai kekunci sahaja). Laraskan kada evolusi dan aras autotanda menggunakan gelegar. AutoTracker.Info.Mask.Tip=Aras autotanda rendah akan menghasilkan padanan yang salah--cuba tinggikan kadar evolusi pula. AutoTracker.Info.Search=Kawasan carian diimbas untuk padanan terbaik. AutoTracker.Info.SearchOnAxis=Paksi-x dalam kawasan carian diimbas untuk padanan terbaik. AutoTracker.Info.Search.Instructions=Alih atau saizkan semula kawasan carian dengan menyeret tepi atau bucu pemegang. Set paksi-x dan pilihan lihat-ke-depan dengan menyemak kotaknya. AutoTracker.Info.Search.Tip=Kawasan carian tidak perlu besar dalam kebanyakan kes. Pilihan lihat-ke-depan mengalihkan kawasan carian ke kedudukan padanan yang diramalkan secara automatik. AutoTracker.Info.Target=The target is where the targeted track point is marked. Sasaran ialah tanda pada titik trek yang disasarkan. AutoTracker.Info.Target.Instructions=Alih sasaran dengan menyeretnya (bingkai kekunci sahaja). Pilih trek dan titik yang disasarkan daripada senarai ke bawah. AutoTracker.Info.Title.Settings=Tetapan AutoTracker.Info.Title.Tip=Petua AutoTracker.Info.SelectTrack=Sila pilih atau cipta trek dan titik yang anda ingin autotrektrek AutoTracker.Info.OutsideXAxis=Paksi-x tidak melalui kawasan carian. Pilihan anda adalah: AutoTracker.Info.NewKeyFrame=--undur langkah dan ubah kadar evolusi atau shift-control-klik untuk mentakrifkan bingkai kekunci baharu AutoTracker.Info.Replace=--terima padanan AutoTracker.Info.Keep=--langkau bingkai ini dan biarkan tak berubah AutoTracker.Info.PossibleReplace=Padanan sesuai ditunjukkan. Pilihan anda adalah: AutoTracker.Wizard.Button.Accept=Terima AutoTracker.Wizard.Button.Stop=Henti AutoTracker.Wizard.Button.Skip=Langkau AutoTracker.Wizard.Button.Replace=Ganti AutoTracker.Wizard.Button.Keep=Tolak AutoTracker.Wizard.Button.Search=Cari AutoTracker.Wizard.Button.SearchThis=Cari Ini AutoTracker.Wizard.Button.SearchNext=Cari Berikutnya AutoTracker.Wizard.Button.Delete=Buang AutoTracker.Wizard.Button.ShowKeyFrame=unjuk Bingkai Kekunci AutoTracker.Wizard.Button.DeleteKeyFrame=Buang Bingkai Kekunci AutoTracker.Wizard.Checkbox.LookAhead=Lihat Ke Depan AutoTracker.Wizard.Checkbox.XAxis=Paksi-X Sahaja AutoTracker.Wizard.Menuitem.DeleteThis=Titik Ini AutoTracker.Wizard.Menuitem.DeleteLater=Titik Kemudian AutoTracker.Wizard.Menuitem.DeleteAll=Bersih Semua TToolBar.Button.AutoTracker.Tooltip=Tunjuk atau sembunyi autotrek MainTView.Popup.MenuItem.ZoomIn=Zum Dekat MainTView.Popup.MenuItem.ZoomOut=Zum Jauh MainTView.Popup.MenuItem.ZoomToFit=Zum Penuh TrackerIO.Dialog.DurationVaries.Title=Jangka Masa Bingkai TrackerIO.Dialog.DurationVaries.Message1=Sesetengah jangka masa menyisih daripada purata dengan lebih daripada TrackerIO.Dialog.DurationVaries.Message2=Untuk halaju dan pecutan yang tepat, anda perlu sisihkan bingkai ini daripada TrackerIO.Dialog.DurationVaries.Message3=pengiraan dengan mengesetkan bingkai mula dan bingkai akhir klip video. TrackerIO.Dialog.DurationVaries.Message4=Bingkai untuk disisihkan: TrackerIO.Dialog.DurationVaries.Message5=Jangka masa purata dan kadar bingkai jika disisihkan: TFrame.Dialog.LibraryError.Title=ralat TFrame.Dialog.LibraryError.Message=Tiada sumber boleh dimuatkan untuk nod # Additions by Doug Brown 2011-12-01 TTrack.Label.Unmarked=shift-klik untuk tanda PrefsDialog.Label.Path=Laluan PrefsDialog.Checkbox.ClearCacheOnExit=Bersih apabila keluar PrefsDialog.FileChooser.Title.Cache=Set Cache PrefsDialog.FileFilter.Directories=Direktori Tracker.Action.AboutThreads=Tentang Jalur... PrefsDialog.JRE.BorderTitle=Mesin Maya Java PrefsDialog.FileChooser.Title.JRE=Set Java VM PrefsDialog.FileFilter.JRE=Direktori dan Java VM PrefsDialog.Version.BorderTitle=Versi Tracker PrefsDialog.Version.Default=lalai PrefsDialog.Tab.ClearCacheOnExit=Bersih apabila keluar PrefsDialog.Run.BorderTitle=Program Dilaksanakan pada Permulaan PrefsDialog.FileChooser.Title.Run=Pilih Fail Boleh Laku PrefsDialog.Button.Save=Simpan Tracker.Readme=README Tracker Tracker.Readme.NotFound=Fail README tak ditemui Popup.MenuItem.Algorithm=Algoritma... AlgorithmDialog.Button.FiniteDifference=Beza Terhingga AlgorithmDialog.Button.BounceDetect=Bounce Detection Pengesanan Lantun AlgorithmDialog.TitledBorder.Choose=Pilih algoritma yang digunakan untuk mengira halaju dan pecutan: AlgorithmDialog.Title=Algoritma AlgorithmDialog.FiniteDifference.Message1=Ini ialah algoritma lalai. AlgorithmDialog.FiniteDifference.Message2=Halaju: v[i] = (x[i+1] - x[i-1]) / (2*dt) AlgorithmDialog.FiniteDifference.Message3=Pecutan: v[i] = a[i] = (2*x[i+2] - x[i+1] - 2*x[i] - x[i-1] + 2*x[i-2]) / (7*dt^2) AlgorithmDialog.BounceDetect.Message1=Algoritma ini melicinkan halaju dan pecutan tetapi juga mengesan perubahan tiba-tiba dalam halaju. AlgorithmDialog.BounceDetect.Message2=Awas: boleh menghasilkan artifak. Untuk maklumat tambahan, lihat: TMenuBar.Menu.Diagnostics=Diagnostik # Additions by Doug Brown 2012-02-12 Tracker.Dialog.Invalid.Title=XML Tak Sah Tracker.Dialog.Invalid.Message=Fail tak boleh dibaca. TrackPlottingPanel.Popup.Menu.CompareWith=Bandingkan Dengan TrackerPanel.DataBuilder.TrackType.Unknown=anu TrackerPanel.DataBuilder.Button.Load.Tooltip=Muat fungsi data daripada fail XML TrackerPanel.DataBuilder.Button.Save.Tooltip=Simpan fungsi data dalam fail XML TrackerPanel.DataBuilder.Load.Title=Muat Fungsi Data TrackerPanel.DataBuilder.Load.Message=Pilih fungsi untuk pemuatan: TrackerPanel.DataBuilder.Save.Title=Simpan Fungsi Data TrackerPanel.DataBuilder.Save.Message=Pilih fungsi untuk simpan: TrackerPanel.DataBuilder.Dialog.Load.Button.All=Muatkan dalam semua TrackerPanel.DataBuilder.Dialog.Load.Button.Only=Muatkan hanya dalam TrackerPanel.DataBuilder.Dialog.Load.Title=Pilihan Trek TrackerPanel.DataBuilder.Dialog.Load.Message=Adakah anda ingin memuatkan fungsi ke dalam semua trek jenis TrackerPanel.DataBuilder.Dialog.WrongTrackType.Title=Jenis Trek Tak Betul TrackerPanel.DataBuilder.Dialog.WrongTrackType.Message1=Fail ini mentakrifkan fungsi data untuk jenis trek TrackerPanel.DataBuilder.Dialog.WrongTrackType.Message2=Ia tak boleh dimuatkan ke dalam jenis TrackerPanel.DataBuilder.Dialog.WrongType.Title=Jenis Tak Betul TrackerPanel.DataBuilder.Dialog.WrongType.Message=Fail ini tidak mentakrifkan fungsi data. # Additions by Doug Brown 2012-04-22 ExportTRKDialog.Complete.Message1=Klip Tracker telah disimpan sebagai ExportTRKDialog.Complete.Message2=Adakah anda ingin membukanya dalam Tracker sekarang? ExportTRKDialog.Complete.Title=Selesai Eksport ExportTRKDialog.Title=Eksport Klip Tracker ExportTRKDialog.Message1=Ia (1) mengeksport video klip, (2) menukar data tab untuk kesesuaian video yang dieksport dan (3) menyimpan tab yang ditukarkan sebagai fail Tracker yang baharu. ExportTRKDialog.Message2=Fail Tracker dan video disimpan dalam direktori yang sama dengan nama yang sama tetapi sambungan berbeza. TMenuBar.MenuItem.TabClip=Klip Tracker TMenuBar.Menu.CalibrationTools=Alat Tentu Ukur TrackerIO.Dialog.DurationVaries.Button.SetClip=Set Klip Disyorkan TrackerIO.Dialog.DurationVaries.Start=mula TrackerIO.Dialog.DurationVaries.End=tamat TrackerIO.Dialog.DurationVaries.Recommended=Klip Disyorkan # Additions by Doug Brown 2012-05-07 AttachmentInspector.Title=Sambung Hujung AttachmentInspector.Label.End=Hujung AttachmentInspector.Label.Vertex=Bucu AttachmentInspector.Header.PointName=Nama AttachmentInspector.Header.AttachedTo=Sambung Pada ExportTRKDialog.Label.VideoFormat=Format Video MeasuringTool.MenuItem.Attach=Sambung Hujung... PerspectiveTrack.Corner=selekoh PrefsDialog.LogLevel.BorderTitle=Aras Log Mesej Permulaan Protractor.Data.Description.0=masa Protractor.Data.Description.1=sudut jangka sudut Protractor.Data.Description.2=panjang lengan 1 Protractor.Data.Description.3=panjang lengan 2 Protractor.Data.Description.4=nombor langkah Protractor.Data.Description.5=nombor bingkai TapeMeasure.Data.Description.0=masa TapeMeasure.Data.Description.1=panjang TapeMeasure.Data.Description.2=sudut diukur dari paksi +x TapeMeasure.Data.Description.3=nombor langkah TapeMeasure.Data.Description.4=nombor bingkai # Additions by Doug Brown 2012-06-07 AutoTracker.Info.Unsearched=tak tercari AutoTracker.Info.KeyFrame=Bingkai Kekunci AutoTracker.Wizard.Menuitem.DeleteThisKeyFrame=Bingkai Kekunci Ini AutoTracker.Wizard.Menuitem.DeleteThisMatch=Padanan Ini AutoTracker.Wizard.Menuitem.DeleteLaterMatches=Padanan Berikutnya PrefsDialog.Checkbox.64BitVM=64-bit # Additions by Doug Brown 2012-11-20 AutoTracker.Wizard.Title=Autotrek Dialog.Button.Add=Tambah Dialog.Button.Remove=Alih PrefsDialog.Button.ClearHost=Bersih Hos PrefsDialog.Button.ClearHost.Tooltip=buang semua fail berkaitan dengan hos web yang dipilih daripada cache OSP PrefsDialog.Button.ClearCache.Tooltip=buang semua fail daripada cache OSP TActions.Action.SaveZip=Eksport ZIP Tracker ThumbnailDialog.Title=Eksport Imej Lakaran ThumbnailDialog.Settings.Title=Pilihan Lakaran ThumbnailDialog.Label.CurrentImage=Imej semasa ThumbnailDialog.Label.FrameNumber=bingkai ThumbnailDialog.Label.StepNumber=langkah ThumbnailDialog.View.VideoOnly=Video Sahaja ThumbnailDialog.View.MainView=Pandangan Utama ThumbnailDialog.View.WholeFrame=Keseluruhan Bingkai ThumbnailDialog.Format.PNG=Imej PNG ThumbnailDialog.Format.JPG=Imej JPEG ThumbnailDialog.Chooser.SaveThumbnail.Title=Simpan Lakaran ThumbnailDialog.Subtitle.Image=Imej TMenuBar.MenuItem.Thumbnail=Imej Lakaran TToolBar.Button.SaveZip.Tooltip=Eksport fail ZIP Tracker TTrack.MenuItem.DeletePoint=Buang Langkah Terpilih ZipResourceDialog.Title=Eksport ZIP Tracker ZipResourceDialog.Label.Format=Format ZipResourceDialog.Label.Title=Nama ZipResourceDialog.Label.Description=Pernyataan ZipResourceDialog.Label.Keywords=Kata kunci ZipResourceDialog.Label.Link=Pautan Luar ZipResourceDialog.Label.HTML=Sumber HTML ZipResourceDialog.Complete.Message1=Fail ZIP Tracker telah disimpan sebagai ZipResourceDialog.Complete.Message2=Adakah anda ingin membukanya dengan Tracker sekarang? ZipResourceDialog.Complete.Title=Berjaya ZipResourceDialog.Border.Title.Documentation=Dokumentasi HTML ZipResourceDialog.Border.Title.Video=Video ZipResourceDialog.Border.Title.Thumbnail=Lakaran ZipResourceDialog.FileChooser.SaveZip.Title=Eksport ZIP Tracker ZipResourceDialog.FileChooser.AddFile.Title=Tambah Fail kepada ZIP Tracker ZipResourceDialog.FileChooser.OpenHTML.Title=Buka Fail HTML ZipResourceDialog.Button.AddFiles=ATambah Fail ZipResourceDialog.Button.ThumbnailSettings=Tetapan -ZipResourceDialog.Checkbox.TrimVideo=Pangkas Klip ZipResourceDialog.AddHTMLInfo.Title=Tambah HTML Ke Dalam Fail ZipResourceDialog.AddHTMLInfo.Message1=Adakah anda ingin tambah HTML ke dalam fail ZipResourceDialog.AddHTMLInfo.Message2=ke ZIP Tracker? ZipResourceDialog.HTMLField.DefaultText=Jika tiada dikhususkan, fail kosong yang baharu akan dicipta. ZipResourceDialog.Dialog.AddFiles.Title=Tambah Fail HTML dan PDF ZipResourceDialog.Tooltip.HTML=Laluan ke fail sumber HTML (jika tiada, fail kosong yang baharu akan dibuat.) ZipResourceDialog.Tooltip.Author=Pengarang bagi sumber ini. ZipResourceDialog.Tooltip.Title=Papar nama sumber ini (bukan nama fail) ZipResourceDialog.Tooltip.Description=Pernyataan berguna sumber ini ZipResourceDialog.Tooltip.Keywords=Senarai kata kunci untuk carian dalam pelayar DL ZipResourceDialog.Tooltip.Contact=Maklumat perhubungan pengarang (institusi, e-mel, laman web, dsb.) ZipResourceDialog.Tooltip.Link=URL fail HTML luaran dengan maklumat lanjut tentang sumber ini ZipResourceDialog.Tooltip.ThumbnailSettings=Ubah pandangan, saiz atau jenis fail lakaran ZipResourceDialog.Tooltip.AddFiles=Tambah fail HTML dan PDF ke ZIP Tracker ZipResourceDialog.Tooltip.TrimVideo=Semak untuk eksport klip video, biarkan untuk guna video asal ZipResourceDialog.Tooltip.LoadHTML=Gunakan pemilih fail untuk muatkan HTML ke dalam fail # Additions by Doug Brown 2012-12-10 PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=Jangka masa bingkai boleh ubah PrefsDialog.Button.NoEngine=Tiada PrefsDialog.Dialog.SwitchToQT.Message=Penukaran kepada QuickTime juga mengubah Java VM kepada 32-bit. PrefsDialog.Dialog.SwitchToXuggle32.Message=Penukaran kepada Xuggle juga mengubah Java VM kepada 32-bit. PrefsDialog.Dialog.SwitchToXuggle64.Message=Penukaran kepada Xuggle juga mengubah Java VM kepada 64-bit. PrefsDialog.Dialog.SwitchVM.Title=Java VM Telah Berubah PrefsDialog.Dialog.SwitchTo32.Message=Penukaran ke Java VM 32-bit juga mengubah enjin video ke QuickTime PrefsDialog.Dialog.SwitchTo64.Message=Penukaran ke Java VM 64-bit juga mengubah enjin video ke Xuggle PrefsDialog.Dialog.SwitchEngine.Title=Enjin Video Telah Berubah PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=Tiada enjin video tersedia untuk Java VM 64-bit. Anda PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=masih boleh buka imej (JPEG, PNG) dan GIF beranimasi. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Adakah anda pasti ingin bertukar ke VM 64-bit? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=Tiada Enjin Video 64-bit. PrefsDialog.Dialog.No32bitVMXuggle.Message=Java VM 32-bit mesti dipasang sebelum Xuggle boleh digunakan. PrefsDialog.Dialog.No32bitVMQT.Message=Java VM 32-bit mesti dipasang sebelum QuickTime boleh digunakan. PrefsDialog.Dialog.No32bitVM.Message=Untuk maklumat lanjut, lihat Bantuan Tracker: Pemasangan PrefsDialog.Dialog.No32bitVM.Title=VM 32-bit Diperlukan PrefsDialog.Button.ShowHelpNow=Tunjuk Bantuan Sekarang TActions.Dialog.AboutVideo.FramesPerSecond.NotConstant=BUKAN PEMALAR TMenuBar.MenuItem.CheckFrameDurations=Jangka Masa Bingkai TMenuBar.MenuItem.ExportZIP=Zip Tracker Tracker.Dialog.Install32BitVM.Message=Anda mesti pasang Java VM 32-bit sebelum enjin video boleh digunakan. Tracker.Dialog.SwitchTo32BitVM.Message1=Satu atau lebih enjin video sudah terpasang tetapi tak tersedia kerana ia Tracker.Dialog.SwitchTo32BitVM.Message2=memerlukan Java VM 32-bit dan anda sedang menggunakan VM 64-bit. Tracker.Dialog.SwitchTo32BitVM.Question=Adakah anda ingin melancar semula dengan VM 32-bit dan enjin lalai? Tracker.Dialog.Button.RelaunchNow=Ya, lancar semula sekarang Tracker.Dialog.Button.ShowPrefs=Tidak, tetapi tunjukkan keutamaan Tracker.Dialog.Button.ContinueWithoutEngine=Tidak, teruskan tanpa video Tracker.Dialog.EngineProblems.Message1=Satu atau lebih enjin video sudah terpasang namun tidak berfungsi. Tracker.Dialog.EngineProblems.Message2=Untuk maklumat lanjut lihat Bantuan|Diagnostik|Tentang Xuggle atau QuickTime. Tracker.Dialog.ReplaceXuggle.Message1=Kami cadangkan anda gantikan enjin video Xuggle anda sekarang Tracker.Dialog.ReplaceXuggle.Message2=dengan Xuggle versi 3.4 melalui pemasangan semula Tracker (versi 4.75 Tracker.Dialog.ReplaceXuggle.Message3=atau lebih tinggi) dan pilih Xuggle dalam pilihan pemasangan. TrackerIO.Dialog.DurationIsConstant.Message=Semua jangka masa bingkai adalah sama (fps tetap). TrackerIO.ZIPResourceFilter.Description=Fail ZIP Tracker (.trz) TToolbar.Button.Desktop.Tooltip=Paparan berkaitan dokumen HTML dan/atau PDF ZipResourceDialog.BadModels.Message1=Klip video tidak mengandungi bingkai mula ZipResourceDialog.BadModels.Message2=Modul Zarah berikut. Jika anda pangkas video ZipResourceDialog.BadModels.Message3=model tersebut TIDAK akan termasuk dalam ZIP Tracker yang diimport. ZipResourceDialog.BadModels.Question=dakah anda ingin teruskan atau abaikan model tersebut? ZipResourceDialog.BadModels.Title=Konflik Klip-Model TMenuBar.MenuItem.EditVideoFrames=Tambah/Singkir Bingkai TMenuBar.Dialog.RequiresMemory.Message1=Semua imej mesti dimuatkan ke dalam ingatan untuk suntingan bingkai. Ini akan meningkatkan laju main semula. TMenuBar.Dialog.RequiresMemory.Message2=Sila semak ingatan tersedia dan lancarkan semula dengan lebih ingatan jika diperlukan. TMenuBar.Dialog.RequiresMemory.Title=Ingatan # Additions by Doug Brown 2013-01-25 PointMass.Data.Description.PixelX=piksel komponen-x PointMass.Data.Description.PixelY=piksel komponen-y ExportVideoDialog.Content.DeinterlacedVideo=Video ternyahjalin ExportVideoDialog.Deinterlace.OddFirst=Medan ganjil dahulu ExportVideoDialog.Deinterlace.EvenFirst=Medan genap dahulu ExportVideoDialog.Deinterlace.Dialog.Title=Tertib Medan Ternyahjalin TFrame.Dialog.LibraryError.FileNotFound.Title=Fail Tak Ditemui TFrame.Dialog.LibraryError.FileNotFound.Message=Tak boleh menjumpai fail TrackerPanel.DataBuilder.Button.Autoload=Automuat TrackerPanel.DataBuilder.Button.Autoload.Tooltip=Urus fungsi data terautomuat TrackerPanel.DataBuilder.Autoload.Title=Automuat fungsi data TrackerPanel.DataBuilder.Autoload.Message=Pilih fungsi untuk automuat: TrackerPanel.DataBuilder.Chooser.XMLFiles=Fail XML TrackerIO.Dialog.Open.Title=Buka TToolbar.Button.Refresh.Popup.RefreshNow=Segar semula TToolbar.Button.Refresh.Popup.AutoRefresh=Auto-refresh Autosegar semula TToolbar.Button.Refresh.Tooltip=Segar semula data dan pandangan # Additions by Doug Brown 2013-05-10 CoordAxes.Origin.Label=kedudukan piksel asalan CoordAxes.Origin.Field.Tooltip=kedudukan asalan diukur dari pepenjuru kiri atas video # Additions by Doug Brown 2013-08-24 MainTView.Popup.MenuItem.Select=Pilih Titik MainTView.Popup.MenuItem.Deselect=Nyahpilih Titik ZipResourceDialog.Checkbox.PreviewThumbnail=Pratonton ZipResourceDialog.Dialog.BadFileName.Message=Nama fail tidak boleh mengandungi aksara berikut: ZipResourceDialog.Dialog.BadFileName.Title=Nama Fail Yang Tak Dibenarkan ZipResourceDialog.Dialog.ExportFailed.Message=Fail ZIP tak boleh dieksport. ZipResourceDialog.Dialog.ExportFailed.Title=Eksport Gagal PrefsDialog.Button.SetCache=Set Cache # Additions by Doug Brown 2013-12-17 Tracker.StartLog=Log Mula Tracker.StartLog.NotFound=Fail log mula tak ditemui Tracker.Dialog.MemoryReduced.Title=Ingatan Yang Dikehendaki Dikurangkan Tracker.Dialog.MemoryReduced.Message1=Tracker tak boleh dimulakan dengan ingatan Tracker.Dialog.MemoryReduced.Message2=jadi ingatan yang dikehendaki telah dikurangkan ke Tracker.Dialog.MemoryReduced.Message3=Untuk maklumat lanjut lihat Bantuan|Diagnostik|Log Mula... TrackPlottingPanel.Popup.MenuItem.ShowZero=Tunjuk TableTrackView.Menu.TextColumn.Text=Lajur Teks TableTrackView.Menu.TextColumn.Tooltip=Urus lajur teks boleh sunting TableTrackView.Action.CreateTextColumn.Text=Cipta... TableTrackView.Action.DeleteTextColumn.Text=Buang TableTrackView.Action.RenameTextColumn.Text=Nama Semula TableTrackView.Dialog.NameColumn.Message=Sila masukkan nama lajur. TableTrackView.Dialog.NameColumn.TryAgain=Nama tersebut sudah digunakan. TableTrackView.Dialog.NameColumn.Title=Lajur Teks TToolBar.MenuItem.StretchOff=Set Semula # Additions by Doug Brown 2014-02-20 PrefsDialog.Checkbox.WarnXuggleVersion=Versi Xuggle PrefsDialog.Checkbox.WarnCopyFailed=Ralat Salin Fail Enjin Video Tracker.Dialog.FailedToCopy.Title=Ralat Salin Fail Velocity.Dialog.Color.Title=Pilih Warna Halaju Acceleration.Dialog.Color.Title=Pilih Warna Pecutan TMenuBar.Menu.FontSize=Aras Fon TMenuBar.MenuItem.DefaultFontSize=Lalai PrefsDialog.FontSize.BorderTitle=Aras Fon TrackerPanel.Label.Booster=Pelancar TrackerPanel.Booster.None=(tiada) TrackerPanel.Dropdown.Booster.Tooltip=Jisim titik yang menetapkan keadaan awal model ini. CoordAxes.Checkbox.Grid=Grid CoordAxes.Checkbox.Grid.Tooltip=Papar tindihan grid CoordAxes.Button.Grid.Tooltip=Set warna dan kelegapan grid CoordAxes.Dialog.GridColor.Title=Pilih Warna Grid CoordAxes.MenuItem.GridColor=Warna Grid... CoordAxes.MenuItem.GridOpacity=Kelegapan.. CoordAxes.Dialog.GridOpacity.Title=Set Kelegapan Grid DynamicSystem.Dialog.RemoveBooster.Title=Konflik Pelancar DynamicSystem.Dialog.RemoveBooster.Message1=Zarah dalam sistem juga tidak boleh melancarkan satu yang lain. DynamicSystem.Dialog.RemoveBooster.Message2=Pelancar yang berkonfik akan dialihkan daripada DynamicSystem.Dialog.RemoveBooster.Message3=sebelum pengubahsuaian sistem. # Additions by Doug Brown 2014-05-09 PageTView.MenuItem.OpenInBrowser=Buka Halaman dalam Pelayar TToolbar.Button.Desktop.Menu.OpenPage=Halaman TToolbar.Button.Desktop.Menu.OpenFile=Fail # Additions by Doug Brown 2014-10-24 Tracker.Prefs.MenuItem.Text=Fail Keutamaan Tracker.Prefs.NotFound=Fail keutamaan tak ditemui TapeMeasure.Alert.UnfixScale.Message1=Skala Sistem Koordinat mesti dilonggarkan untuk diletakkan hujung. TapeMeasure.Alert.UnfixScale.Message2=Adakah anda ingin longgarkannya sekarang? TapeMeasure.Alert.UnfixScale.Title=Skala telah ditetapkan. Tracker.Dialog.StarterWarning.Title=Pelancaran Tak-Piawai # Additions by Doug Brown 2014-12-26 TrackDataBuilder.Dialog.NoFunctionsFound.Message=iada fungsi data yang ditemui untuk jenis trek TrackDataBuilder.Dialog.NoFunctionsFound.Title=Fungsi Tak Ditemui TrackDataBuilder.Instructions.SelectToAutoload=Pilih fungsi data untuk automuat daripada senarai di bawah. TrackDataBuilder.Instructions.WhereDefined=Fungsi ditakrifkan dalam fail XML Pembina Data yang ditemui dalam direktori yang ditunjukkan. TrackDataBuilder.Instructions.HowToAddFunction=Untuk tambah fungsi baru, ciptanya dalam Pembina Data, simpannya dalam fail XML, dan salin fail ke salah satu direktori. TrackDataBuilder.Instructions.HowToAddDirectory=TUntuk ubah laluan carian, klik butang Carian Laluan. TrackDataBuilder.Dialog.ConvertAutoload.Message1=Sesetengah fungsi terautomuat disimpan dalam format terdahulu. TrackDataBuilder.Dialog.ConvertAutoload.Message2=Adakah anda ingin menukarnya ke dalam format mudah alih baharu? TrackDataBuilder.Dialog.ConvertAutoload.Message3=Nota: format baharu tak boleh dibaca oleh Tracker versi terdahulu. TrackDataBuilder.Dialog.ConvertAutoload.Title=Tukar Fungsi Automuat? TrackDataBuilder.MenuItem.SaveAll.Text=Simpan semua TrackDataBuilder.MenuItem.SaveAll.Tooltip=Simpan semua fungsi dalam format mudah alih, boleh automuat (tak boleh dibaca oleh Tracker versi terdahulu). TrackDataBuilder.MenuItem.SaveOnly.Text=Simpan sahaja TrackDataBuilder.MenuItem.SaveOnly.Tooltip=Simpan fungsi trek terpilih dalam format boleh baca oleh semua versi Tracker (tak boleh automuat) ParticleDataTrack.Name=Trek Data ParticleDataTrack.Builder.Title=Trek Data ParticleDataTrack.New.Name=trek data TActions.Action.ImportData=Sumber Data... TrackerIO.TextFileFilter.Description=Fail Teks (.txt) TrackerIO.JarFileFilter.Description=Fail Jar (.jar) TrackerIO.Dialog.OpenData.Title=Sumber Data Terbuka DataTrackClipControl.Label.Data=Data DataTrackClipControl.Label.Video=Video DataTrackClipControl.Border.Title=Klip Data DataTrackClipControl.Label.VideoStart=Bingkai Mula DataTrackClipControl.Label.FrameCount=Kiraan Bingkai DataTrackClipControl.Label.DataStart=Mula Data DataTrackClipControl.Label.Stride=Langkah Data ParticleDataTrackFunctionPanel.Border.Title=Kawalan Sumber Data DataTrackTimeControl.Button.Video=Masa Video DataTrackTimeControl.Button.Data=Masa Data DataTrackTimeControl.Border.Title=Basis Masa TActions.Action.DataTrack.Unsupported.JarFile=Fail Jar TActions.Action.DataTrack.Unsupported.Message=tak dapat hantar data ke Tracker TActions.Action.DataTrack.Unsupported.Title=Bukan Sumber Data # Additions by Doug Brown 2015-04-17 to 2015-05-30 DataTrackTool.Dialog.VideoNotFound.Message1=Unable to find video Tak dapat menemui video DataTrackTool.Dialog.VideoNotFound.Message2=Adakah anda mahu mencarinya? DataTrackTool.Dialog.VideoNotFound.Title=VVideo Tak Ditemui DataTrackTool.Dialog.FileNotFound.Message1=Tak boleh menemui fail DataTrackTool.Dialog.FileNotFound.Title=Fail Tak Ditemui DataTrackTool.Dialog.InvalidTRK.Message=Fail bukan fail TRK yang sah DataTrackTool.Dialog.InvalidTRK.Title=Fail Tak Sah DataTrackTool.Dialog.InvalidData.Message=Data tidak mengandungi kedudukan (x, y) DataTrackTool.Dialog.InvalidData.Title=Data Tak Sah ParticleDataTrack.Dialog.NoNewData.Message=Data dihantar tak melanjutkan data sedia ada. ParticleDataTrack.Dialog.NoNewData.Title=Tiada Data Baharu ParticleDataTrackFunctionPanel.Instructions.General=Klik-berganda masa awal untuk sunting atau guna gelegar untuk ubah tetapan video dan data. TrackerPanel.Dialog.NoData.Message=Tiada data ditemui TrackerPanel.Dialog.NoData.Title=Tiada Data TrackerPanel.Dialog.Exception.Message=Data tak boleh diimport kerana pengecualian berikut berlaku TrackerPanel.Dialog.Exception.Title=Import Data Gagal TActions.Dialog.URLResourceNotFound.Message=Tiada sumber ditemui pada URL TActions.Dialog.URLResourceNotFound.Title=Sumber Tak Ditemui CircleFitter.Name=Penyesuai Bulatan CircleFitter.New.Name=bulatan CircleFitter.Label.Radius=jejari CircleFitter.Checkbox.RadialLine=Garis jejarian CircleFitter.Checkbox.RadialLine.Tooltip=Tunjuk atau sembunyi garis jejarian CircleFitter.Field.Radius.Tooltip=Jejari bulatan penyesuaian terbaik CircleFitter.Field.CenterX.Tooltip=komponen-x pusat penyesuaian terbaik CircleFitter.Field.CenterY.Tooltip=komponen-y pusat penyesuaian terbaik CircleFitter.Label.MarkPoint=Penyesuaian bulatan memerlukan 3 atau lebih titik data CircleFitter.Hint.MarkMore=shift-klik untuk tanda lebih titik jika mahu CircleFitter.Hint.Mark3=shift-klik untuk tanda titik data CircleFitter.Data.Center=pusat CircleFitter.Data.Description.0=masa CircleFitter.Data.Description.1=pusat komponen-x CircleFitter.Data.Description.2=pusat komponen-y CircleFitter.Data.Description.3=jejari CircleFitter.Data.Description.4=nombor langkah CircleFitter.Data.Description.5=nombor bingkai CircleFitter.Data.Description.6=sudut garis jejarian CircleFitter.DataPoint.Name=titik perimeter CircleFitter.DataPoint.Hint=seret untuk alih CircleFitter.Slider.Name=garis jejarian CircleFitter.Slider.Hint=seret untuk putar CircleFitterFootprint.Circle4=titik kecil CircleFitterFootprint.Circle7=titik besar CircleFitterFootprint.Circle4Bold=titik kecil tebal CircleFitterFootprint.Circle7Bold=titik besar tebal CircleFitter.MenuItem.OriginToCenter=Alih Asalan ke Pusat CircleFitter.MenuItem.Inspector=Salin Langkah Jisim Titik... CircleFitter.MenuItem.ClearPoints=Bersih Titik CircleFitter.MenuItem.DeletePoint=Buang Titik Terpilih CircleFitter.Inspector.Instructions1=Ini menyesuaikan bulatan pada 3 atau lebih titik data. CircleFitter.Inspector.Instructions2=Anda boleh tanda titik secara manual atau salinnya daripada sumber titik jisim. CircleFitter.Inspector.Label.SourceTrack=Trek sumber CircleFitter.Inspector.Label.From=Langkah CircleFitter.Inspector.Label.To=ke CircleFitter.Inspector.Dropdown.None=Tiada CircleFitter.Inspector.Button.Apply=Salin Langkah TActions.Action.SaveVideoAs=Simpan Video Sebagai... TrackerIO.Export.Option.WithVideo=dengan video TrackerIO.Export.Option.WithoutVideo=tanpa video ParticleModel.MenuItem.UseDefaultReferenceFrame=Sentiasa Relatif Kepada Bingkai Rujukan Lalai TFrame.NotesDialog.Checkbox.ShowByDefault=Tunjuk nota dengan lalai # Additions by Doug Brown 2015-11-20 CircleFitter.Label.Point=Data Point CircleFitter.Label.Points=Data Points CircleFitter.Label.NewPoint=New CircleFitter.MenuItem.MarkedPoint=marked point AttachmentInspector.Label.Frames=Frames AttachmentInspector.Label.To=to AttachmentInspector.Label.Offset=Offset AttachmentInspector.Button.Steps=Single track AttachmentInspector.Button.Tracks=Multiple tracks AttachmentInspector.Button.Steps.Tooltip=Attach multiple data points to a single track AttachmentInspector.Button.Tracks.Tooltip=Attach one data point to each of several tracks AttachmentInspector.Checkbox.Relative=Relative frame numbers AttachmentInspector.Checkbox.Relative.Tooltip=Specified frame range is relative to the current frame AttachmentInspector.Border.Title.AttachTo=Attach To CircleFitter.Button.DataPoints=data points CircleFitter.Circle.Name=perimeter CircleFitter.Circle.Hint=best fit CircleFitter.Center.Name=center point CircleFitter.Center.Hint=best fit PerspectiveTrack.Corner.Hint=drag to move PerspectiveTrack.Corner.Input=input corner PerspectiveTrack.Corner.Output=output corner Undo.Description.Delete=Delete Undo.Description.Filter=Filter Undo.Description.Clear=Clear Undo.Description.Track=Track Undo.Description.Tracks=Tracks Undo.Description.Edit=Edit Undo.Description.Video=Video Undo.Description.Step=Step Undo.Description.Steps=Steps Undo.Description.Properties=Properties Undo.Description.Add=Add Undo.Description.Remove=Remove Undo.Description.Images=Images Undo.Description.Replace=Replace ParticleDataTrack.Menu.Points=Points ParticleDataTrack.Menu.Lines=Lines ParticleDataTrack.Checkbox.Closed=Closed ParticleDataTrack.Button.Paste.Text=Paste Data ParticleDataTrack.Button.Reload.Text=Reload Data Footprint.Lines=lines Footprint.BoldLines=bold lines Footprint.Outlines=outlines Footprint.BoldOutlines=bold outlines AttachmentInspector.Label.StartFrame=Start Frame AttachmentInspector.Label.FrameCount=Frame Count Protractor.Data.Description.6=rotation angle # Additions by Doug Brown 2016-05-10 TTrack.MenuItem.NumberFormat=Number Formats... TTrack.NumberField.Format.Tooltip=Right-click to format TTrack.NumberField.Format.Tooltip.OSX=Control-click to format NumberFormatSetter.Title=Number Formats NumberFormatSetter.ApplyToVariables.Text=Select a track and one or more variables: NumberFormatSetter.TitledBorder.ApplyTo.Text=Apply changes to: NumberFormatSetter.Button.ApplyToTrackOnly.Text=This track only NumberFormatSetter.Button.ApplyToTrackType.Text=All tracks of type NumberFormatSetter.Button.ApplyToDimension.Text=All variables with dimensions NumberFormatSetter.TitledBorder.Units.Text=Angle units: NumberFormatSetter.NoPattern=default NumberFormatSetter.Button.Revert=Revert NumberFormatSetter.DimensionList.More=more NumberFormatSetter.Help.Dimensions.1=Variable dimensions are combinations of: NumberFormatSetter.Help.Dimensions.2=L length NumberFormatSetter.Help.Dimensions.3=T time NumberFormatSetter.Help.Dimensions.4=M mass NumberFormatSetter.Help.Dimensions.5=A angle NumberFormatSetter.Help.Dimensions.6=I integer NumberFormatSetter.Help.Dimensions.7=C color (0-255) NumberFormatSetter.Help.Dimensions.8=P pixel TMenuBar.MenuItem.AutoPasteData.Text=Auto-Paste Protractor.Base.Name=base end Protractor.Base.Hint=drag to move the base Protractor.Attachment.Arm=Arm Protractor.Attachment.Base=Base # Additions by Doug Brown 2016-07-05 TMenuBar.MenuItem.DataTrackHelp=Help... TMenuBar.Checkbox.Autopaste=Auto-Paste Data TMenuBar.MenuItem.Clipboard=Clipboard TMenuBar.MenuItem.DataFile=Text File TMenuBar.MenuItem.EJS=EJS Simulation TFrame.ProgressDialog.Title.FramesLoaded=Frames loaded TrackerIO.Dialog.OpenEJS.Title=Open EJS Model # Additions by Doug Brown 2016-09-20 TrackControl.Button.FontSmaller.ToolTip=Decrease the font and icon sizes TrackControl.Button.FontBigger.ToolTip=Increase the font and icon sizes Tracker.Cursor.Autotrack.Keyframe.Description=Autotracker keyframe AutoTracker.Wizard.Button.Options=Options AutoTracker.Wizard.Menuitem.SearchFixed=Search Fixed Area AutoTracker.Wizard.Menuitem.CopyMatchScores=Copy Match Data CircleFitter.MenuItem.CopyToClipboard.Text=Copy to Clipboard CircleFitter.MenuItem.CopyToClipboard.Tooltip=Copy data point positions to the clipboard AutoTracker.Wizard.Button.Search.Tooltip=Click to start searching or shift-click for more options AutoTracker.Wizard.Button.SearchThis.Tooltip=Search again in the current frame AutoTracker.Wizard.Button.SearchNext.Tooltip=Search in the next frame only AutoTracker.Wizard.MenuItem.SearchFixed.Tooltip=Search all frames non-stop using the current search area and template AutoTracker.Wizard.MenuItem.CopyMatchScores.Tooltip=Copy match scores and target positions to the clipboard AutoTracker.Match.Score=score # Additions by Doug Brown 2017-04-16 ParticleModel.MenuItem.Stamp=Stamp ParticleModel.MenuItem.Stamp.Tooltip=Create a point mass with steps at the current model positions ParticleModel.Stamp.Name=stamp # Additions by Doug Brown 2017-08-21 PlotGuestDialog.Instructions=Compare with: TTrackBar.Dialog.Relaunch.DownloadLabel.Text=Downloading files to TTrackBar.Dialog.Relaunch.RelaunchLabel.Text=Tracker will restart shortly. PrefsDialog.Tab.Tracking.Title=Tracks PrefsDialog.Marking.BorderTitle=New Tracks PrefsDialog.Checkbox.ResetToZero.Text=Auto-reset to step 0 for marking Tracker.Dialog.ChangePrefVersionAfterUpgrade.Message1=You have just upgraded to version Tracker.Dialog.ChangePrefVersionAfterUpgrade.Message2=but your current preferred version is Tracker.Dialog.ChangePrefVersionAfterUpgrade.Message3=Would you like to change your preference to the default (new) version? Tracker.Dialog.ChangePrefVersionAfterUpgrade.Title=Tracker Preference CircleFitter.Data.PointCount=points CircleFitterFootprint.Circle4.PointsOnly=data points only # Additions by Doug Brown 2017-12-07 Tracker.About.TrackerHome=Your Tracker home: TableTrackView.Popup.Menuitem.GoToStep=Go To Step TableTrackView.Button.SkippedFrames.ToolTip=Show or hide red skip lines at skipped steps TTrackBar.Popup.MenuItem.LearnMore=Learn More PrefsDialog.JREDropdown.BundledJRE=default (bundled) TTrackBar.Dialog.Memory.Relaunch.Title=Restart TTrackBar.Dialog.Memory.Relaunch.Message=Restart Tracker now with new memory? TTrackBar.Dialog.SetMemory.Title=Set Memory Size TTrackBar.Dialog.SetMemory.Message=Set the maximum memory size in MB (-1 for default): TTrackBar.Dialog.Relaunch.DownloadLabel.Upgrade.Text=Downloading upgrade installer to TTrackBar.Dialog.Relaunch.RelaunchLabel.Upgrade.Text=The installer should start shortly. TTrackBar.Dialog.Relaunch.Title.Text=Downloading TTrackBar.Dialog.Download.Title=Upgrade Tracker TTrackBar.Dialog.Download.Message1=Tracker upgrade files will be downloaded to TTrackBar.Dialog.Download.Message2=Tracker will then restart. Do you wish to continue? TTrackBar.Dialog.Download.Upgrade.Message1=The Tracker upgrade installer will be downloaded to TTrackBar.Dialog.Download.Upgrade.Message2=Tracker will then launch the installer and close. TTrackBar.Dialog.LinuxCommand.Message1=The upgrade installer must be run as root. Use the following command TTrackBar.Dialog.LinuxCommand.Message2=by selecting the text and typing Ctrl-C, then pasting into the Terminal. TTrackBar.Dialog.LinuxCommand.Message3=Click OK to close Tracker after pasting. # Additions by Doug Brown 2018-01-18 TTrackBar.Dialog.LinuxCommand.Title=Run Command TTrackBar.Chooser.DownloadDirectory=Download Upgrade Installer To: TTrackBar.Popup.MenuItem.TrackerHomePage=Open Tracker Home PrefsDialog.JREDropdown.LatestJRE=default (latest) TToolBar.Button.Drawings.Tooltip=Show or hide the Drawing Control TToolBar.MenuItem.DrawingsVisible.Text=Drawings Visible PencilControlDialog.Title=Drawing Control PencilControlDialog.Button.NewScene.Text=New PencilControlDialog.Button.DeleteScene.Text=Delete PencilControlDialog.Label.Caption.Text=Label PencilControlDialog.Label.Drawing.Text=Drawing PencilControlDialog.Label.Frames.Text=Frames PencilControlDialog.Label.To.Text=to PencilControlDialog.Checkbox.Heavy.Text=Heavy PencilControlDialog.Button.ClearAll.Text=Clear All PencilControlDialog.Button.NewScene.Tooltip=Create a new drawing PencilControlDialog.Button.DeleteScene.Tooltip=Delete the current drawing PencilControlDialog.Checkbox.Heavy.Tooltip=Use heavy lines and bold fonts PencilControlDialog.Button.ClearAll.Tooltip=Clear all drawings PencilControlDialog.Button.Color.Tooltip=Select the line and label color PencilControlDialog.Field.Caption.Tooltip=Edit the label text PencilControlDialog.Dropdown.Drawing.Tooltip=Select the active drawing PencilControlDialog.Spinner.FontSize.Tooltip=Set the label font size PencilControlDialog.Spinner.FrameRange.Tooltip=Set the frame range over which the drawing is visible PencilControlDialog.DrawingEdit.Undo.Text=Erase the line PencilControlDialog.DrawingEdit.Redo.Text=Restore the erased line PencilControlDialog.CaptionEdit.Undo.Text=Undo the label text edit PencilControlDialog.CaptionEdit.Redo.Text=Redo the label text edit PencilControlDialog.DeletionEdit.Undo.Text=Restore the deleted drawing PencilControlDialog.DeletionEdit.Redo.Text=Re-delete the drawing PencilControlDialog.ClearEdit.Undo.Text=Restore the cleared drawings PencilControlDialog.ClearEdit.Redo.Text=Re-clear the drawings PencilDrawer.Cursor.Description=pencil PencilDrawer.Hint=drag mouse to draw pencil lines, drag label to move PencilCaption.Hint=drag label to move PencilScene.Description.Default=No Label \ No newline at end of file +# This is the Malaysian tracker.properties file +# Translations 2015 by Shahrul Kadri Ayop (UPSI) & Nik Syaharudin Nik Daud (KPM) + +Calibration.Name=Titik Penentukuran +Calibration.New.Name=titik penentukuran +CenterOfMass.Name=Pusat Jisim +CenterOfMass.New.Name=cm +CenterOfMass.MenuItem.Inspector=Pilih Jisim... +CenterOfMassInspector.Title=Pusat Jisim +CenterOfMassInspector.Border.Title=Pilih Jisim +ConfigInspector.Border.Title=Ciri Dikehendaki +ConfigInspector.Title=Keutamaan +ConfigInspector.Button.SaveAsDefault=Simpan Sebagai Lalai +CoordAxes.Name=Paksi +CoordAxes.New.Name=paksi +Dialog.Button.Cancel=Batal +Dialog.Button.OK=OK +Dialog.Button.Close=Tutup +Dialog.Button.All=Semua +Dialog.Button.None=Tiada +Dialog.Button.Copy=Salin +Dialog.Button.Update=Kemas kini +Dialog.Button.SelectAll=Pilih Semua +Footprint.Diamond=intan +Footprint.BoldDiamond=intan tebal +Footprint.SolidDiamond=intan padu +Footprint.Triangle=segi tiga +Footprint.BoldTriangle=segi tiga tebal +Footprint.SolidTriangle=segi tiga padu +Footprint.Circle=bulatan +Footprint.BoldCircle=bulatan tebal +Footprint.SolidCircle=bulatan padu +Footprint.VerticalLine=garis tegak +Footprint.BoldVerticalLine=garis tegak tebal +Footprint.HorizontalLine=garis ufuk +Footprint.BoldHorizontalLine=garis ufuk tebal +Footprint.Crosshair=rerambut silang +Footprint.BoldCrosshair=rerambut silang tebal +Footprint.SimpleAxes=paksi mudah +Footprint.BoldSimpleAxes=paksi mudah tebal +Footprint.Spot=titik +Footprint.Line=garis +Footprint.BoldLine=garis tebal +Footprint.Outline=rangka +Footprint.BoldOutline=rangka tebal +Footprint.Arrow=anak panah +Footprint.BoldArrow=anak panah tebal +Footprint.DoubleArrow=anak panah berganda +Footprint.BoldDoubleArrow=anak panah berganda tebal +Footprint.2xArrow=anak panah 2x +Footprint.Bold2xArrow=anak panah tebal 2x +Footprint.4xArrow=anak panah 4x +Footprint.Bold4xArrow=anak panah tebal 4x +Footprint.DashArrow=anak panah putus-putus +Footprint.BoldDashArrow=anak panah putus-putus tebal +Footprint.BigArrow=anak panah besar +Footprint.BigDashArrow=anak panah besar putus-putus +LineProfile.Name=Profil Garis +LineProfile.New.Name=profil +LineProfile.Data.Brightness=kecerahan +LineProfile.Data.Pixel=piksel +LineProfile.Data.Red=merah +LineProfile.Data.Green=hijau +LineProfile.Data.Blue=biru +LineProfile.Data.Weighting=kiraan +MainTView.Popup.MenuItem.QTPlayer=Pemain QuickTime +MainTView.Popup.MenuItem.Zoom=Zum +MainTView.Popup.MenuItem.ToFit=Untuk Padanan +OffsetOrigin.Name=Asalan Ofset +OffsetOrigin.New.Name=asalan ofset +PlotTrackView.Button.PlotCount=Plot +PlotTrackView.Button.PlotCount.ToolTip=Set kiraan plot +PointMass.Name=Titik Jisim +PointMass.New.Name=jisim +PointMass.MenuItem.VectorsToPosition=Ke Kedudukan +PointMass.MenuItem.Velocity=Halaju +PointMass.MenuItem.Acceleration=Pecutan +Star.Name=Bintang +Star.New.Name=bintang +TableTrackView.Action.CopyData=Salin Data +TableTrackView.Button.SelectTableData=Jadual +TableTrackView.Button.SelectTableData.ToolTip=Pilih lajur jadual +TableTrackView.Popup.MenuItem.Analyze=Analisis... +TableTrackView.Dialog.Border.Title=Tampak: +TActions.Action.Description=Nota +TActions.Action.ClearTracks=Semua Trek +TActions.Action.NewTab=Tab Baharu +TActions.Action.Copy=Salin +TActions.Action.Paste=Tampal +TActions.Action.Open=Buka Fail... +TActions.Action.Close=Tutup Tab +TActions.Action.Import=Import... +TActions.Action.Save=Simpan Tab +TActions.Action.SaveAs=Simpan Tab Sebagai... +TActions.Action.Export=Export... +TActions.Action.CaptureVideo=Ambil Video... +TActions.Action.Delete=Buang +TActions.Action.Config=Keutamaan... +TActions.Action.AxesVisible=Tampak +TActions.Action.TapeVisible=Tampak +TActions.Action.Print=Cetak... +TActions.Action.ClearFilters=Bersih +TActions.Action.ImportVideo=Import... +TActions.Action.CloseVideo=Tutup +TActions.Action.CloseAll=Tutup Semua Tab +TActions.Action.Exit=Keluar +TActions.Dialog.PrintError.Message=Ralat cetakan berlaku. +TActions.Dialog.PrintError.Title=Ralat Cetakan +TActions.Dialog.Description.Title=Nota: +TActions.Dialog.DeleteLockedTracks.Message=Sebahagian trek berkunci. Buang sahaja? +TActions.Dialog.DeleteLockedTracks.Title=Buang trek Berkunci? +TActions.Dialog.NewPointMass.Title=Titik Jisim Baharu +TapeMeasure.Name=Pita Ukur +TapeMeasure.New.Name=pita +TapeMeasure.MenuItem.Fixed=Tetap +TFrame.View.Plot=Pandangan Plot +TFrame.View.Table=Pandangan Jadual +TFrame.View.World=Pandangan Dunia +TFrame.View.Video=Pandangan Video +TFrame.Dialog.Help.Title=Bantuan Tracker +TMenuBar.Menu.File=Fail +TMenuBar.Menu.Edit=Sunting +TMenuBar.Menu.Video=Video +TMenuBar.Menu.Tracks=Trek +TMenuBar.Menu.Coords=Sistem Koordinat +TMenuBar.Menu.Window=Pandangan +TMenuBar.Menu.Help=Bantuan +TMenuBar.MenuItem.EditProperties=Sifat... +TMenuBar.MenuItem.VideoVisible=Tampak +TMenuBar.MenuItem.VideoFilters=Penapis +TMenuBar.MenuItem.NewVideoFilter=Baharu +TMenuBar.MenuItem.NewTrack=Baharu +TMenuBar.MenuItem.CoordsLocked=Berkunci +TMenuBar.MenuItem.CoordsFixedOrigin=Asalan Tetap +TMenuBar.MenuItem.CoordsFixedAngle=Sudut Tetap +TMenuBar.MenuItem.CoordsFixedScale=Skala Tetap +TMenuBar.MenuItem.CoordsRefFrame=Bingkai Rujukan +TMenuBar.MenuItem.CoordsDefault=Lalai +TMenuBar.MenuItem.WindowRight=Pandangan Kanan +TMenuBar.MenuItem.WindowBottom=Pandangan Bawah +TMenuBar.MenuItem.PlayAllSteps=Main Semua Langkah +TMenuBar.MenuItem.Record=Rakam +TMenuBar.MenuItem.MatSize=Saiz Alas +TMenuBar.MenuItem.Language=Bahasa +TMenuBar.MenuItem.DeleteTrack=Buang +TMenuBar.MenuItem.TrackerHelp=Bantuan Tracker... +TMenuBar.MenuItem.MessageLog=Log Mesej... +TrackControl.Name=Pengawal trek +TrackControl.Button.NewTrack=Cipta +TrackControl.Button.NewTrack.ToolTip=Cipta trek baharu +TrackControl.Button.Trails.ToolTip=Set panjang trek +TrackControl.Button.Labels.ToolTip=Tunjuk atau sembunyi penomboran +TrackControl.Button.StretchVectors.ToolTip=Vektor regang +TrackControl.Button.Accelerations.ToolTip=Tunjuk atau sembunyi vektor pecutan +TrackControl.Button.Xmass.ToolTip=Darab vektor dengan jisim +TrackControl.Button.Vectors.ToolTip=Vektor +TrackControl.Button.Velocities.ToolTip=Tunjuk atau sembunyi vektor halaju +TrackControl.Button.Properties.ToolTip=Klik untuk pilih +TrackControl.Button.Positions.ToolTip=Tunjuk atau sembunyi kedudukan +Tracker.Popup.MenuItem.Snapshot=Petikan... +Tracker.Popup.MenuItem.Help=Bantuan... +Tracker.Cursor.Crosshair.Description=Kursor rerambut silang +Tracker.Action.AboutTracker=Tentang Tracker... +Tracker.Dialog.AboutTracker.Title=Tentang Tracker +Tracker.Action.AboutJava=Tentang Java... +Tracker.Dialog.AboutJava.Title=Tentang Java +Tracker.Dialog.AboutJava.UnknownVersion=tak diketahui +Tracker.Dialog.AboutJava.Message=Versi Java +Tracker.Action.AboutQT=Tentang QuickTime... +Tracker.Dialog.AboutQT.Title=Tentang QuickTime +Tracker.Dialog.AboutQT.Message.QTVersion=Versi QuickTime +Tracker.Dialog.AboutQT.Message.QTJavaVersion=Versi QTJava +Tracker.Dialog.AboutQT.Message.QTJavaPath=Laluan QTJava: +Tracker.Dialog.NoQT.Title=QTJava.zip tidak ditemui +Tracker.Dialog.NoQT.Message1=QuickTime untuk Java tidak muncul untuk dipasang +Tracker.Dialog.NoQT.Message2=Jika anda ingin analisis wayang QuickTime, sila pasang semula QuickTime. +Tracker.Dialog.NoQT.Message3=NOTA: QuickTime untuk Java MESTI DIPILIH apabila memasang QuickTime. +Tracker.Dialog.UpdateQT.Title=Kemas kini QTJava.zip +Tracker.Dialog.UpdateQT.Message1=Versi baru QTJava.zip telah ditemui di +Tracker.Dialog.UpdateQT.Message2=Adakah anda ingin kemas kini fail yang sedia ada? +Tracker.Dialog.CopyQT.Title=Salin QTJava.zip +Tracker.Dialog.CopyQT.Message1=QuickTime telah terpasang, tetapi sebelum Tracker boleh gunakannya: +Tracker.Dialog.CopyQT.Message2=1. QTJava.zip mesti disalin dari +Tracker.Dialog.CopyQT.Message3=ke +Tracker.Dialog.CopyQT.Message4= 2. Tracker mesti dimulakan semula. +Tracker.Dialog.CopyQT.Message5=Adakah anda ingin salin QTJava.zip sekarang? +Tracker.Dialog.CopyFailed.Title=Salinan Gagal +Tracker.Dialog.CopyFailed.Message=QTJava.zip tidak dapat disalin. +Tracker.Dialog.CopiedTo.Title=Salinan Berjaya +Tracker.Dialog.CopiedTo.Message1=QTJava.zip telah berjaya disalin ke +Tracker.Dialog.CopiedTo.Message2=Tracker perlu dimulakan semula dan akan keluar sekarang. +Tracker.Splash.Loading=Pemuatan +TrackerIO.Dialog.Import.Title=Import Fail Tracker +TrackerIO.Dialog.Import.Message=Pilih butir untuk import +TrackerIO.Dialog.ImportVideo.Title=Import Video +TrackerIO.Dialog.Export.Title=Eksport +TrackerIO.Dialog.Export.Message=Pilih butir untuk eksport +TrackerIO.Dialog.ReplaceFile.Title=Ganti Fail Sedia Ada? +TrackerIO.Dialog.ReplaceFile.Message=telah wujud. Adakah anda ingin menggantikannya? +TrackerIO.Dialog.NotTrackerXML.Title=XML tak sepadan +TrackerIO.Dialog.NotTrackerXML.Message=mengandungi data xml untuk aplikasi berbeza. +TrackerIO.Dialog.BadVideo.MessageFile is not a recognized video type: Fail bukan jenis video yang dikenali: +TrackerIO.Dialog.BadVideo.Title=Fail Video Tidak Dikenali +TrackerPanel.NewTab.Name=Tak Bertajuk +TrackerPanel.DragToMark.Hint=Shift-seret untuk tanda +TrackerPanel.ClickToMark.Hint=Shift-klik untuk tanda +TrackerPanel.Dialog.LoadFailed.Title=Fail Tracker Tidak Sah +TrackerPanel.Dialog.LoadFailed.Message=Fail bukan fail Tracker yang sah: +TrackerPanel.Dialog.SaveChanges.Title=Simpan Perubahan +TrackerPanel.Dialog.SaveChanges.Message=Simpan perubahan ke +TrackPlottingPanel.Popup.MenuItem.Lines=Garis +TrackPlottingPanel.Popup.MenuItem.Points=Titik +TrackPlottingPanel.Popup.MenuItem.Scale=Skala... +TrackPlottingPanel.Popup.MenuItem.Print=Cetak... +TrackPlottingPanel.Popup.MenuItem.Measure=Skala untuk Muat +TrackPlottingPanel.Popup.MenuItem.Analyze=Analisis... +TrackPlottingPanel.Popup.MenuItem.ZoomIn=Zum masuk +TrackPlottingPanel.Popup.MenuItem.ZoomOut=Zum keluar +TrackPlottingPanel.Popup.MenuItem.ZoomToFit=Skala Automatik +TrackPlottingPanel.Popup.MenuItem.ZoomToBox=Zum Ke Kotak +TrackPlottingPanelInspector.Title=Skala +TrackPlottingPanelInspector.Label.Min=Min +TrackPlottingPanelInspector.Label.Max=Maks +TrackPlottingPanelInspector.Label.Auto=Auto +TToolBar.Button.Footprint.Tooltip=Set trek +TToolBar.Dropdown.SelectedTrack.Tooltip=Pilih Trek +TToolBar.Dropdown.SelectedTrack.None=Tiada +TTrack.MenuItem.Delete=Buang +TTrack.MenuItem.Color=Warna... +TTrack.Dialog.Color.Title=Pilih Warna Trek +TTrack.MenuItem.Name=Nama... +TTrack.MenuItem.Footprint=Trek +TTrack.MenuItem.Description=Nota... +TTrack.MenuItem.Visible=Tampak +TTrack.MenuItem.TrailVisible=Trek Tampak +TTrack.MenuItem.Autostep=Autolangkah +TTrack.MenuItem.MarkByDefault=Tanda dengan Lalai +TTrack.MenuItem.Locked=Berkunci +TTrack.MenuItem.Delete=Buang +TTrack.Name.None=tiada nama +TTrack.Dialog.Description.Title=Nota: +TTrack.Dialog.Name.Title=Set Nama +TTrack.Dialog.Name.Label=Nama: +TViewChooser.Button.Choose.Tooltip=Pilih pandangan +Vector.Name=Vektor +Vector.New.Name=vektor +Vector.MenuItem.ToOrigin=Ke Asalan +Vector.MenuItem.Label=Label Tampak +VectorSum.Name=Hasil Tambah Vektor +VectorSum.New.Name=hasil tambah +VectorSum.MenuItem.Inspector=Pilih Vektor... +VectorSumInspector.Title=Hasil Tambah Vektor +VectorSumInspector.Border.Title=ilih Vektor +WorldTView.Popup.MenuItem.Projectile=Model Peluncur + +# Additions by Doug Brown 2006-11-01 +AnalyticParticle.Name=Model Zarah Kinematik +AnalyticParticle.Inspector.Title=Model Zarah Kinematik +AnalyticParticle.Property.FunctionX=x +AnalyticParticle.Property.FunctionY=y +CircleFootprint.Circle_4=jejari 4 +CircleFootprint.Circle_6=jejari 6 +CircleFootprint.Circle_8=jejari 8 +DynamicParticle.Name=Model Zarah Dinamik (Cartes) +DynamicParticle.Inspector.Title=odel Zarah Dinamik +DynamicParticle.Property.ForceX=daya x +DynamicParticle.Property.ForceY=daya y +DynamicParticle.Property.InitialX=x +DynamicParticle.Property.InitialY=y +DynamicParticle.Property.InitialVelocityX=vx +DynamicParticle.Property.InitialVelocityY=vy +LineProfile.MenuItem.Fixed=Kedudukan Tetap +ParticleModel.New.Name=model +ParticleModel.MenuItem.InspectModel=Pembinaan Model... +ParticleModel.Inspector.Button.Undo=Buat Asal +ParticleModel.Inspector.Button.Redo=Buat Semula +ParticleModel.Inspector.Button.Close=Tutup +ParticleModel.Inspector.Button.Help=Bantuan + +# Additions by Doug Brown 2006-12-29 +Calibration.Axes.XOnly=Hanya X +Calibration.Axes.YOnly=Hanya Y +Calibration.Axes.XY=XY +Calibration.Spinner.Axes.Tooltip=Pilih paksi penentukuran +Calibration.Label.Axes=paksi +Calibration.Dialog.InvalidCoordinates.Title=Koordinat Tak Sah +Calibration.Dialog.InvalidCoordinates.Message=Titik tidak boleh mempunyai koordinat dunia yang sama. +Calibration.Dialog.InvalidXCoordinates.Message=Titik tidak boleh mempunyai koordinat-x dunia yang sama. +Calibration.Dialog.InvalidYCoordinates.Message=Titik tidak boleh mempunyai koordinat-y dunia yang sama. +SpectralLineFilter.Title=Spektrum Gas +SpectralLineFilter.H=Hidrogen +SpectralLineFilter.He=Helium +SpectralLineFilter.Ne=Neon +SpectralLineFilter.Hg=Merkuri +TFrame.View.Unknown=Pandangan +TMenuBar.MenuItem.Undo=Buat Asal +TMenuBar.MenuItem.Redo=Buat Semula +TMenuBar.MenuItem.Replace=Ganti... +TMenuBar.Menu.AddImage=Import Imej +TMenuBar.MenuItem.AddBefore=Sebelum Bingkai Ini... +TMenuBar.MenuItem.AddAfter=Selepas Bingkai Ini... +TMenuBar.MenuItem.RemoveImage=Singkir Bingkai Ini... +TMenuBar.Menu.Tools=Alat +TMenuBar.MenuItem.DataFunctionTool=Pembina Data +TMenuBar.MenuItem.DatasetTool=Alat Data +TMenuBar.Menu.CopyImage=Salin Imej +TMenuBar.MenuItem.CopyMainView=Pandangan Utama +TMenuBar.MenuItem.CopyFrame=Bingkai +TMenuBar.MenuItem.PrintFrame=Cetak... +TrackerIO.Dialog.AddImage.Title=Import Imej (pilih satu atau lebih) +TTrack.Dialog.Name.BadName=sedang digunakan. Sila pilih nama lain. +VectorStep.Label.Momentum=p +VectorStep.Label.Velocity=v +VectorStep.Label.NetForce=daya bersih +VectorStep.Label.Acceleration=a + +# Additions by Doug Brown 2007-02-19 +PlotTView.Label.NoData=Pandangan plot data trek akan terpapar di sini. +TableTView.Label.NoData=Pandangan jadual data trek akan terpapar di sini. +TrackerPanel.Message.NoData0=Pandangan utama video dan trek akan terpapar di sini. +TrackerPanel.Message.NoData1=Pilih Fail|Buka atau Trek|Baharu untuk mula. +WorldTView.Label.NoData=Pandangan dunia video dan trek akan terpapar di sini. + +# Additions by Doug Brown 2007-03-03 +DynamicParticle.Label.Solver=Penyelesai: +DynamicParticle.Solver.Euler=Euler +DynamicParticle.Solver.Verlet=Verlet +DynamicParticle.Solver.RK4=Runge-Kutta +DynamicParticle.Solver.ODEMultistep=Multilangkah Mudah Suai +DynamicParticle.Table.Force.Border.Title=Fungsi Daya (t, x, y, vx, vy) +AnalyticParticle.Table.Functions.Border.Title=Fungsi Kedudukan (t) +ParticleModel.Table.Initial.Border.Title=Nilai Awal +ParticleModel.Property.InitialT=t + +# Additions by Doug Brown 2007-04-25 +TMenuBar.MenuItem.PasteImage=Tampal Imej +TMenuBar.MenuItem.PasteAfter=Selepas Bingkai Ini +TMenuBar.MenuItem.PasteBefore=Sebelum Bingkai Ini +TMenuBar.MenuItem.PasteReplace=Ganti Video + +# Additions by Doug Brown 2007-07-01 +TMenuBar.MenuItem.GettingStarted=Panduan Mula... +Tracker.Splash.HelpMessage=Pengguna baharu? Lihat + +# Additions by Doug Brown 2007-08-12 +CoordAxes.Label.Angle=sudut dari ufuk +LineProfile.Checkbox.Rotates=putar +LineProfile.Label.Spread=sebar +RGBRegion.Name=Rantau MHB +RGBRegion.New.Name=rantau +RGBRegion.MenuItem.Fixed=Posisi Tetap +RGBRegion.Label.Radius=jejari piksel +TTrack.Label.Step=langkah + +# Additions by Doug Brown 2007-10-24 +LineProfile.Data.Description.0=nombor kedudukan +LineProfile.Data.Description.1=kedudukan komponen-x +LineProfile.Data.Description.2=kedudukan komponen-y +LineProfile.Data.Description.3=merah +LineProfile.Data.Description.4=hijau +LineProfile.Data.Description.5=biru +LineProfile.Data.Description.6=kecerahan diamati +LineProfile.Data.Description.7=lebar garis +ParticleModel.MenuItem.TraceVisible=Surih Tampak +ParticleModel.MenuItem.StepsVisible=Langkah Tampak +PointMass.Data.Description.0=masa +PointMass.Data.Description.1=kedudukan komponen-x +PointMass.Data.Description.2=kedudukan komponen-y +PointMass.Data.Description.3=kedudukan magnitud +PointMass.Data.Description.4=kedudukan sudut +PointMass.Data.Description.5=halaju komponen-x +PointMass.Data.Description.6=halaju komponen-y +PointMass.Data.Description.7=halaju magnitud +PointMass.Data.Description.8=halaju sudut +PointMass.Data.Description.9=pecutan komponen-x +PointMass.Data.Description.10=pecutan komponen-y +PointMass.Data.Description.11=pecutan magnitud +PointMass.Data.Description.12=pecutan sudut +PointMass.Data.Description.13=sudut putaran +PointMass.Data.Description.14=halaju sudut +PointMass.Data.Description.15=pecutan sudut +PointMass.Data.Description.16=nombor langakh +PointMass.Data.Description.17=nombor bingkai +PointMass.Data.Description.18=momentum komponen-x +PointMass.Data.Description.19=momentum komponen-y +PointMass.Data.Description.20=momentum magnitud +PointMass.Data.Description.21=momentum sudut +PointMass.Data.Description.22=tenaga kinetik +RGBRegion.Data.Description.0=masa +RGBRegion.Data.Description.1=kedudukan komponen-x +RGBRegion.Data.Description.2=kedudukan komponen-y +RGBRegion.Data.Description.3=merah +RGBRegion.Data.Description.4=hijau +RGBRegion.Data.Description.5=biru +RGBRegion.Data.Description.6=pamatan kecerahan diamati +RGBRegion.Data.Description.7=kiraan piksel +RGBRegion.Data.Description.8=nombor langkah +RGBRegion.Data.Description.9=nombor bingkai +TView.Menuitem.Define=Takrif... +Vector.Data.Description.0=masa +Vector.Data.Description.1=komponen-x +Vector.Data.Description.2=komponen-y +Vector.Data.Description.3=magnitud +Vector.Data.Description.4=sudut +Vector.Data.Description.5=kedudukan ekor komponen-x +Vector.Data.Description.6=kedudukan ekor komponen-y +Vector.Data.Description.7=nombor langkah +Vector.Data.Description.8=nombor bingkai + +# Additions by Doug Brown 2008-01-02 +ParticleModel.Parameter.Mass.Description=Jisim zarah ini +ParticleModel.Parameter.InitialTime.Description=Masa awal +AnalyticParticle.PositionFunction.X.Description=Kedudukan komponen-x +AnalyticParticle.PositionFunction.Y.Description=Kedudukan komponen-y +DynamicParticle.ForceFunction.X.Description=Daya komponen-x +DynamicParticle.ForceFunction.Y.Description=Daya komponen-y +DynamicParticle.Parameter.InitialX.Description=Kedudukan awal komponen-x +DynamicParticle.Parameter.InitialY.Description=Kedudukan awal komponen-y +DynamicParticle.Parameter.InitialVelocityX.Description=Halaju awal komponen-x +DynamicParticle.Parameter.InitialVelocityY.Description=Halaju awal komponen-y +TrackerPanel.ModelBuilder.Title=Pembina Model +TrackerPanel.DataBuilder.Title=Pembina Data +TrackControl.TrailMenu.NoTrail=Tiada Trek. +TrackControl.TrailMenu.ShortTrail=Trek pendek +TrackControl.TrailMenu.LongTrail=Trek panjang +TrackControl.TrailMenu.FullTrail=Semua langkah +TrackerPanel.ModelBuilder.Spinner.Tooltip=Model yang sedang dipilih +TrackerPanel.ModelBuilder.LineButton.Text=Gaya Garis +TrackerPanel.ModelBuilder.LineButton.Tooltip=Set gaya garis +ParticleModel.LineStyle.None=Tiada garis +ParticleModel.LineStyle.Connect=Sambung langkah +ParticleModel.LineStyle.Smooth=Garis licin +ModelFunctionPanel.Label=Model +AnalyticFunctionPanel.FunctionEditor.Border.Title=Fungsi Kedudukan +DynamicFunctionPanel.FunctionEditor.Border.Title=Fungsi Daya + +# Additions by Doug Brown 2008-11-14 +TableTView.Dialog.TableColumns.Title=Lajur Jadual Tampak +Tracker.About.ProjectOf=Projek: +Tracker.About.TranslationBy=Terjemahan oleh +Tracker.About.Translator=Shahrul Kadri Ayop (UPSI)\n& Nik Syaharudin Nik Daud (KPM) +TMenuBar.Menu.SaveVideoAs=Simpan Klip Sebagai +TActions.SaveClipAs.ProgressMonitor.Message=Simpan klip sebagai +TActions.SaveClipAs.ProgressMonitor.Progress=Lengkap + +# Additions by Doug Brown 2008-12-07 +PlotTrackView.Checkbox.Synchronize=Segerak +PlotTrackView.Checkbox.Synchronize.Tooltip=Synchronize horizontal axes Segerakkan paksi ufuk +RGBRegion.MenuItem.FixedRadius=Jejari Tetap +Tracker.VideoZoom.Hint=klik untuk zum dekat atau jauh, klik berganda untuk zum muat +Tracker.PlotZoomIn.Hint=seret untuk zum dekat, klik berganda untuk autoskala +Tracker.PlotZoomOut.Hint=klik untuk zum jauh +Tracker.MenuItem.Hints=Tunjuk Petua +TapeMeasure.Label.Length=panjang +TapeMeasure.Label.TapeAngle=sudut dari paksi-x +TapeMeasure.Label.ArcAngle=sudut jangka sudut +TrackerIO.Dialog.NotAnImage.Title=Jenis Fail Salah +TrackerIO.Dialog.NotAnImage.Message1=adalah bukan imej JPG atau GIF. +TrackerIO.Dialog.NotAnImage.Message2=Adakah anda ingin teruskan? +TToolBar.Button.Zoom.Tooltip=Set aras zum +TrackChooserTView.DropDown.Tooltip=Pilih trek +TapeMeasure.Field.TapeAngle.Tooltip=Sudut dari paksi-x positif ke pita +TapeMeasure.Field.Magnitude.Tooltip=Panjang dalam unit dunia berskala +TapeMeasure.Readout.Magnitude.Name=panjang +TapeMeasure.Readout.Magnitude.Hint=unit dunia +TapeMeasure.Readout.Angle.Name=bacaan sudut +TapeMeasure.Readout.Angle.Hint=sudut diukur dari paksi-x+ +TapeMeasure.End.Name=hujung +TapeMeasure.End.Hint=seret untuk ukur jarak dan sudut, shift-klik untuk tanda semula +TapeMeasure.Handle.Name=pemegang +TapeMeasure.Handle.Hint=seret untuk alih +Vector.Tip.Name=petua +Vector.Tip.Hint=klik untuk pilih, seret untuk alih +Vector.Handle.Name=pemegang +Vector.Handle.Hint=klik untuk pilih, seret untuk alih +Vector.ShortHandle.Hint=klik untuk pilih, seret untuk alih, alt-klik untuk pilih petua +PointMass.Position.Name=kedudukan +PointMass.Position.Hint=seret untuk alih +PointMass.Velocity.Name=halaju +PointMass.Acceleration.Name=pecutan +PointMass.Vector.Hint=klik untuk pilih, seret untuk alih +PointMass.Position.Locked.Hint=klik untuk pilih--tidak boleh diseret +CoordAxes.Handle.Name=paksi +x +CoordAxes.Handle.Hint=seret untuk ubah condong +CoordAxes.Origin.Name=asalan +CoordAxes.Origin.Hint=seret untuk ubah kedudukan +OffsetOrigin.Position.Name=kedudukan +OffsetOrigin.Position.Hint=seret atau masukkan koordinat untuk alihkan asalan +Calibration.Point.Name=titik +Calibration.Point.Hint=seret atau masukkan koordinat untuk ubah paksi dan skala +RGBRegion.Position.Name=kedudukan +RGBRegion.Position.Hint=seret atau masukkan koordinat untuk ubah kedudukan +LineProfile.End.Name=akhir +LineProfile.End.Hint=seret untuk laras panjang garis +LineProfile.Handle.Name=pemegang +LineProfile.Handle.Hint=seret untuk alihkan garis +PointMass.Hint=set jisim pada bar alat +PointMass.Unmarked.Hint=, shift-klik untuk tanda +TTrack.Unselected.Hint=lik untuk pilih dan/atau set ciri +Vector.Unmarked.Hint=shift-seret untuk tanda +OffsetOrigin.Unmarked.Hint=hift-klik untuk tanda semula +Calibration.Unmarked.Hint=shift-klik untuk tanda titik pertama +Calibration.Halfmarked.Hint=shift-klik untuk tanda semula +CenterOfMass.Empty.Hint=pilih jisim untuk takrif sistem +VectorSum.Empty.Hint=pilih vector untuk takrif hasil tambah +TapeMeasure.Hint=seret hujung untuk tentukan jarak dan sudut +CoordAxes.Hint=set sudut untuk ubah condong +ParticleModel.Hint=set jisim pada bar alat, masukkan ungkapan dalam Pembina Model untuk hidupkannya +RGBRegion.Hint=masukan jejari untuk ubah saiz +RGBRegion.Unmarked.Hint=shift-klik untuk tanda kedudukan +TTrack.ImportVideo.Hint=import video atau imej untuk ukur MHB +TTrack.Selected.Hint=terpilih +LineProfile.Hint=masukkan sebaran untuk ubah lebar garis +LineProfile.Unmarked.Hint=shift-seret untuk lukis garis +LineProfile.Menu.Orientation=Orentasi +LineProfile.MenuItem.Horizontal=Ufuk +LineProfile.MenuItem.XAxis=Sepanjang Paksi-X +Footprint.PositionVector=vektor +Footprint.BoldPositionVector=vektor tebal +Tracker.Startup.Hint=lihat di sini untuk petua (atau pilih petua di menu Bantuan), tekan kekunci F1 pada bila-bila masa untuk bantuan +TrackerPanel.NoVideo.Hint=buka atau import video untuk analisis +TrackerPanel.CalibrateVideo.Hint=tentu ukur video menggunakan alat penentukuran +TrackerPanel.NoTracks.Hint=cipta trek baru untuk ukur ciri yang dikehendaki +TrackerPanel.SetClip.Hint=set atau semak tetapan klip video +TrackerPanel.ShowAxes.Hint=set asalan dan sudut paksi koordinat +VideoPlayer.Step.Hint=langkah ke depan (pintas: kekunci PageDown) +VideoPlayer.Back.Hint=langkah ke belakang (pintas: kekunci PageUp) +TrackerPanel.DVVideo.Hint=guna penapis saiz semula untuk betulkan herotan dalam video format-DV +TrackerIO.DataFileFilter.Description=Fail Tracker(.trk) +Tracker.Button.PDFHelp=Versi Boleh Cetak PDF +TToolbar.Button.TapeVisible.Tooltip=Tunjuk, sembunyi atau cipta alat penentukuran + +# Additions by Doug Brown 2009-03-06 +TMenuBar.MenuItem.TrackControl=Pengawal Trek +TMenuBar.MenuItem.Description=Nota +TrackPlottingPanel.RightDrag.Hint=seret-kanan untuk pilihan +TMenuBar.MenuItem.DeleteSelectedPoint=Langkah Terpilih +TFrame.InfoDialog.SaveChanges.Title=Simpan Perubahan +TFrame.InfoDialog.SaveChanges.Message=Adakah anda ingin menyimpan perubahan? + +# Additions by Doug Brown 2009-04-27 +DynamicParticle.Editor.Button.Cartesian=Cartes +DynamicParticle.Editor.Button.Polar=Kutub +DynamicParticle.Parameter.InitialR.Description=Jejari awal +DynamicParticle.Parameter.InitialTheta.Description=Sudut awal +DynamicParticle.Parameter.InitialVelocityR.Description=Halaju jejarian awal +DynamicParticle.Parameter.InitialOmega.Description=Halaju sudut awal +DynamicParticle.ForceFunction.R.Description=Daya komponen jejarian +DynamicParticle.ForceFunction.Theta.Description=Daya komponen tangen +DynamicParticlePolar.Name=Model Zarah Dinamik (Kutub) +TMenuBar.Menu.DynamicParticle=Model Zarah Dinamik +TMenuBar.MenuItem.Cartesian=Cartes +TMenuBar.MenuItem.Polar=Kutub + +# Additions by Doug Brown 2009-08-24 +PointMass.MenuItem.Autotrack=Autotrekâ€Ĥ +Dialog.Button.Help=Bantuan +AutoTracker.Wizard.Button.Reset=Set Semula +AutoTracker.Wizard.Button.Back=Undur +AutoTracker.Wizard.Button.Next=Maju +AutoTracker.Wizard.Button.Accept=Terima +AutoTracker.Wizard.Button.Search=Carian +AutoTracker.Wizard.Button.Pause=Jeda +AutoTracker.Wizard.Button.Skip=Langkau +AutoTracker.Label.Mask=Templat +AutoTracker.Label.AcceptLevel=Ambang +AutoTracker.TabbedPane.TabTitle.Mask=Templat +AutoTracker.TabbedPane.TabTitle.Target=Sasaran +AutoTracker.TabbedPane.TabTitle.Settings=Terima +AutoTracker.TabbedPane.TabTitle.Search=Carian +AutoTracker.Info.GetStarted=Untuk cipta bingkai kekunci baharu, shift-control-klik ciri video yang dikehendaki. +AutoTracker.Info.Mask1=Templat mentakrifkan imej yang hendak dipadankan dalam setiap bingkai video. +AutoTracker.Info.Mask2=Ia berevolusi untuk disesuaikan dengan bentuk dan perubahan warna dari masa ke masa. Kadar evolusi tinggi mengesan perubahan yang lebih cepat, tetapi kurang tepat dalam jangka masa panjang. +AutoTracker.Info.MaskLocked1=Templat ini sedang digunakan dan berkunci. +AutoTracker.Info.MaskLocked2=Klik butang Set Semula untuk bersihkankan semua langkah dan mula dari awal. +AutoTracker.Info.Target1=Sasaran ditanda secara automatik untuk skor padanan melebihi aras autotanda. +AutoTracker.Info.Target2=Petua: Anda boleh laras kedudukan sasaran walaupun selepas langkah telah ditanda. Langkah sedia ada akan beralih secara automatik bersama-sama dengan sasaran. +AutoTracker.Info.TargetLocked=Sasaran sedang digunakan dan terikat kepada kedudukan langkah sedia ada. Mengalihkan sasaran akan menyebabkan langkah juga beralih. +AutoTracker.Info.Settings1=Skor padanan melebihi aras autotanda akan ditanda secara automatik. +AutoTracker.Info.Settings2=Petua: mengurangkan aras autotanda berkemungkinan meningkatkan penandaan padanan salah. Sebaliknya cuba tingkatkan kadar evolusi. +AutoTracker.Info.Search1=Rantau carian diimbas untuk mendapatkan padanan terbaik. Alih atau ubah saiz rantau carian dengan menyeret tepi atau pemegangnya. +AutoTracker.Info.Search2=Petua: Rantau carian tidak semestinya besar dalam banyak kes. Pilihan lihat-ke-depan mengalihkan rantau carian secara automatik ke kedudukan padanan yang diramalkan. +AutoTracker.Info.Frame=Bingkai +AutoTracker.Info.Match=Padanan telah ditanda secara automatik. +AutoTracker.Info.Possible=Satu padanan mungkin ditemui dalam kawasan carian ditunjukkan. Pilihan anda adalah: +AutoTracker.Info.NoMatch=Tiada padanan ditemui di kawasan carian ditunjukkan. Pilihan anda adalah: +AutoTracker.Info.Outside=Kawasan carian berada di luar imej. Pilihan anda adalah: +AutoTracker.Info.Accepted=Padanan diterima. +AutoTracker.Info.MarkedByUser=Langkah ditanda secara manual oleh pengguna. +AutoTracker.Info.NoVideo=Autotrek memerlukan video. +AutoTracker.Info.Height=tinggi +AutoTracker.Info.Width=lebar +AutoTracker.Info.Accept=--terima padanan +AutoTracker.Info.Retry=--ubah suai kawasan carian dan cari semula +AutoTracker.Info.Mark=--shift-klik untuk tandaan secara manual +AutoTracker.Info.Skip=--langkau bingkai ini dan teruskan dengan yang berikutnya +AutoTracker.Info.Reset=-- undur untuk bingkai yang ditanda dengan betul dan shift-control-klik untuk mentakrifkan bingkai kekunci baharu +AutoTracker.Info.MatchScore=skor padanan +AutoTracker.Dialog.MaskLocked.Title=Templat Berkunci +PointMass.Cursor.Autotrack.Description=Kursor autotrek +VideoPlayer.StartFrame.Hint=seret untuk menetapkan bingkai mula +VideoPlayer.EndFrame.Hint=seret untuk menetapkan bingkai akhir +VideoPlayer.Slider.Hint=seret untuk imbas video +FileDropHandler.Dialog.BadFile.Message=tidak dapat dimuatkan. +FileDropHandler.Dialog.BadFile.Title=Fail Tak Dikenali + +# Additions by Doug Brown 2009-10-27 +Dialog.Button.Apply=Guna +DynamicParticle.Dialog.Delete.Message=Membuang zarah ini akan mengeluarkannya dari sistem. Buang sahaja? +DynamicParticle.Dialog.Delete.Title=Sistem Dinamik +DynamicParticle.System.In=masuk +DynamicSystem.Empty=kosong +DynamicSystem.Force.Name.Internal=dalaman +DynamicSystem.ForceFunction.R.Description=Daya dalaman komponen jejarian +DynamicSystem.ForceFunction.Theta.Description=Daya dalaman komponen tangen +DynamicSystem.MenuItem.Inspector=Pilih Zarah... +DynamicSystem.Name=Dinamik Sistem Dua Jasad +DynamicSystem.New.Name=sistem +DynamicSystem.Parameter.Of=daripada +DynamicSystem.Parameter.RelativeTo=relatif terhadap +DynamicSystem.Parameter.Name.Relative=relatif +DynamicSystem.Parameter.ParticleMass.Description=Jisim +DynamicSystem.Parameter.Mass.Description=Jumlah jisim sistem ini +DynamicSystemInspector.Border.Title=Zarah +DynamicSystemInspector.Title=TSistem Dua Jasad +DynamicSystemInspector.Button.Change=Ubah Ke... +DynamicSystemInspector.ParticleName.None=(tiada) +TMenuBar.MenuItem.Clone=Klon +TMenuBar.MenuItem.TwoBody=Sistem Dua Jasad +TrackerPanel.DataBuilder.Dropdown.Tooltip=Trek yang sedang dipilih +TrackPlottingPanel.Popup.MenuItem.MergeYAxes=Segerakkan Paksi Tegak +TrackControl.Button.Trace.ToolTip=Tunjuk atau sembunyi laluan +TToolBar.Button.Open.Tooltip=Buka video atau fail tracker dalam tab baharu +TToolBar.Button.Save.Tooltip=Simpan tab semasa dalam fail +TToolBar.Button.SelectTrack=Pilih +TToolBar.Button.SelectTrack.Tooltip=Pilih trek sedia ada +TTrack.MenuItem.ClearSteps=Bersih Langkah +PointMass.MenuItem.Position=Kedudukan +TMenuBar.MenuItem.Empty=(Kosong) +TTrackBar.Button.Memory=memori digunakan: +TTrackBar.Button.Memory.Tooltip=Pantau dan urus memori +TTrackBar.Memory.PopupItem.Launch1=Lancar +TTrackBar.Memory.PopupItem.Launch2=dengan memori +TButton.Track.ToolTip=Set ciri-ciri bagi +Tracker.Dialog.OutOfMemory.Message1=Tracker telah kehabisan memori. +Tracker.Dialog.OutOfMemory.Message2=Klik butang memori untuk pilihan. +Tracker.Dialog.OutOfMemory.Title=Memori habis + +# Additions by Doug Brown 2010-12-27 +AutoTracker.Wizard.Checkbox.LookAhead=Lihat Ke Depan +AutoTracker.Label.Original=Bingkai Kekunci +AutoTracker.Label.NoMask=tiada +AutoTracker.Label.Rate=Kadar: +AutoTracker.Info.Mask3=Petua: templat tidak semestinya besar mahupun terkandung keseluruhan objek. Ciri yang unik dengan piggir berkontras tinggi biasanya memberikan hasil terbaik. +AutoTracker.Wizard.Checkbox.XAxis=Hanya paksi-X +AutoTracker.Info.SearchOnAxis1= Paksi-x di kawasan carian diimbas untuk padanan terbaik. Alih atau ubah saiz kawasan carian dengan menyeret pusat atau pemegangnya, +AutoTracker.Info.PossibleOnAxis=Satu padanan mungkin telah ditemui sepanjang paksi-x dalam kawasan carian yang ditunjukkan. Pilihan anda adalah: +AutoTracker.Info.NoMatchOnAxis=Tiada padanan ditemui sepanjang paksi-x dalam rantau carian yang ditunjukkan. Pilihan anda adalah: +AutoTracker.Info.RetryOnAxis=-—alih kawasan carian atau paksi-x dan carian semula +AutoTracker.Wizard.Button.Delete=Buang +AutoTracker.Wizard.Button.DeleteMoreDelete Later Points Buang Titik-titik Kemudian +Button.Define.Tooltip=Mentakrif fungsi pembolehubah lajur sedia ada +Calibration.Label.Point=titik +CalibrationStick.Hint=set panjang atau seret hujung untuk ubah skala, set sudut untuk ubah condong +CalibrationStick.End.Hint=seret untuk ubah skala, shift-klik untuk tanda semula +CalibrationStick.New.Name=kayu tentu ukur +CalibrationTapeMeasure.New.Name=pita tentu ukur +CalibrationTapeMeasure.Readout.Magnitude.Hint=klik untuk memasukkan panjang yang diketahui dalam unit dunia +CalibrationTapeMeasure.Hint=set panjang untuk ubah skala, set sudut untuk ubah condong +DynamicSystem.Data.Description.0=jarak relatif di antara zarah +DynamicSystem.Data.Description.1=sudut relatif +DynamicSystem.Data.Description.2=halaju jejarian relatif +DynamicSystem.Data.Description.3=halaju sudut relatif +ExportDataDialog.Subtitle.Table=Jadual Data +ExportDataDialog.Subtitle.Content=Sel +ExportDataDialog.Subtitle.Format=Format Nombor +ExportDataDialog.Subtitle.Delimiter=Pembatas +ExportDataDialog.Title=Eksport Data +ExportDataDialog.Delimiter.Add=Tambah... +ExportDataDialog.Delimiter.Remove=Singkir... +ExportDataDialog.Content.AllCells= Sel +ExportDataDialog.Content.SelectedCells=Sel terpilih +ExportDataDialog.MenuItem.RemoveDelimiter=Padam pembatas tersuai +ExportDataDialog.Chooser.SaveData.Title=Simpan Data Sebagai +ExportVideoDialog.Button.SaveAs=Simpan Sebagai... +ExportVideoDialog.Button.FullSize=Saiz penuh +ExportVideoDialog.Button.DrawnSize=Seperti yang terlukis +ExportVideoDialog.Content.VideoOnly=Video sahaja +ExportVideoDialog.Content.VideoAndGraphics=Video dan grafik +ExportVideoDialog.Content.GraphicsOnly=Grafik sahaja +ExportVideoDialog.Title=Eksport Klip video +ExportVideoDialog.Label.ClipSettings=Tetapan klip +ExportVideoDialog.Subtitle.Size=Saiz +ExportVideoDialog.Subtitle.Content=Kandungan +ExportVideoDialog.Subtitle.View=Pandangan +ExportVideoDialog.Subtitle.Format=Format +ExportVideoDialog.Complete.Message1=Video ini telah disimpan sebagai +ExportVideoDialog.Complete.Message2=Adakah anda ingin membukanya dalam Tracker sekarang? +ExportVideoDialog.Complete.Title=Eksport Selesai +ExportVideoDialog.VideoSize=saiz video +ExportVideoDialog.MatSize=saiz alas +ExportVideo.Dialog.HiddenPlots.Message=Plot mestilah tampak keseluruhannya untuk dieksport. +ExportVideo.Dialog.HiddenPlots.Title=Paparan Tak Lengkap +Footprint.DoubleTarget=rerambut silang berganda +Footprint.BoldDoubleTarget=rerambut silang tebal +OffsetOrigin.MenuItem.Fixed=Koordinat Dunia Tetap +ParticleModel.Dialog.Offscreen.Message1=Beberapa langkah model adalah kosong kerana terlalu jauh tersasar dari skrin. +ParticleModel.Dialog.Offscreen.Message2=Untuk membaikinya, ubah model atau skala semula video. +ParticleModel.Dialog.Offscreen.Title=Luar Sempadan +PrefsDialog.Tab.Configuration.Title=Konfigurasi +PrefsDialog.Memory.BorderTitle=Saiz Memori +PrefsDialog.Tab.General.Title=Umum +PrefsDialog.RecentFiles.BorderTitle=Buka Menu Terakhir +PrefsDialog.Label.RecentSize=Kiraan fail +PrefsDialog.Hints.BorderTitle=Panduan +PrefsDialog.Button.Relaunch=Lancar Semula Sekarang +PrefsDialog.Button.ClearRecent=Bersih +PrefsDialog.Checkbox.DefaultSize=Guna lalai +PrefsDialog.Checkbox.HintsOn=Tunjukkan panduan dengan lalai +PrefsDialog.Tab.Video.Title=Video +PrefsDialog.VideoPref.BorderTitle=Enjin Video +PrefsDialog.Button.FFMPeg=FFMPeg +PrefsDialog.Button.QT=QuickTime +PrefsDialog.Dialog.WebStart.Message=Pengurusan ingatan tak tersedia apabila menggunakan Web Start +PrefsDialog.Dialog.WebStart.Title=Mod Web Start +PrefsDialog.LookFeel.BorderTitle=Lihat dan Rasa +PrefsDialog.Language.BorderTitle=Language Bahasa +PrefsDialog.Upgrades.BorderTitle=Periksa Penaik Taraf +PrefsDialog.Tab.Runtime.Title=Runtime Waktu Jalan +PrefsDialog.Tab.Display.Title=Paparan +PrefsDialog.Language.Default=lalai +PrefsDialog.Upgrades.Always=Setiap hari +PrefsDialog.Upgrades.Weekly=Setiap minggu +PrefsDialog.Upgrades.Monthly=Setiap bulan +PrefsDialog.Upgrades.Never=Tak perlu +PrefsDialog.Button.CheckForUpgrade=Periksa Sekarang +PrefsDialog.FFMPeg.Speed.BorderTitle=Main Semula Video FFMPeg +PrefsDialog.FFMPeg.Slow=Licin (mungkin perlahan) +PrefsDialog.FFMPeg.Fast=Laju (mungkin tersekat-sekat) +PrefsDialog.CalibrationTool.BorderTitle=Tool Alat Tentu Ukur Lalai +Protractor.Name=Jangka Sudut +Protractor.New.Name=jangka sudut +Protractor.Hint=seret lengan untuk ukur sudut +Protractor.Label.Angle=sudut +Protractor.Field.Angle.Tooltip=Sudut di antara lengan jangka sudut +Protractor.Vertex.Name=bucu +Protractor.Vertex.Hint=seret untuk alih bucu +Protractor.End.Name=hujung lengan +Protractor.End.Hint=drag to rotate the arm seret untuk putar lengan +Protractor.Handle.Name=pemegang +Protractor.Handle.Hint=seret untuk alihkan jangka sudut +Protractor.Rotator.Name=pemutar +Protractor.Rotator.Hint=seret untuk putarkan jangka sudut +Protractor.Readout.Name=bacaan +Protractor.Readout.Hint=sudut di antara lengan jangka sudut +ProtractorFootprint.Circle3=bulatan kecil +ProtractorFootprint.Circle5=bulatan besar +ProtractorFootprint.Circle3Bold=bulatan kecil tebal +ProtractorFootprint.Circle5Bold=bulatan besar tebal +Stick.Name=Kayu Tentu Ukur +Stick.New.Name=kayu tentu ukur +TableTrackView.MenuItem.Unformatted=Kepersisan Penuh +TableTrackView.MenuItem.Formatted=Seperti yang Terformat +TableTrackView.Menu.SetDelimiter=Set Penghehad +TableTrackView.MenuItem.AddDelimiter=Tambah... +TableTrackView.MenuItem.RemoveDelimiter=Singkir... +TableTrackView.Dialog.CustomDelimiter.Message=Masukkan tetali pembatas baharu: +TableTrackView.Dialog.CustomDelimiter.Title=Tambah Pembatas +TableTrackView.Header.Tooltip=Klik untuk sisih atau klik-berganda untuk pilih lajur +TableTrackView.MenuItem.CopySelectedData=Salin Sel Terpilih +TableTrackView.Dialog.RemoveDelimiter.Message=Pilih pembatas untuk singkir: +TableTrackView.Dialog.RemoveDelimiter.Title=Singkkir Pembatas +TableTrackView.Radians.Tooltip=dalam radian +TableTrackView.Degrees.Tooltip=dalam darjah +TableTrackView.RadiansPerSecond.Tooltip=dalam radian/s +TableTrackView.DegreesPerSecond.Tooltip=dalam darjah/s +TableTrackView.RadiansPerSecondSquared.Tooltip=dalam radian/s^2 +TableTrackView.DegreesPerSecondSquared.Tooltip=dalam darjah/s^2 +TableTrackView.MenuItem.DeleteDataFunction=DBuang Fungsi Data +TActions.Action.SaveFrame=Simpan Tabset Sebagai... +TActions.AboutVideo=Sifat... +TActions.Dialog.AboutVideo.Title=Sifat Video +TActions.Dialog.AboutVideo.Type=Jenis +TActions.Dialog.AboutVideo.SizeDimensi +TActions.Dialog.AboutVideo.Length=Panjang +TActions.Dialog.AboutVideo.Frames=bingkai +TActions.Dialog.AboutVideo.Seconds=saat +TActions.Dialog.AboutVideo.FrameRate=Kadar Bingkai +TActions.Dialog.AboutVideo.FramesPerSecond=fps +TActions.Dialog.AboutVideo.Path=Laluan +TActions.Action.ImportTRK=Fail Trackerâ€Ĥ +TActions.Action.ProtractorVisible=Tampak +TapeMeasure.MenuItem.FixedLength=Panjang Tetap +TextTView.Label.NoTab=Klik “Halaman” untuk tambah teks dan halaman HTML di sini. +TextTView.NewTab.Text1=Klik-berganda untuk sunting teks atau judul. Klik-kanan untuk lebih pilihan. +TextTView.NewTab.Text2=Untuk papar halaman HTML, masukkan url atau klik-kanan untuk buka fail. +TextTView.NewTab.Title=Tak Bertajuk +TextTView.Dialog.TabTitle.Title=Set Judul +TextTView.MenuItem.OpenHTML=Buka HTML... +TextTView.MenuItem.SetTitle=Set Judul... +TextTView.Button.NewTab=Baharu +TextTView.TextEdit.Description=Teks +TFrame.Dialog.FileNotFound.Message=Fail tak dapat ditemui. +TFrame.Dialog.FileNotFound.Title=Fail Tak Ditemui. +TFrame.View.Text=Pandangan Halaman +TFrame.View.Main=Pandangan Utama +TMenuBar.Menu.OpenRecent=Buka Terakhir +TMenuBar.Menu.Import=Import +TMenuBar.Menu.Export=Eksport +TMenuBar.MenuItem.Video=Video... +TMenuBar.MenuItem.Data=Fail Data... +TMenuBar.Menu.CopyObject=Salin Objek +TMenuBar.MenuItem.Coords=Sistem Koordinat +TMenuBar.MenuItem.VideoClip=Klip video +TMenuBar.Menu.MeasuringTools=Alat Pengukuran +TMenuBar.Menu.AngleUnits=Unit Sudut +TMenuBar.MenuItem.Degrees=Darjah +TMenuBar.MenuItem.Radians=Radian +Tracker.Dialog.NoFFMPeg.Title=FFMPeg tak ditemui +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (enjin video rentas platform) tak terpasang. +Tracker.Dialog.NoFFMPeg.Message2=Muat turun FFMPeg daripada http://www.ffmpeg.org/download.html. +ZipResourceDialog.Checkbox.TrimVideo=Pangkas Klip +ZipResourceDialog.AddHTMLInfo.Title=Tambah HTML Ke Dalam Fail +ZipResourceDialog.AddHTMLInfo.Message1=Adakah anda ingin tambah HTML ke dalam fail +ZipResourceDialog.AddHTMLInfo.Message2=ke ZIP Tracker? +ZipResourceDialog.HTMLField.DefaultText=Jika tiada dikhususkan, fail kosong yang baharu akan dicipta. +ZipResourceDialog.Dialog.AddFiles.Title=Tambah Fail HTML dan PDF +ZipResourceDialog.Tooltip.HTML=Laluan ke fail sumber HTML (jika tiada, fail kosong yang baharu akan dibuat.) +ZipResourceDialog.Tooltip.Author=Pengarang bagi sumber ini. +ZipResourceDialog.Tooltip.Title=Papar nama sumber ini (bukan nama fail) +ZipResourceDialog.Tooltip.Description=Pernyataan berguna sumber ini +ZipResourceDialog.Tooltip.Keywords=Senarai kata kunci untuk carian dalam pelayar DL +ZipResourceDialog.Tooltip.Contact=Maklumat perhubungan pengarang (institusi, e-mel, laman web, dsb.) +ZipResourceDialog.Tooltip.Link=URL fail HTML luaran dengan maklumat lanjut tentang sumber ini +ZipResourceDialog.Tooltip.ThumbnailSettings=Ubah pandangan, saiz atau jenis fail lakaran +ZipResourceDialog.Tooltip.AddFiles=Tambah fail HTML dan PDF ke ZIP Tracker +ZipResourceDialog.Tooltip.TrimVideo=Semak untuk eksport klip video, biarkan untuk guna video asal +ZipResourceDialog.Tooltip.LoadHTML=Gunakan pemilih fail untuk muatkan HTML ke dalam fail + +# Additions by Doug Brown 2012-12-10 +PrefsDialog.Checkbox.32BitVM=32-bit +PrefsDialog.Checkbox.WarnVariableDuration=Jangka masa bingkai boleh ubah +PrefsDialog.Button.NoEngine=Tiada +PrefsDialog.Dialog.SwitchToQT.Message=Penukaran kepada QuickTime juga mengubah Java VM kepada 32-bit. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=Penukaran kepada FFMPeg juga mengubah Java VM kepada 32-bit. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=Penukaran kepada FFMPeg juga mengubah Java VM kepada 64-bit. +PrefsDialog.Dialog.SwitchVM.Title=Java VM Telah Berubah +PrefsDialog.Dialog.SwitchTo32.Message=Penukaran ke Java VM 32-bit juga mengubah enjin video ke QuickTime +PrefsDialog.Dialog.SwitchTo64.Message=Penukaran ke Java VM 64-bit juga mengubah enjin video ke FFMPeg +PrefsDialog.Dialog.SwitchEngine.Title=Enjin Video Telah Berubah +PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=Tiada enjin video tersedia untuk Java VM 64-bit. Anda +PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=masih boleh buka imej (JPEG, PNG) dan GIF beranimasi. +PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Adakah anda pasti ingin bertukar ke VM 64-bit? +PrefsDialog.Dialog.NoEngineIn64bitVM.Title=Tiada Enjin Video 64-bit. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=Java VM 32-bit mesti dipasang sebelum FFMPeg boleh digunakan. +PrefsDialog.Dialog.No32bitVMQT.Message=Java VM 32-bit mesti dipasang sebelum QuickTime boleh digunakan. +PrefsDialog.Dialog.No32bitVM.Message=Untuk maklumat lanjut, lihat Bantuan Tracker: Pemasangan +PrefsDialog.Dialog.No32bitVM.Title=VM 32-bit Diperlukan +PrefsDialog.Button.ShowHelpNow=Tunjuk Bantuan Sekarang +TActions.Dialog.AboutVideo.FramesPerSecond.NotConstant=BUKAN PEMALAR +TMenuBar.MenuItem.CheckFrameDurations=Jangka Masa Bingkai +TMenuBar.MenuItem.ExportZIP=Zip Tracker +Tracker.Dialog.Install32BitVM.Message=Anda mesti pasang Java VM 32-bit sebelum enjin video boleh digunakan. +Tracker.Dialog.SwitchTo32BitVM.Message1=Satu atau lebih enjin video sudah terpasang tetapi tak tersedia kerana ia +Tracker.Dialog.SwitchTo32BitVM.Message2=memerlukan Java VM 32-bit dan anda sedang menggunakan VM 64-bit. +Tracker.Dialog.SwitchTo32BitVM.Question=Adakah anda ingin melancar semula dengan VM 32-bit dan enjin lalai? +Tracker.Dialog.Button.RelaunchNow=Ya, lancar semula sekarang +Tracker.Dialog.Button.ShowPrefs=Tidak, tetapi tunjukkan keutamaan +Tracker.Dialog.Button.ContinueWithoutEngine=Tidak, teruskan tanpa video +Tracker.Dialog.EngineProblems.Message1=Satu atau lebih enjin video sudah terpasang namun tidak berfungsi. +Tracker.Dialog.EngineProblems.Message2=Untuk maklumat lanjut lihat Bantuan|Diagnostik|Tentang FFMPeg atau QuickTime. +Tracker.Dialog.ReplaceFFMPeg.Message1=Kami cadangkan anda gantikan enjin video FFMPeg anda sekarang +Tracker.Dialog.ReplaceFFMPeg.Message2=dengan FFMPeg versi 3.4 melalui pemasangan semula Tracker (versi 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=atau lebih tinggi) dan pilih FFMPeg dalam pilihan pemasangan. +TrackerIO.Dialog.DurationIsConstant.Message=Semua jangka masa bingkai adalah sama (fps tetap). +TrackerIO.ZIPResourceFilter.Description=Fail ZIP Tracker (.trz) +TToolbar.Button.Desktop.Tooltip=Paparan berkaitan dokumen HTML dan/atau PDF +ZipResourceDialog.BadModels.Message1=Klip video tidak mengandungi bingkai mula +ZipResourceDialog.BadModels.Message2=Modul Zarah berikut. Jika anda pangkas video +ZipResourceDialog.BadModels.Message3=model tersebut TIDAK akan termasuk dalam ZIP Tracker yang diimport. +ZipResourceDialog.BadModels.Question=dakah anda ingin teruskan atau abaikan model tersebut? +ZipResourceDialog.BadModels.Title=Konflik Klip-Model +TMenuBar.MenuItem.EditVideoFrames=Tambah/Singkir Bingkai +TMenuBar.Dialog.RequiresMemory.Message1=Semua imej mesti dimuatkan ke dalam ingatan untuk suntingan bingkai. Ini akan meningkatkan laju main semula. +TMenuBar.Dialog.RequiresMemory.Message2=Sila semak ingatan tersedia dan lancarkan semula dengan lebih ingatan jika diperlukan. +TMenuBar.Dialog.RequiresMemory.Title=Ingatan + +# Additions by Doug Brown 2013-01-25 +PointMass.Data.Description.PixelX=piksel komponen-x +PointMass.Data.Description.PixelY=piksel komponen-y +ExportVideoDialog.Content.DeinterlacedVideo=Video ternyahjalin +ExportVideoDialog.Deinterlace.OddFirst=Medan ganjil dahulu +ExportVideoDialog.Deinterlace.EvenFirst=Medan genap dahulu +ExportVideoDialog.Deinterlace.Dialog.Title=Tertib Medan Ternyahjalin +TFrame.Dialog.LibraryError.FileNotFound.Title=Fail Tak Ditemui +TFrame.Dialog.LibraryError.FileNotFound.Message=Tak boleh menjumpai fail +TrackerPanel.DataBuilder.Button.Autoload=Automuat +TrackerPanel.DataBuilder.Button.Autoload.Tooltip=Urus fungsi data terautomuat +TrackerPanel.DataBuilder.Autoload.Title=Automuat fungsi data +TrackerPanel.DataBuilder.Autoload.Message=Pilih fungsi untuk automuat: +TrackerPanel.DataBuilder.Chooser.XMLFiles=Fail XML +TrackerIO.Dialog.Open.Title=Buka +TToolbar.Button.Refresh.Popup.RefreshNow=Segar semula +TToolbar.Button.Refresh.Popup.AutoRefresh=Auto-refresh Autosegar semula +TToolbar.Button.Refresh.Tooltip=Segar semula data dan pandangan + +# Additions by Doug Brown 2013-05-10 +CoordAxes.Origin.Label=kedudukan piksel asalan +CoordAxes.Origin.Field.Tooltip=kedudukan asalan diukur dari pepenjuru kiri atas video + +# Additions by Doug Brown 2013-08-24 +MainTView.Popup.MenuItem.Select=Pilih Titik +MainTView.Popup.MenuItem.Deselect=Nyahpilih Titik +ZipResourceDialog.Checkbox.PreviewThumbnail=Pratonton +ZipResourceDialog.Dialog.BadFileName.Message=Nama fail tidak boleh mengandungi aksara berikut: +ZipResourceDialog.Dialog.BadFileName.Title=Nama Fail Yang Tak Dibenarkan +ZipResourceDialog.Dialog.ExportFailed.Message=Fail ZIP tak boleh dieksport. +ZipResourceDialog.Dialog.ExportFailed.Title=Eksport Gagal +PrefsDialog.Button.SetCache=Set Cache + +# Additions by Doug Brown 2013-12-17 +Tracker.StartLog=Log Mula +Tracker.StartLog.NotFound=Fail log mula tak ditemui +Tracker.Dialog.MemoryReduced.Title=Ingatan Yang Dikehendaki Dikurangkan +Tracker.Dialog.MemoryReduced.Message1=Tracker tak boleh dimulakan dengan ingatan +Tracker.Dialog.MemoryReduced.Message2=jadi ingatan yang dikehendaki telah dikurangkan ke +Tracker.Dialog.MemoryReduced.Message3=Untuk maklumat lanjut lihat Bantuan|Diagnostik|Log Mula... +TrackPlottingPanel.Popup.MenuItem.ShowZero=Tunjuk +TableTrackView.Menu.TextColumn.Text=Lajur Teks +TableTrackView.Menu.TextColumn.Tooltip=Urus lajur teks boleh sunting +TableTrackView.Action.CreateTextColumn.Text=Cipta... +TableTrackView.Action.DeleteTextColumn.Text=Buang +TableTrackView.Action.RenameTextColumn.Text=Nama Semula +TableTrackView.Dialog.NameColumn.Message=Sila masukkan nama lajur. +TableTrackView.Dialog.NameColumn.TryAgain=Nama tersebut sudah digunakan. +TableTrackView.Dialog.NameColumn.Title=Lajur Teks +TToolBar.MenuItem.StretchOff=Set Semula + +# Additions by Doug Brown 2014-02-20 +PrefsDialog.Checkbox.WarnFFMPegVersion=Versi FFMPeg +PrefsDialog.Checkbox.WarnCopyFailed=Ralat Salin Fail Enjin Video +Tracker.Dialog.FailedToCopy.Title=Ralat Salin Fail +Velocity.Dialog.Color.Title=Pilih Warna Halaju +Acceleration.Dialog.Color.Title=Pilih Warna Pecutan +TMenuBar.Menu.FontSize=Aras Fon +TMenuBar.MenuItem.DefaultFontSize=Lalai +PrefsDialog.FontSize.BorderTitle=Aras Fon +TrackerPanel.Label.Booster=Pelancar +TrackerPanel.Booster.None=(tiada) +TrackerPanel.Dropdown.Booster.Tooltip=Jisim titik yang menetapkan keadaan awal model ini. +CoordAxes.Checkbox.Grid=Grid +CoordAxes.Checkbox.Grid.Tooltip=Papar tindihan grid +CoordAxes.Button.Grid.Tooltip=Set warna dan kelegapan grid +CoordAxes.Dialog.GridColor.Title=Pilih Warna Grid +CoordAxes.MenuItem.GridColor=Warna Grid... +CoordAxes.MenuItem.GridOpacity=Kelegapan.. +CoordAxes.Dialog.GridOpacity.Title=Set Kelegapan Grid +DynamicSystem.Dialog.RemoveBooster.Title=Konflik Pelancar +DynamicSystem.Dialog.RemoveBooster.Message1=Zarah dalam sistem juga tidak boleh melancarkan satu yang lain. +DynamicSystem.Dialog.RemoveBooster.Message2=Pelancar yang berkonfik akan dialihkan daripada +DynamicSystem.Dialog.RemoveBooster.Message3=sebelum pengubahsuaian sistem. + +# Additions by Doug Brown 2014-05-09 +PageTView.MenuItem.OpenInBrowser=Buka Halaman dalam Pelayar +TToolbar.Button.Desktop.Menu.OpenPage=Halaman +TToolbar.Button.Desktop.Menu.OpenFile=Fail + +# Additions by Doug Brown 2014-10-24 +Tracker.Prefs.MenuItem.Text=Fail Keutamaan +Tracker.Prefs.NotFound=Fail keutamaan tak ditemui +TapeMeasure.Alert.UnfixScale.Message1=Skala Sistem Koordinat mesti dilonggarkan untuk diletakkan hujung. +TapeMeasure.Alert.UnfixScale.Message2=Adakah anda ingin longgarkannya sekarang? +TapeMeasure.Alert.UnfixScale.Title=Skala telah ditetapkan. +Tracker.Dialog.StarterWarning.Title=Pelancaran Tak-Piawai + +# Additions by Doug Brown 2014-12-26 +TrackDataBuilder.Dialog.NoFunctionsFound.Message=iada fungsi data yang ditemui untuk jenis trek +TrackDataBuilder.Dialog.NoFunctionsFound.Title=Fungsi Tak Ditemui +TrackDataBuilder.Instructions.SelectToAutoload=Pilih fungsi data untuk automuat daripada senarai di bawah. +TrackDataBuilder.Instructions.WhereDefined=Fungsi ditakrifkan dalam fail XML Pembina Data yang ditemui dalam direktori yang ditunjukkan. +TrackDataBuilder.Instructions.HowToAddFunction=Untuk tambah fungsi baru, ciptanya dalam Pembina Data, simpannya dalam fail XML, dan salin fail ke salah satu direktori. +TrackDataBuilder.Instructions.HowToAddDirectory=TUntuk ubah laluan carian, klik butang Carian Laluan. +TrackDataBuilder.Dialog.ConvertAutoload.Message1=Sesetengah fungsi terautomuat disimpan dalam format terdahulu. +TrackDataBuilder.Dialog.ConvertAutoload.Message2=Adakah anda ingin menukarnya ke dalam format mudah alih baharu? +TrackDataBuilder.Dialog.ConvertAutoload.Message3=Nota: format baharu tak boleh dibaca oleh Tracker versi terdahulu. +TrackDataBuilder.Dialog.ConvertAutoload.Title=Tukar Fungsi Automuat? +TrackDataBuilder.MenuItem.SaveAll.Text=Simpan semua +TrackDataBuilder.MenuItem.SaveAll.Tooltip=Simpan semua fungsi dalam format mudah alih, boleh automuat (tak boleh dibaca oleh Tracker versi terdahulu). +TrackDataBuilder.MenuItem.SaveOnly.Text=Simpan sahaja +TrackDataBuilder.MenuItem.SaveOnly.Tooltip=Simpan fungsi trek terpilih dalam format boleh baca oleh semua versi Tracker (tak boleh automuat) +ParticleDataTrack.Name=Trek Data +ParticleDataTrack.Builder.Title=Trek Data +ParticleDataTrack.New.Name=trek data +TActions.Action.ImportData=Sumber Data... +TrackerIO.TextFileFilter.Description=Fail Teks (.txt) +TrackerIO.JarFileFilter.Description=Fail Jar (.jar) +TrackerIO.Dialog.OpenData.Title=Sumber Data Terbuka +DataTrackClipControl.Label.Data=Data +DataTrackClipControl.Label.Video=Video +DataTrackClipControl.Border.Title=Klip Data +DataTrackClipControl.Label.VideoStart=Bingkai Mula +DataTrackClipControl.Label.FrameCount=Kiraan Bingkai +DataTrackClipControl.Label.DataStart=Mula Data +DataTrackClipControl.Label.Stride=Langkah Data +ParticleDataTrackFunctionPanel.Border.Title=Kawalan Sumber Data +DataTrackTimeControl.Button.Video=Masa Video +DataTrackTimeControl.Button.Data=Masa Data +DataTrackTimeControl.Border.Title=Basis Masa +TActions.Action.DataTrack.Unsupported.JarFile=Fail Jar +TActions.Action.DataTrack.Unsupported.Message=tak dapat hantar data ke Tracker +TActions.Action.DataTrack.Unsupported.Title=Bukan Sumber Data + +# Additions by Doug Brown 2015-04-17 to 2015-05-30 +DataTrackTool.Dialog.VideoNotFound.Message1=Unable to find video Tak dapat menemui video +DataTrackTool.Dialog.VideoNotFound.Message2=Adakah anda mahu mencarinya? +DataTrackTool.Dialog.VideoNotFound.Title=VVideo Tak Ditemui +DataTrackTool.Dialog.FileNotFound.Message1=Tak boleh menemui fail +DataTrackTool.Dialog.FileNotFound.Title=Fail Tak Ditemui +DataTrackTool.Dialog.InvalidTRK.Message=Fail bukan fail TRK yang sah +DataTrackTool.Dialog.InvalidTRK.Title=Fail Tak Sah +DataTrackTool.Dialog.InvalidData.Message=Data tidak mengandungi kedudukan (x, y) +DataTrackTool.Dialog.InvalidData.Title=Data Tak Sah +ParticleDataTrack.Dialog.NoNewData.Message=Data dihantar tak melanjutkan data sedia ada. +ParticleDataTrack.Dialog.NoNewData.Title=Tiada Data Baharu +ParticleDataTrackFunctionPanel.Instructions.General=Klik-berganda masa awal untuk sunting atau guna gelegar untuk ubah tetapan video dan data. +TrackerPanel.Dialog.NoData.Message=Tiada data ditemui +TrackerPanel.Dialog.NoData.Title=Tiada Data +TrackerPanel.Dialog.Exception.Message=Data tak boleh diimport kerana pengecualian berikut berlaku +TrackerPanel.Dialog.Exception.Title=Import Data Gagal +TActions.Dialog.URLResourceNotFound.Message=Tiada sumber ditemui pada URL +TActions.Dialog.URLResourceNotFound.Title=Sumber Tak Ditemui +CircleFitter.Name=Penyesuai Bulatan +CircleFitter.New.Name=bulatan +CircleFitter.Label.Radius=jejari +CircleFitter.Checkbox.RadialLine=Garis jejarian +CircleFitter.Checkbox.RadialLine.Tooltip=Tunjuk atau sembunyi garis jejarian +CircleFitter.Field.Radius.Tooltip=Jejari bulatan penyesuaian terbaik +CircleFitter.Field.CenterX.Tooltip=komponen-x pusat penyesuaian terbaik +CircleFitter.Field.CenterY.Tooltip=komponen-y pusat penyesuaian terbaik +CircleFitter.Label.MarkPoint=Penyesuaian bulatan memerlukan 3 atau lebih titik data +CircleFitter.Hint.MarkMore=shift-klik untuk tanda lebih titik jika mahu +CircleFitter.Hint.Mark3=shift-klik untuk tanda titik data +CircleFitter.Data.Center=pusat +CircleFitter.Data.Description.0=masa +CircleFitter.Data.Description.1=pusat komponen-x +CircleFitter.Data.Description.2=pusat komponen-y +CircleFitter.Data.Description.3=jejari +CircleFitter.Data.Description.4=nombor langkah +CircleFitter.Data.Description.5=nombor bingkai +CircleFitter.Data.Description.6=sudut garis jejarian +CircleFitter.DataPoint.Name=titik perimeter +CircleFitter.DataPoint.Hint=seret untuk alih +CircleFitter.Slider.Name=garis jejarian +CircleFitter.Slider.Hint=seret untuk putar +CircleFitterFootprint.Circle4=titik kecil +CircleFitterFootprint.Circle7=titik besar +CircleFitterFootprint.Circle4Bold=titik kecil tebal +CircleFitterFootprint.Circle7Bold=titik besar tebal +CircleFitter.MenuItem.OriginToCenter=Alih Asalan ke Pusat +CircleFitter.MenuItem.Inspector=Salin Langkah Jisim Titik... +CircleFitter.MenuItem.ClearPoints=Bersih Titik +CircleFitter.MenuItem.DeletePoint=Buang Titik Terpilih +CircleFitter.Inspector.Instructions1=Ini menyesuaikan bulatan pada 3 atau lebih titik data. +CircleFitter.Inspector.Instructions2=Anda boleh tanda titik secara manual atau salinnya daripada sumber titik jisim. +CircleFitter.Inspector.Label.SourceTrack=Trek sumber +CircleFitter.Inspector.Label.From=Langkah +CircleFitter.Inspector.Label.To=ke +CircleFitter.Inspector.Dropdown.None=Tiada +CircleFitter.Inspector.Button.Apply=Salin Langkah +TActions.Action.SaveVideoAs=Simpan Video Sebagai... +TrackerIO.Export.Option.WithVideo=dengan video +TrackerIO.Export.Option.WithoutVideo=tanpa video +ParticleModel.MenuItem.UseDefaultReferenceFrame=Sentiasa Relatif Kepada Bingkai Rujukan Lalai +TFrame.NotesDialog.Checkbox.ShowByDefault=Tunjuk nota dengan lalai + +# Additions by Doug Brown 2015-11-20 +CircleFitter.Label.Point=Data Point +CircleFitter.Label.Points=Data Points +CircleFitter.Label.NewPoint=New +CircleFitter.MenuItem.MarkedPoint=marked point +AttachmentInspector.Label.Frames=Frames +AttachmentInspector.Label.To=to +AttachmentInspector.Label.Offset=Offset +AttachmentInspector.Button.Steps=Single track +AttachmentInspector.Button.Tracks=Multiple tracks +AttachmentInspector.Button.Steps.Tooltip=Attach multiple data points to a single track +AttachmentInspector.Button.Tracks.Tooltip=Attach one data point to each of several tracks +AttachmentInspector.Checkbox.Relative=Relative frame numbers +AttachmentInspector.Checkbox.Relative.Tooltip=Specified frame range is relative to the current frame +AttachmentInspector.Border.Title.AttachTo=Attach To +CircleFitter.Button.DataPoints=data points +CircleFitter.Circle.Name=perimeter +CircleFitter.Circle.Hint=best fit +CircleFitter.Center.Name=center point +CircleFitter.Center.Hint=best fit +PerspectiveTrack.Corner.Hint=drag to move +PerspectiveTrack.Corner.Input=input corner +PerspectiveTrack.Corner.Output=output corner +Undo.Description.Delete=Delete +Undo.Description.Filter=Filter +Undo.Description.Clear=Clear +Undo.Description.Track=Track +Undo.Description.Tracks=Tracks +Undo.Description.Edit=Edit +Undo.Description.Video=Video +Undo.Description.Step=Step +Undo.Description.Steps=Steps +Undo.Description.Properties=Properties +Undo.Description.Add=Add +Undo.Description.Remove=Remove +Undo.Description.Images=Images +Undo.Description.Replace=Replace +ParticleDataTrack.Menu.Points=Points +ParticleDataTrack.Menu.Lines=Lines +ParticleDataTrack.Checkbox.Closed=Closed +ParticleDataTrack.Button.Paste.Text=Paste Data +ParticleDataTrack.Button.Reload.Text=Reload Data +Footprint.Lines=lines +Footprint.BoldLines=bold lines +Footprint.Outlines=outlines +Footprint.BoldOutlines=bold outlines +AttachmentInspector.Label.StartFrame=Start Frame +AttachmentInspector.Label.FrameCount=Frame Count +Protractor.Data.Description.6=rotation angle + +# Additions by Doug Brown 2016-05-10 +TTrack.MenuItem.NumberFormat=Number Formats... +TTrack.NumberField.Format.Tooltip=Right-click to format +TTrack.NumberField.Format.Tooltip.OSX=Control-click to format +NumberFormatSetter.Title=Number Formats +NumberFormatSetter.ApplyToVariables.Text=Select a track and one or more variables: +NumberFormatSetter.TitledBorder.ApplyTo.Text=Apply changes to: +NumberFormatSetter.Button.ApplyToTrackOnly.Text=This track only +NumberFormatSetter.Button.ApplyToTrackType.Text=All tracks of type +NumberFormatSetter.Button.ApplyToDimension.Text=All variables with dimensions +NumberFormatSetter.TitledBorder.Units.Text=Angle units: +NumberFormatSetter.NoPattern=default +NumberFormatSetter.Button.Revert=Revert +NumberFormatSetter.DimensionList.More=more +NumberFormatSetter.Help.Dimensions.1=Variable dimensions are combinations of: +NumberFormatSetter.Help.Dimensions.2=L length +NumberFormatSetter.Help.Dimensions.3=T time +NumberFormatSetter.Help.Dimensions.4=M mass +NumberFormatSetter.Help.Dimensions.5=A angle +NumberFormatSetter.Help.Dimensions.6=I integer +NumberFormatSetter.Help.Dimensions.7=C color (0-255) +NumberFormatSetter.Help.Dimensions.8=P pixel +TMenuBar.MenuItem.AutoPasteData.Text=Auto-Paste +Protractor.Base.Name=base end +Protractor.Base.Hint=drag to move the base +Protractor.Attachment.Arm=Arm +Protractor.Attachment.Base=Base + +# Additions by Doug Brown 2016-07-05 +TMenuBar.MenuItem.DataTrackHelp=Help... +TMenuBar.Checkbox.Autopaste=Auto-Paste Data +TMenuBar.MenuItem.Clipboard=Clipboard +TMenuBar.MenuItem.DataFile=Text File +TMenuBar.MenuItem.EJS=EJS Simulation +TFrame.ProgressDialog.Title.FramesLoaded=Frames loaded +TrackerIO.Dialog.OpenEJS.Title=Open EJS Model + +# Additions by Doug Brown 2016-09-20 +TrackControl.Button.FontSmaller.ToolTip=Decrease the font and icon sizes +TrackControl.Button.FontBigger.ToolTip=Increase the font and icon sizes +Tracker.Cursor.Autotrack.Keyframe.Description=Autotracker keyframe +AutoTracker.Wizard.Button.Options=Options +AutoTracker.Wizard.Menuitem.SearchFixed=Search Fixed Area +AutoTracker.Wizard.Menuitem.CopyMatchScores=Copy Match Data +CircleFitter.MenuItem.CopyToClipboard.Text=Copy to Clipboard +CircleFitter.MenuItem.CopyToClipboard.Tooltip=Copy data point positions to the clipboard +AutoTracker.Wizard.Button.Search.Tooltip=Click to start searching or shift-click for more options +AutoTracker.Wizard.Button.SearchThis.Tooltip=Search again in the current frame +AutoTracker.Wizard.Button.SearchNext.Tooltip=Search in the next frame only +AutoTracker.Wizard.MenuItem.SearchFixed.Tooltip=Search all frames non-stop using the current search area and template +AutoTracker.Wizard.MenuItem.CopyMatchScores.Tooltip=Copy match scores and target positions to the clipboard +AutoTracker.Match.Score=score + +# Additions by Doug Brown 2017-04-16 +ParticleModel.MenuItem.Stamp=Stamp +ParticleModel.MenuItem.Stamp.Tooltip=Create a point mass with steps at the current model positions +ParticleModel.Stamp.Name=stamp + +# Additions by Doug Brown 2017-08-21 +PlotGuestDialog.Instructions=Compare with: +TTrackBar.Dialog.Relaunch.DownloadLabel.Text=Downloading files to +TTrackBar.Dialog.Relaunch.RelaunchLabel.Text=Tracker will restart shortly. +PrefsDialog.Tab.Tracking.Title=Tracks +PrefsDialog.Marking.BorderTitle=New Tracks +PrefsDialog.Checkbox.ResetToZero.Text=Auto-reset to step 0 for marking +Tracker.Dialog.ChangePrefVersionAfterUpgrade.Message1=You have just upgraded to version +Tracker.Dialog.ChangePrefVersionAfterUpgrade.Message2=but your current preferred version is +Tracker.Dialog.ChangePrefVersionAfterUpgrade.Message3=Would you like to change your preference to the default (new) version? +Tracker.Dialog.ChangePrefVersionAfterUpgrade.Title=Tracker Preference +CircleFitter.Data.PointCount=points +CircleFitterFootprint.Circle4.PointsOnly=data points only + +# Additions by Doug Brown 2017-12-07 +Tracker.About.TrackerHome=Your Tracker home: +TableTrackView.Popup.Menuitem.GoToStep=Go To Step +TableTrackView.Button.SkippedFrames.ToolTip=Show or hide red skip lines at skipped steps +TTrackBar.Popup.MenuItem.LearnMore=Learn More +PrefsDialog.JREDropdown.BundledJRE=default (bundled) +TTrackBar.Dialog.Memory.Relaunch.Title=Restart +TTrackBar.Dialog.Memory.Relaunch.Message=Restart Tracker now with new memory? +TTrackBar.Dialog.SetMemory.Title=Set Memory Size +TTrackBar.Dialog.SetMemory.Message=Set the maximum memory size in MB (-1 for default): +TTrackBar.Dialog.Relaunch.DownloadLabel.Upgrade.Text=Downloading upgrade installer to +TTrackBar.Dialog.Relaunch.RelaunchLabel.Upgrade.Text=The installer should start shortly. +TTrackBar.Dialog.Relaunch.Title.Text=Downloading +TTrackBar.Dialog.Download.Title=Upgrade Tracker +TTrackBar.Dialog.Download.Message1=Tracker upgrade files will be downloaded to +TTrackBar.Dialog.Download.Message2=Tracker will then restart. Do you wish to continue? +TTrackBar.Dialog.Download.Upgrade.Message1=The Tracker upgrade installer will be downloaded to +TTrackBar.Dialog.Download.Upgrade.Message2=Tracker will then launch the installer and close. +TTrackBar.Dialog.LinuxCommand.Message1=The upgrade installer must be run as root. Use the following command +TTrackBar.Dialog.LinuxCommand.Message2=by selecting the text and typing Ctrl-C, then pasting into the Terminal. +TTrackBar.Dialog.LinuxCommand.Message3=Click OK to close Tracker after pasting. + +# Additions by Doug Brown 2018-01-18 +TTrackBar.Dialog.LinuxCommand.Title=Run Command +TTrackBar.Chooser.DownloadDirectory=Download Upgrade Installer To: +TTrackBar.Popup.MenuItem.TrackerHomePage=Open Tracker Home +PrefsDialog.JREDropdown.LatestJRE=default (latest) +TToolBar.Button.Drawings.Tooltip=Show or hide the Drawing Control +TToolBar.MenuItem.DrawingsVisible.Text=Drawings Visible +PencilControlDialog.Title=Drawing Control +PencilControlDialog.Button.NewScene.Text=New +PencilControlDialog.Button.DeleteScene.Text=Delete +PencilControlDialog.Label.Caption.Text=Label +PencilControlDialog.Label.Drawing.Text=Drawing +PencilControlDialog.Label.Frames.Text=Frames +PencilControlDialog.Label.To.Text=to +PencilControlDialog.Checkbox.Heavy.Text=Heavy +PencilControlDialog.Button.ClearAll.Text=Clear All +PencilControlDialog.Button.NewScene.Tooltip=Create a new drawing +PencilControlDialog.Button.DeleteScene.Tooltip=Delete the current drawing +PencilControlDialog.Checkbox.Heavy.Tooltip=Use heavy lines and bold fonts +PencilControlDialog.Button.ClearAll.Tooltip=Clear all drawings +PencilControlDialog.Button.Color.Tooltip=Select the line and label color +PencilControlDialog.Field.Caption.Tooltip=Edit the label text +PencilControlDialog.Dropdown.Drawing.Tooltip=Select the active drawing +PencilControlDialog.Spinner.FontSize.Tooltip=Set the label font size +PencilControlDialog.Spinner.FrameRange.Tooltip=Set the frame range over which the drawing is visible +PencilControlDialog.DrawingEdit.Undo.Text=Erase the line +PencilControlDialog.DrawingEdit.Redo.Text=Restore the erased line +PencilControlDialog.CaptionEdit.Undo.Text=Undo the label text edit +PencilControlDialog.CaptionEdit.Redo.Text=Redo the label text edit +PencilControlDialog.DeletionEdit.Undo.Text=Restore the deleted drawing +PencilControlDialog.DeletionEdit.Redo.Text=Re-delete the drawing +PencilControlDialog.ClearEdit.Undo.Text=Restore the cleared drawings +PencilControlDialog.ClearEdit.Redo.Text=Re-clear the drawings +PencilDrawer.Cursor.Description=pencil +PencilDrawer.Hint=drag mouse to draw pencil lines, drag label to move +PencilCaption.Hint=drag label to move +PencilScene.Description.Default=No Label diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_nl_NL.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_nl_NL.properties index 892765fe..274b0eb9 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_nl_NL.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_nl_NL.properties @@ -85,7 +85,7 @@ TableTrackView.Dialog.Border.Title=Zichtbaar: TActions.Action.Description=Notities TActions.Action.ClearTracks=Alle sporen TActions.Action.NewTab=Nieuwe tab -TActions.Action.Copy=Kopiëren +TActions.Action.Copy=Kopiïż½ren TActions.Action.Paste=Plakken TActions.Action.Open=Open bestand... TActions.Action.Close=Sluit tab @@ -122,7 +122,7 @@ TMenuBar.Menu.File=Bestand TMenuBar.Menu.Edit=Bewerk TMenuBar.Menu.Video=Video TMenuBar.Menu.Tracks=Sporen -TMenuBar.Menu.Coords=Coördinatensysteem +TMenuBar.Menu.Coords=Coïż½rdinatensysteem TMenuBar.Menu.Window=Beelden TMenuBar.Menu.Help=Help TMenuBar.MenuItem.EditProperties=Eigenschappen... @@ -172,21 +172,21 @@ Tracker.Dialog.AboutQT.Message.QTVersion=QuickTime-versie Tracker.Dialog.AboutQT.Message.QTJavaVersion=QT Java-versie Tracker.Dialog.AboutQT.Message.QTJavaPath=QT Java-pad: Tracker.Dialog.NoQT.Title=QT Java.zip niet gevonden -Tracker.Dialog.NoQT.Message1=QuickTime voor Java is niet geïnstalleerd. +Tracker.Dialog.NoQT.Message1=QuickTime voor Java is niet geïż½nstalleerd. Tracker.Dialog.NoQT.Message2=Als je QuickTime-films wil analyseren. Tracker.Dialog.NoQT.Message3=OPMERKING: QuickTime voor Java MOET GESELECTEERD ZIJN bij de installatie van QuickTime Tracker.Dialog.UpdateQT.Title=QT Java.zip updaten Tracker.Dialog.UpdateQT.Message1=Er is een nieuwe versie van QTJava.zip gevonden op Tracker.Dialog.UpdateQT.Message2=Wil je het bestaande bestand updaten? Tracker.Dialog.CopyQT.Title=Kopieer QTJava.zip -Tracker.Dialog.CopyQT.Message1=QuickTime is geïnstalleerd, maar voor Tracker het kan gebruiken: +Tracker.Dialog.CopyQT.Message1=QuickTime is geïż½nstalleerd, maar voor Tracker het kan gebruiken: Tracker.Dialog.CopyQT.Message2=1. QTJava.zip moet gekopieerd worden van Tracker.Dialog.CopyQT.Message3=naar positie Tracker.Dialog.CopyQT.Message4=2. Tracker moet herstart worden. -Tracker.Dialog.CopyQT.Message5=Wil je QTJava.zip nu kopiëren? -Tracker.Dialog.CopyFailed.Title=Kopiëren mislukt +Tracker.Dialog.CopyQT.Message5=Wil je QTJava.zip nu kopiïż½ren? +Tracker.Dialog.CopyFailed.Title=Kopiïż½ren mislukt Tracker.Dialog.CopyFailed.Message=QTJava.zip kon niet gekopieerd worden. -Tracker.Dialog.CopiedTo.Title=Kopiëren gelukt +Tracker.Dialog.CopiedTo.Title=Kopiïż½ren gelukt Tracker.Dialog.CopiedTo.Message1=QTJava.zip is met succes gekopieerd naar Tracker.Dialog.CopiedTo.Message2=Tracker moet herstart worden en zal nu afsluiten. Tracker.Splash.Loading=Laden... @@ -246,10 +246,10 @@ Vector.Name=Vector Vector.New.Name=vector Vector.MenuItem.ToOrigin=Naar oorsprong Vector.MenuItem.Label=Label zichtbaar -VectorSum.Name=Vectoriële som +VectorSum.Name=Vectoriïż½le som VectorSum.New.Name=Som VectorSum.MenuItem.Inspector=Selecteer vectoren... -VectorSumInspector.Title=Vectoriële som +VectorSumInspector.Title=Vectoriïż½le som VectorSumInspector.Border.Title=Selecteer vectoren WorldTView.Popup.MenuItem.Projectile=Projectiemodel @@ -283,10 +283,10 @@ Calibration.Axes.YOnly=Enkel Y Calibration.Axes.XY=XY Calibration.Spinner.Axes.Tooltip=Selecteer calibratie-assen Calibration.Label.Axes=Assen -Calibration.Dialog.InvalidCoordinates.Title=Ongeldige coördinaten -Calibration.Dialog.InvalidCoordinates.Message=Punten kunnen niet dezelfde wereldcoördinaten hebben. -Calibration.Dialog.InvalidXCoordinates.Message=Punten kunnen niet dezelfde wereldcoördinaten hebben. -Calibration.Dialog.InvalidYCoordinates.Message=Punten kunnen niet dezelfde wereldcoördinaten hebben. +Calibration.Dialog.InvalidCoordinates.Title=Ongeldige coïż½rdinaten +Calibration.Dialog.InvalidCoordinates.Message=Punten kunnen niet dezelfde wereldcoïż½rdinaten hebben. +Calibration.Dialog.InvalidXCoordinates.Message=Punten kunnen niet dezelfde wereldcoïż½rdinaten hebben. +Calibration.Dialog.InvalidYCoordinates.Message=Punten kunnen niet dezelfde wereldcoïż½rdinaten hebben. SpectralLineFilter.Title=Gasspectra SpectralLineFilter.H=Waterstof SpectralLineFilter.He=Helium @@ -307,7 +307,7 @@ TMenuBar.Menu.CopyImage=Kopieer afbeelding TMenuBar.MenuItem.CopyMainView=Hoofdbeeld TMenuBar.MenuItem.CopyFrame=Frame TMenuBar.MenuItem.PrintFrame=Afdrukken... -TrackerIO.Dialog.AddImage.Title=Importeer afbeeldingen (kies één of meer) +TrackerIO.Dialog.AddImage.Title=Importeer afbeeldingen (kies ïż½ïż½n of meer) TTrack.Dialog.Name.BadName=is in gebruik. Kies een ander naam. VectorStep.Label.Momentum=p VectorStep.Label.Velocity=v @@ -409,15 +409,15 @@ Vector.Data.Description.8=framenummer # Additions by Doug Brown 2008-01-02 ParticleModel.Parameter.Mass.Description=Massa van dit deeltje -ParticleModel.Parameter.InitialTime.Description=Initiële tijd +ParticleModel.Parameter.InitialTime.Description=Initiïż½le tijd AnalyticParticle.PositionFunction.X.Description=Positie x-component AnalyticParticle.PositionFunction.Y.Description=Positie y-component DynamicParticle.ForceFunction.X.Description=Kracht x-component DynamicParticle.ForceFunction.Y.Description=Kracht y-component -DynamicParticle.Parameter.InitialX.Description=Initiële positie x-component -DynamicParticle.Parameter.InitialY.Description=Initiële positie y-component -DynamicParticle.Parameter.InitialVelocityX.Description=Initiële snelheid x-component -DynamicParticle.Parameter.InitialVelocityY.Description=Initiële snelheid y-component +DynamicParticle.Parameter.InitialX.Description=Initiïż½le positie x-component +DynamicParticle.Parameter.InitialY.Description=Initiïż½le positie y-component +DynamicParticle.Parameter.InitialVelocityX.Description=Initiïż½le snelheid x-component +DynamicParticle.Parameter.InitialVelocityY.Description=Initiïż½le snelheid y-component TrackerPanel.ModelBuilder.Title=Modelbouwer TrackerPanel.DataBuilder.Title=Databouwer TrackControl.TrailMenu.NoTrail=Geen sporen @@ -485,11 +485,11 @@ CoordAxes.Handle.Hint=sleep om de kanteling te veranderen CoordAxes.Origin.Name=oorsprong CoordAxes.Origin.Hint=sleep om van positie te veranderen OffsetOrigin.Position.Name=positie -OffsetOrigin.Position.Hint=sleep of voer coördinaten in om de oorsprong te verplaatsen +OffsetOrigin.Position.Hint=sleep of voer coïż½rdinaten in om de oorsprong te verplaatsen Calibration.Point.Name=punt -Calibration.Point.Hint=sleep of voer coördinaten in om de assen en schaal te wijzigen +Calibration.Point.Hint=sleep of voer coïż½rdinaten in om de assen en schaal te wijzigen RGBRegion.Position.Name=positie -RGBRegion.Position.Hint=sleep of voer coördinaten in om van positie te veranderen +RGBRegion.Position.Hint=sleep of voer coïż½rdinaten in om van positie te veranderen LineProfile.End.Name=einde LineProfile.End.Hint=sleep om de lengte van de lijn aan te passen LineProfile.Handle.Name=handvat @@ -501,8 +501,8 @@ Vector.Unmarked.Hint=shift-slepen om te markeren OffsetOrigin.Unmarked.Hint=shift-klik om opnieuw te markeren Calibration.Unmarked.Hint=shift-klik om het eerste punt te markeren Calibration.Halfmarked.Hint=shift-klik om opnieuw te markeren -CenterOfMass.Empty.Hint=selecteer massa's om het systeem te definiëren -VectorSum.Empty.Hint=selecteer vectoren om som te definiëren +CenterOfMass.Empty.Hint=selecteer massa's om het systeem te definiïż½ren +VectorSum.Empty.Hint=selecteer vectoren om som te definiïż½ren TapeMeasure.Hint=sleep eindigen om afstanden en hoeken te meten CoordAxes.Hint=stel de hoek in om de kanteling te veranderen ParticleModel.Hint=massa instellen op de werkbalk, uitdrukkingen invoeren in Model Bouwer om te animeren @@ -512,7 +512,7 @@ TTrack.ImportVideo.Hint=video of afbeelding importeren om RGB te meten TTrack.Selected.Hint=geselecteerd LineProfile.Hint=voer verspreiding in om de lijndikte te veranderen LineProfile.Unmarked.Hint=shift-slepen om lijn te tekenen -LineProfile.Menu.Orientation=Oriëntatie +LineProfile.Menu.Orientation=Oriïż½ntatie LineProfile.MenuItem.Horizontal=Horizontaal LineProfile.MenuItem.XAxis=Langs X-as Footprint.PositionVector=vector @@ -522,7 +522,7 @@ TrackerPanel.NoVideo.Hint=open of importeer een video om te analyseren TrackerPanel.CalibrateVideo.Hint=kalibreer de video met behulp van een kalibratietool TrackerPanel.NoTracks.Hint=maak een nieuw nummer om interessante functies te meten TrackerPanel.SetClip.Hint=instellingen voor videoclips instellen of bekijken -TrackerPanel.ShowAxes.Hint=stel de oorsprong en de hoek van de coördinaatassen in +TrackerPanel.ShowAxes.Hint=stel de oorsprong en de hoek van de coïż½rdinaatassen in VideoPlayer.Step.Hint=stap vooruit (sneltoets: PageDown) VideoPlayer.Back.Hint=stap terug (sneltoets: PageUp) TrackerPanel.DVVideo.Hint=een resize-filter toepassen om vervormingen in DV-formaat video's te corrigeren @@ -543,10 +543,10 @@ DynamicParticle.Editor.Button.Cartesian=Cartesiaans DynamicParticle.Editor.Button.Polar=Polair DynamicParticle.Parameter.InitialR.Description=Begin straal DynamicParticle.Parameter.InitialTheta.Description=Beginhoek -DynamicParticle.Parameter.InitialVelocityR.Description=Initiële radiale snelheid -DynamicParticle.Parameter.InitialOmega.Description=Initiële hoeksnelheid +DynamicParticle.Parameter.InitialVelocityR.Description=Initiïż½le radiale snelheid +DynamicParticle.Parameter.InitialOmega.Description=Initiïż½le hoeksnelheid DynamicParticle.ForceFunction.R.Description=Forceer radiale component -DynamicParticle.ForceFunction.Theta.Description=Forceer tangentiële component +DynamicParticle.ForceFunction.Theta.Description=Forceer tangentiïż½le component DynamicParticlePolar.Name=Dynamisch deeltjes model (polair) TMenuBar.Menu.DynamicParticle=Dynamisch deeltjes model TMenuBar.MenuItem.Cartesian=Cartesiaans @@ -594,7 +594,7 @@ AutoTracker.Info.Accept=-- accepteer de wedstrijd AutoTracker.Info.Retry=-- wijzig het zoekgebied en zoek opnieuw AutoTracker.Info.Mark=-- shift-klik om handmatig te markeren AutoTracker.Info.Skip=-- sluit dit frame en ga verder met het volgende -AutoTracker.Info.Reset=- stap terug naar een correct gemarkeerd frame en klik met shift-control-klik om een ??nieuw sleutelframe te definiëren +AutoTracker.Info.Reset=- stap terug naar een correct gemarkeerd frame en klik met shift-control-klik om een ??nieuw sleutelframe te definiïż½ren AutoTracker.Info.MatchScore=overeenkomstscore AutoTracker.Dialog.MaskLocked.Title=Sjabloon vergrendeld PointMass.Cursor.Autotrack.Description=Autotracker-cursor @@ -612,7 +612,7 @@ DynamicParticle.System.In=in DynamicSystem.Empty=leeg DynamicSystem.Force.Name.Internal=intern DynamicSystem.ForceFunction.R.Description=Radiale component met interne kracht -DynamicSystem.ForceFunction.Theta.Description=Tangentiële component met interne kracht +DynamicSystem.ForceFunction.Theta.Description=Tangentiïż½le component met interne kracht DynamicSystem.MenuItem.Inspector=Selecteer deeltjes... DynamicSystem.Name=Dynamisch Two-Body systeem DynamicSystem.New.Name=systeem @@ -703,7 +703,7 @@ ExportVideo.Dialog.HiddenPlots.Message=Plots moeten volledig zichtbaar zijn om t ExportVideo.Dialog.HiddenPlots.Title=Onvolledige weergave Footprint.DoubleTarget=dubbel vizier Footprint.BoldDoubleTarget=dubbel vizier vet -OffsetOrigin.MenuItem.Fixed=Vaste wereldcoördinaten +OffsetOrigin.MenuItem.Fixed=Vaste wereldcoïż½rdinaten ParticleModel.Dialog.Offscreen.Message1=Sommige modelstappen zijn leeg omdat ze te ver van het scherm zijn verwijderd. ParticleModel.Dialog.Offscreen.Message2=U kunt dit oplossen door het model te wijzigen of de video te schalen. ParticleModel.Dialog.Offscreen.Title=Buiten de mogelijke grenzen @@ -719,7 +719,7 @@ PrefsDialog.Checkbox.DefaultSize=Gebruik standaard PrefsDialog.Checkbox.HintsOn=Toon standaard hints PrefsDialog.Tab.Video.Title=Video PrefsDialog.VideoPref.BorderTitle=Video-engine -PrefsDialog.Button.Xuggle=Xuggle +PrefsDialog.Button.FFMPeg=FFMPeg PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=Geheugenbeheer is niet beschikbaar bij het gebruik van Web Start. PrefsDialog.Dialog.WebStart.Title=Web Start-modus @@ -734,9 +734,9 @@ PrefsDialog.Upgrades.Weekly=Wekelijks PrefsDialog.Upgrades.Monthly=Maandelijks PrefsDialog.Upgrades.Never=Nooit PrefsDialog.Button.CheckForUpgrade=Controleer nu -PrefsDialog.Xuggle.Speed.BorderTitle=Xuggle video afspelen -PrefsDialog.Xuggle.Slow=Vloeiend (kan langzaam zijn) -PrefsDialog.Xuggle.Fast=Snel (kan schokkerig zijn) +PrefsDialog.FFMPeg.Speed.BorderTitle=FFMPeg video afspelen +PrefsDialog.FFMPeg.Slow=Vloeiend (kan langzaam zijn) +PrefsDialog.FFMPeg.Fast=Snel (kan schokkerig zijn) PrefsDialog.CalibrationTool.BorderTitle=Standaard kalibratietool Protractor.Name=Hoekmeter Protractor.New.Name=hoekmeter @@ -767,7 +767,7 @@ TableTrackView.MenuItem.RemoveDelimiter=Verwijderen... TableTrackView.Dialog.CustomDelimiter.Message=Voer een nieuw scheidingsteken in (string-formaat): TableTrackView.Dialog.CustomDelimiter.Title=Scheidingsteken toevoegen TableTrackView.Header.Tooltip=Klik om te sorteren of dubbelklikken om een ??kolom te selecteren -TableTrackView.MenuItem.CopySelectedData=Geselecteerde gegevens kopiëren +TableTrackView.MenuItem.CopySelectedData=Geselecteerde gegevens kopiïż½ren TableTrackView.Dialog.RemoveDelimiter.Message=Selecteer het scheidingsteken om te verwijderen: TableTrackView.Dialog.RemoveDelimiter.Title=Verwijder het scheidingsteken TableTrackView.Radians.Tooltip=in radialen @@ -810,29 +810,29 @@ TMenuBar.Menu.Export=Exporteer TMenuBar.MenuItem.Video=Video... TMenuBar.MenuItem.Data=Databestand... TMenuBar.Menu.CopyObject=Kopieer object -TMenuBar.MenuItem.Coords=Coördinatensysteem +TMenuBar.MenuItem.Coords=Coïż½rdinatensysteem TMenuBar.MenuItem.VideoClip=Videoclip TMenuBar.Menu.MeasuringTools=Meetinstrumenten TMenuBar.Menu.AngleUnits=Hoekeenheden TMenuBar.MenuItem.Degrees=Graden TMenuBar.MenuItem.Radians=Radialen -Tracker.Dialog.NoXuggle.Title=Xuggle niet gevonden -Tracker.Dialog.NoXuggle.Message1=Xuggle (platformonafhankelijke video-engine) is niet geïnstalleerd. -Tracker.Dialog.NoXuggle.Message2=Download Xuggle van http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=Over Xuggle... -Tracker.Dialog.AboutXuggle.Title=Over Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=Versie Xuggle -Tracker.Dialog.AboutXuggle.Message.Home=Xuggle home: -Tracker.Dialog.AboutXuggle.Message.Path=Pad voor Xuggle-jar: -Tracker.Dialog.NoVideoEngine.Message1=Er is geen video-engine geïnstalleerd. Zonder een video-engine kunt u alleen +Tracker.Dialog.NoFFMPeg.Title=FFMPeg niet gevonden +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (platformonafhankelijke video-engine) is niet geïż½nstalleerd. +Tracker.Dialog.NoFFMPeg.Message2=Download FFMPeg van http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=Over FFMPeg... +Tracker.Dialog.AboutFFMPeg.Title=Over FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=Versie FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Home=FFMPeg home: +Tracker.Dialog.AboutFFMPeg.Message.Path=Pad voor FFMPeg-jar: +Tracker.Dialog.NoVideoEngine.Message1=Er is geen video-engine geïż½nstalleerd. Zonder een video-engine kunt u alleen Tracker.Dialog.NoVideoEngine.Message2=afbeeldingen (JPEG, PNG) en geanimeerde GIF's openen. -Tracker.Dialog.NoVideoEngine.Message3=Aanbevolen: installeer Tracker opnieuw met de Xuggle video-engine +Tracker.Dialog.NoVideoEngine.Message3=Aanbevolen: installeer Tracker opnieuw met de FFMPeg video-engine Tracker.Dialog.NoVideoEngine.Title=Geen video-engine -Tracker.Dialog.NoXuggle.Message1=Xuggle werkt niet correct. Zorg ervoor dat de vereiste xuggle-jar-bestanden zich -Tracker.Dialog.NoXuggle.Message2=in de thuismap van Tracker bevinden. Voor details, -Tracker.Dialog.NoXuggle.Message3=zie Tracker_LEESMIJ.txt in de thuismap van de Tracker. -Tracker.Dialog.NoXuggle.Message4=Als u Xuggle wilt installeren, downloadt u het nieuwste Tracker-installatieprogramma van -Tracker.Dialog.NoXuggle.Title=Xuggle niet beschikbaar +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg werkt niet correct. Zorg ervoor dat de vereiste ffmpeg-jar-bestanden zich +Tracker.Dialog.NoFFMPeg.Message2=in de thuismap van Tracker bevinden. Voor details, +Tracker.Dialog.NoFFMPeg.Message3=zie Tracker_LEESMIJ.txt in de thuismap van de Tracker. +Tracker.Dialog.NoFFMPeg.Message4=Als u FFMPeg wilt installeren, downloadt u het nieuwste Tracker-installatieprogramma van +Tracker.Dialog.NoFFMPeg.Title=FFMPeg niet beschikbaar Tracker.About.DefaultLocale=Standaard locale Tracker.About.CurrentLanguage=Taal Tracker.Dialog.InsufficientMemory.Title=Onvoldoende geheugen @@ -860,9 +860,9 @@ TrackerPanel.Label.ModelEnd=Eindframe TrackerPanel.Spinner.ModelStart.Tooltip=Stel het startframe in voor dit model TrackerPanel.Spinner.ModelEnd.Tooltip=Stel het eindframe voor dit model in TToolbar.Button.ProtractorVisible.Tooltip=Toon of verberg de hoekmeter -TToolbar.Button.AxesVisible.Tooltip=Toon of verberg de coördinatenassen +TToolbar.Button.AxesVisible.Tooltip=Toon of verberg de coïż½rdinatenassen TToolBar.Button.TrackControl.Tooltip=Toon of verberg spoor controlefuncties -TTrack.Dialog.StepSizeWarning.Message1=Let op: sommige nummers zijn gemarkeerd met een stapgrootte groter dan één, waardoor overgeslagen frames niet zijn gemarkeerd. +TTrack.Dialog.StepSizeWarning.Message1=Let op: sommige nummers zijn gemarkeerd met een stapgrootte groter dan ïż½ïż½n, waardoor overgeslagen frames niet zijn gemarkeerd. TTrack.Dialog.StepSizeWarning.Message2=Het wijzigen van de stapgrootte leidt waarschijnlijk tot gaten in de gegevensverzameling. TTrack.Dialog.StepSizeWarning.Message3=Snelheden en versnellingen rond de gaten kunnen niet worden bepaald voordat alle stappen zijn gemarkeerd. TTrack.Dialog.StepSizeWarning.Title=Let op @@ -878,7 +878,7 @@ TTrackBar.Memory.Menu.SetSize=Stel geheugengrootte in ... TTrackBar.Button.Version=Nu beschikbaar: Versie TTrackBar.Popup.MenuItem.Upgrade=Nu upgraden... TTrackBar.Popup.MenuItem.Ignore=Negeer -XuggleVideo.MenuItem.SmoothPlay=Vlot afspelen (kan traag zijn) +FFMPegVideo.MenuItem.SmoothPlay=Vlot afspelen (kan traag zijn) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=Kalibratietape @@ -907,13 +907,13 @@ WorldTView.Button.World=Wereld # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=waarschuwingen PrefsDialog.Checkbox.WarnIfNoEngine=Geen video-engine -PrefsDialog.Checkbox.WarnIfXuggleError=Niet-fatale Xuggle-fouten +PrefsDialog.Checkbox.WarnIfFFMPegError=Niet-fatale FFMPeg-fouten PropertiesDialog.Title=Eigenschappen ... PropertiesDialog.Label.Author=Auteurs PropertiesDialog.Label.Contact=Contact TActions.Action.Properties=Eigenschappen ... TActions.Action.OpenBrowser=Open bibliotheekbrowser ... -TFrame.Progress.Xuggle=Xuggle laadframe +TFrame.Progress.FFMPeg=FFMPeg laadframe TFrame.Progress.ClickToCancel=(klik om te annuleren) TFrame.Dialog.StalledVideo.Title=Fout bij laden van video TFrame.Dialog.StalledVideo.Message0=De video is vastgelopen tijdens het laden. Dit kan tijdelijk zijn. @@ -926,12 +926,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=Stop TFrame.Dialog.StalledVideo.Button.Wait=Wacht Tracker.Dialog.NoVideoEngine.Checkbox=Dit niet meer laten zien TrackerIO.ZipFileFilter.Description=ZIP-bestand (.zip) -TrackerIO.Dialog.ErrorFFMPEG.Message1=Xuggle is de volgende fout tegengekomen tijdens het openen van deze video: +TrackerIO.Dialog.ErrorFFMPEG.Message1=FFMPeg is de volgende fout tegengekomen tijdens het openen van deze video: TrackerIO.Dialog.ErrorFFMPEG.Message2=Niet alle fouten zijn fataal. Kies Help | Berichtenlog voor volledige foutmeldingen. -TrackerIO.Dialog.ErrorFFMPEG.Message3=Als Xuggle mislukt, kun je de video mogelijk openen met QuickTime. +TrackerIO.Dialog.ErrorFFMPEG.Message3=Als FFMPeg mislukt, kun je de video mogelijk openen met QuickTime. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Opmerking: Op Mac OSX vereist dit het uitvoeren van Tracker in een 32-bits Java VM. -TrackerIO.Dialog.ErrorFFMPEG.Title=Xuggle fout -TrackerIO.ErrorFFMPEG.LogMessage=Schakel voor meer informatie Xuggle-waarschuwingen in het voorkeurenvenster in (Bewerken | Voorkeuren). +TrackerIO.Dialog.ErrorFFMPEG.Title=FFMPeg fout +TrackerIO.ErrorFFMPEG.LogMessage=Schakel voor meer informatie FFMPeg-waarschuwingen in het voorkeurenvenster in (Bewerken | Voorkeuren). TToolBar.Button.OpenBrowser.Tooltip=Open de OSP Digital Library Browser # Additions by Doug Brown 2011-07-20 @@ -995,7 +995,7 @@ AutoTracker.Info.Title.Settings=Instellingen AutoTracker.Info.Title.Tip=Tip AutoTracker.Info.SelectTrack=Selecteer of maak het spoor en het punt dat u wilt via autotrack. AutoTracker.Info.OutsideXAxis=De x-as passeert niet door het zoekgebied. Uw opties zijn: -AutoTracker.Info.NewKeyFrame=-- stap terug en verander de evolutiesnelheid of shift-control-klik om een ??nieuw sleutelframe te definiëren +AutoTracker.Info.NewKeyFrame=-- stap terug en verander de evolutiesnelheid of shift-control-klik om een ??nieuw sleutelframe te definiïż½ren AutoTracker.Info.Replace=-- aanvaard de overeenkomst AutoTracker.Info.Keep=-- sla dit frame over en laat het ongewijzigd AutoTracker.Info.PossibleReplace=Een mogelijke overeenkomst wordt getoond. Uw opties zijn: @@ -1084,7 +1084,7 @@ ExportTRKDialog.Complete.Message1=De Tracker-clip is opgeslagen als ExportTRKDialog.Complete.Message2=Wilt u het nu in Tracker openen? ExportTRKDialog.Complete.Title=Export volledig ExportTRKDialog.Title=Trackerclip exporteren -ExportTRKDialog.Message1=Deze (1) exporteert de videoclip, (2) converteert de tabgegevens naar de geëxporteerde video en (3) slaat de geconverteerde tab op als een nieuw Tracker-bestand. +ExportTRKDialog.Message1=Deze (1) exporteert de videoclip, (2) converteert de tabgegevens naar de geïż½xporteerde video en (3) slaat de geconverteerde tab op als een nieuw Tracker-bestand. ExportTRKDialog.Message2=De Tracker- en videobestanden worden opgeslagen in dezelfde map met dezelfde naam maar met verschillende extensies. TMenuBar.MenuItem.TabClip=Trackerclip TMenuBar.Menu.CalibrationTools=Calibratie instrumenten @@ -1187,18 +1187,18 @@ PrefsDialog.Checkbox.32BitVM=32-bits PrefsDialog.Checkbox.WarnVariableDuration=Variabele framelengtes PrefsDialog.Button.NoEngine=Geen PrefsDialog.Dialog.SwitchToQT.Message=Overschakelen naar QuickTime wijzigt ook de Java VM naar 32-bits -PrefsDialog.Dialog.SwitchToXuggle32.Message=Overschakelen naar Xuggle wijzigt ook de Java VM naar 32-bits -PrefsDialog.Dialog.SwitchToXuggle64.Message=Overschakelen naar Xuggle wijzigt ook de Java VM naar 64-bits +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=Overschakelen naar FFMPeg wijzigt ook de Java VM naar 32-bits +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=Overschakelen naar FFMPeg wijzigt ook de Java VM naar 64-bits PrefsDialog.Dialog.SwitchVM.Title=Java VM gewijzigd PrefsDialog.Dialog.SwitchTo32.Message=Overschakelen naar een 32-bits Java VM wijzigt ook de video-engine naar QuickTime. -PrefsDialog.Dialog.SwitchTo64.Message=Overschakelen naar een 64-bits Java VM wijzigt ook de video-engine naar Xuggle. +PrefsDialog.Dialog.SwitchTo64.Message=Overschakelen naar een 64-bits Java VM wijzigt ook de video-engine naar FFMPeg. PrefsDialog.Dialog.SwitchEngine.Title=Video-engine gewijzigd PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=Geen video processing is beschikbaar voor een 64-bits Java VM. Je kan nog PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=steeds afbeeldingen (JPEG, PNG) an geanimeerde GIF's openen. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Ben je zeker dat je wil overschakelen naar een 64-bits VM ? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=Geen 64-bits video-engine -PrefsDialog.Dialog.No32bitVMXuggle.Message=Een 32-bits Java VM moet geïnstalleerd zijn alvorens Xuggle gebruikt kan worden -PrefsDialog.Dialog.No32bitVMQT.Message=Een 32-bits Java VM moet geïnstalleerd zijn alvorens QuickTime gebruikt kan worden +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=Een 32-bits Java VM moet geïż½nstalleerd zijn alvorens FFMPeg gebruikt kan worden +PrefsDialog.Dialog.No32bitVMQT.Message=Een 32-bits Java VM moet geïż½nstalleerd zijn alvorens QuickTime gebruikt kan worden PrefsDialog.Dialog.No32bitVM.Message=Voor meer informatie, kijk Tracker Help: Installatie. PrefsDialog.Dialog.No32bitVM.Title=32-bits VM benodigd PrefsDialog.Button.ShowHelpNow=Toon Help nu @@ -1206,23 +1206,23 @@ TActions.Dialog.AboutVideo.FramesPerSecond.NotConstant=NIET CONSTANT TMenuBar.MenuItem.CheckFrameDurations=Duurlengte Frame TMenuBar.MenuItem.ExportZIP=Tracker Zip Tracker.Dialog.Install32BitVM.Message=Je moet een 32-bit Java VM installeren alvorens de video-engine kan worden gebruikt. -Tracker.Dialog.SwitchTo32BitVM.Message1=Een of meer video-engines zijn geïnstalleerd maar niet beschikbaar omdat ze +Tracker.Dialog.SwitchTo32BitVM.Message1=Een of meer video-engines zijn geïż½nstalleerd maar niet beschikbaar omdat ze Tracker.Dialog.SwitchTo32BitVM.Message2=een 32-bits Java VM vereisen en u loopt momenteel in een 64-bits VM. Tracker.Dialog.SwitchTo32BitVM.Question=Wil je opnieuw starten met een 32-bits VM en standaard-engine? Tracker.Dialog.Button.RelaunchNow=Ja, start nu opnieuw op Tracker.Dialog.Button.ShowPrefs=Nee, maar toon voorkeuren Tracker.Dialog.Button.ContinueWithoutEngine=Nee, ga door zonder video -Tracker.Dialog.EngineProblems.Message1=Een of meer video-engines zijn geïnstalleerd maar werken niet. -Tracker.Dialog.EngineProblems.Message2=Zie Help | Diagnose | Info over Xuggle of QuickTime voor meer informatie. -Tracker.Dialog.ReplaceXuggle.Message1=We raden je aan je Xuggle video-engine te vervangen door Xuggle -Tracker.Dialog.ReplaceXuggle.Message2=versie 3.4 door Tracker (versie 4.75 of hoger) te herinstalleren, en -Tracker.Dialog.ReplaceXuggle.Message3=Xuggle te selecteren bij de installatie-opties. +Tracker.Dialog.EngineProblems.Message1=Een of meer video-engines zijn geïż½nstalleerd maar werken niet. +Tracker.Dialog.EngineProblems.Message2=Zie Help | Diagnose | Info over FFMPeg of QuickTime voor meer informatie. +Tracker.Dialog.ReplaceFFMPeg.Message1=We raden je aan je FFMPeg video-engine te vervangen door FFMPeg +Tracker.Dialog.ReplaceFFMPeg.Message2=versie 4.0 door Tracker (versie 4.75 of hoger) te herinstalleren, en +Tracker.Dialog.ReplaceFFMPeg.Message3=FFMPegle te selecteren bij de installatie-opties. TrackerIO.Dialog.DurationIsConstant.Message=Lengte van de frameduur is altijd gelijk (constante fps). TrackerIO.ZIPResourceFilter.Description=Tracker ZIP-bestand (.trz) TToolbar.Button.Desktop.Tooltip=Toon aanvullende HTML- en / of PDF-documenten ZipResourceDialog.BadModels.Message1=De videoclip bevat het startframe van de volgende sporen ZipResourceDialog.BadModels.Message2=van het deeltjesmodel niet. Als je de video bijwerkt, worden de -ZipResourceDialog.BadModels.Message3=modellen NIET opgenomen in de geëxporteerde ZIP van de Tracker. +ZipResourceDialog.BadModels.Message3=modellen NIET opgenomen in de geïż½xporteerde ZIP van de Tracker. ZipResourceDialog.BadModels.Question=Wenst u door te gaan en de modellen weg te gooien? ZipResourceDialog.BadModels.Title=Clipmodel Conflicten TMenuBar.MenuItem.EditVideoFrames=Laad alle afbeeldingen @@ -1259,7 +1259,7 @@ MainTView.Popup.MenuItem.Deselect=Deselecteer punten ZipResourceDialog.Checkbox.PreviewThumbnail=Voorvertoning ZipResourceDialog.Dialog.BadFileName.Message=Bestandsnamen kunnen volgende tekens/symbolen niet bevatten ZipResourceDialog.Dialog.BadFileName.Title=Ongeldige bestandsnaam -ZipResourceDialog.Dialog.ExportFailed.Message=Het Zip-bestand kon niet worden geëxporteerd +ZipResourceDialog.Dialog.ExportFailed.Message=Het Zip-bestand kon niet worden geïż½xporteerd ZipResourceDialog.Dialog.ExportFailed.Title=Export mislukt PrefsDialog.Button.SetCache=Cache instellen @@ -1273,7 +1273,7 @@ Tracker.Dialog.MemoryReduced.Message3=Voor meer informatie, kijk Help|Diagnose|S TrackPlottingPanel.Popup.MenuItem.ShowZero=Toon TableTrackView.Menu.TextColumn.Text=Tekstkolommen TableTrackView.Menu.TextColumn.Tooltip=Beheer bewerkbare tekstkolommen -TableTrackView.Action.CreateTextColumn.Text=Creëer... +TableTrackView.Action.CreateTextColumn.Text=Creïż½er... TableTrackView.Action.DeleteTextColumn.Text=Verwijder TableTrackView.Action.RenameTextColumn.Text=Hernoem TableTrackView.Dialog.NameColumn.Message=Vul alstublieft een kolomnaam in. @@ -1282,9 +1282,9 @@ TableTrackView.Dialog.NameColumn.Title=tekstkolom TToolBar.MenuItem.StretchOff=Opnieuw instellen # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Xuggle Versie -PrefsDialog.Checkbox.WarnCopyFailed=Fout bij het kopiëren van video-engine-bestand -Tracker.Dialog.FailedToCopy.Title=Fout bij het kopiëren van het bestand +PrefsDialog.Checkbox.WarnFFMPegVersion=FFMPeg Versie +PrefsDialog.Checkbox.WarnCopyFailed=Fout bij het kopiïż½ren van video-engine-bestand +Tracker.Dialog.FailedToCopy.Title=Fout bij het kopiïż½ren van het bestand Velocity.Dialog.Color.Title=Kies kleursnelheid Acceleration.Dialog.Color.Title=Kies kleurversnelling TMenuBar.Menu.FontSize=Lettertype niveau @@ -1313,7 +1313,7 @@ TToolbar.Button.Desktop.Menu.OpenFile=Bestanden # Additions by Doug Brown 2014-10-24 Tracker.Prefs.MenuItem.Text=Voorkeurenbestand Tracker.Prefs.NotFound=Voorkeurenbestand niet gevonden -TapeMeasure.Alert.UnfixScale.Message1=De schaal van het coördinatenstelsel moet worden losgemaakt om de uiteinden te bevestigen. +TapeMeasure.Alert.UnfixScale.Message1=De schaal van het coïż½rdinatenstelsel moet worden losgemaakt om de uiteinden te bevestigen. TapeMeasure.Alert.UnfixScale.Message2=Wil je de oplossing nu ongedaan maken ? TapeMeasure.Alert.UnfixScale.Title=Schaling is opgelost Tracker.Dialog.StarterWarning.Title=Geen standaard opstart @@ -1370,7 +1370,7 @@ ParticleDataTrack.Dialog.NoNewData.Title=Geen nieuwe gegevens ParticleDataTrackFunctionPanel.Instructions.General=Dubbelklik starttijd om te bewerken of gebruik spinners om video- en gegevensinstellingen te wijzigen. TrackerPanel.Dialog.NoData.Message=Er zijn geen gegeven gevonden TrackerPanel.Dialog.NoData.Title=Geen gegevens -TrackerPanel.Dialog.Exception.Message=De gegevens konden niet worden geïmporteerd omdat de volgende uitzondering zich heeft voorgedaan +TrackerPanel.Dialog.Exception.Message=De gegevens konden niet worden geïż½mporteerd omdat de volgende uitzondering zich heeft voorgedaan TrackerPanel.Dialog.Exception.Title=Importeren gegevens mislukt TActions.Dialog.URLResourceNotFound.Message=Er kon geen bron gevonden worden op de opgegeven link TActions.Dialog.URLResourceNotFound.Title=Bron niet gevonden @@ -1406,7 +1406,7 @@ CircleFitter.MenuItem.Inspector=Kopieer puntmassa stappen... CircleFitter.MenuItem.ClearPoints=Wis punten CircleFitter.MenuItem.DeletePoint=Verwijder geselecteerde punten CircleFitter.Inspector.Instructions1=Dit past een cirkel tot 3 of meer datapunten. -CircleFitter.Inspector.Instructions2=U kunt de punten handmatig markeren of kopiëren vanuit een massabron. +CircleFitter.Inspector.Instructions2=U kunt de punten handmatig markeren of kopiïż½ren vanuit een massabron. CircleFitter.Inspector.Label.SourceTrack=Bronspoor CircleFitter.Inspector.Label.From=Stappen CircleFitter.Inspector.Label.To=naar @@ -1473,7 +1473,7 @@ TTrack.MenuItem.NumberFormat=Nummerformaten... TTrack.NumberField.Format.Tooltip=Rechtermuisklil om formaat in te stellen TTrack.NumberField.Format.Tooltip.OSX=Ctrl+klik om formaat in te stellen NumberFormatSetter.Title=Nummerformaten -NumberFormatSetter.ApplyToVariables.Text=Selecteer een spoor en één of meer varaiabelen: +NumberFormatSetter.ApplyToVariables.Text=Selecteer een spoor en ïż½ïż½n of meer varaiabelen: NumberFormatSetter.TitledBorder.ApplyTo.Text=Wijzigingen aanbrengen in: NumberFormatSetter.Button.ApplyToTrackOnly.Text=Enkel dit spoor NumberFormatSetter.Button.ApplyToTrackType.Text=Alle sporen van het type @@ -1512,7 +1512,7 @@ Tracker.Cursor.Autotrack.Keyframe.Description=Autotracker hoofdframe AutoTracker.Wizard.Button.Options=Opties AutoTracker.Wizard.Menuitem.SearchFixed=Zoek vast gebied AutoTracker.Wizard.Menuitem.CopyMatchScores=Kopieer gelijke data -CircleFitter.MenuItem.CopyToClipboard.Text=Kopiëren naar klembord +CircleFitter.MenuItem.CopyToClipboard.Text=Kopiïż½ren naar klembord CircleFitter.MenuItem.CopyToClipboard.Tooltip=Kopieer datapuntposities naar klembord AutoTracker.Wizard.Button.Search.Tooltip=Klik om te beginnen met zoeken of shift+klik voor meer opties AutoTracker.Wizard.Button.SearchThis.Tooltip=Zoek opnieuw in het huidige frame diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_pl.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_pl.properties index 53e64be9..40490959 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_pl.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_pl.properties @@ -719,7 +719,7 @@ PrefsDialog.Checkbox.DefaultSize=U\u017cyj domy\u015blnych PrefsDialog.Checkbox.HintsOn=Poka\u017c wskaz\u00f3wki domy\u015blnie PrefsDialog.Tab.Video.Title=Wideo PrefsDialog.VideoPref.BorderTitle=Silnik wideo -PrefsDialog.Button.Xuggle=Xuggle +PrefsDialog.Button.FFMPeg=FFMPeg PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=Zarz\u0105dzenie pami\u0119ci\u0105 niedost\u0119pne podczas korzystanie z Web Start. PrefsDialog.Dialog.WebStart.Title=Tryb Web Start @@ -734,9 +734,9 @@ PrefsDialog.Upgrades.Weekly=tygodniowo PrefsDialog.Upgrades.Monthly=miesi\u0119cznie PrefsDialog.Upgrades.Never=Nigdy PrefsDialog.Button.CheckForUpgrade=Sprawd\u017a teraz -PrefsDialog.Xuggle.Speed.BorderTitle=Xuggle Video Playback -PrefsDialog.Xuggle.Slow=P\u0142ynnie (mo\u017ce pracowa\u0107 wolno) -PrefsDialog.Xuggle.Fast=Szybko (mo\u017ce zrywa\u0107) +PrefsDialog.FFMPeg.Speed.BorderTitle=FFMPeg Video Playback +PrefsDialog.FFMPeg.Slow=P\u0142ynnie (mo\u017ce pracowa\u0107 wolno) +PrefsDialog.FFMPeg.Fast=Szybko (mo\u017ce zrywa\u0107) PrefsDialog.CalibrationTool.BorderTitle=Domy\u015blne narz\u0119dzia kalibracyjne Protractor.Name=K\u0105tomierz Protractor.New.Name=k\u0105tomierz @@ -816,23 +816,23 @@ TMenuBar.Menu.MeasuringTools=Narz\u0119dzie pomiarowe TMenuBar.Menu.AngleUnits=Jednostki k\u0105ta TMenuBar.MenuItem.Degrees=Stopnie TMenuBar.MenuItem.Radians=Radiany -Tracker.Dialog.NoXuggle.Title=Xuggle nieznaleziony -Tracker.Dialog.NoXuggle.Message1=Xuggle (cross-platform video engine) niezainstalowany. -Tracker.Dialog.NoXuggle.Message2=Pobierz Xuggle z http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=O Xuggle... -Tracker.Dialog.AboutXuggle.Title=O Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=Wersja Xuggle -Tracker.Dialog.AboutXuggle.Message.Home=Xuggle home: -Tracker.Dialog.AboutXuggle.Message.Path=Xuggle jar path: +Tracker.Dialog.NoFFMPeg.Title=FFMPeg nieznaleziony +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (cross-platform video engine) niezainstalowany. +Tracker.Dialog.NoFFMPeg.Message2=Pobierz FFMPeg z http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=O FFMPeg... +Tracker.Dialog.AboutFFMPeg.Title=O FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=Wersja FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Home=FFMPeg home: +Tracker.Dialog.AboutFFMPeg.Message.Path=FFMPeg jar path: Tracker.Dialog.NoVideoEngine.Message1=Nie zainstalowano silnika wideo. Bez niego, Tracker.Dialog.NoVideoEngine.Message2=mo\u017cna jedynie otworzy\u0107 obraz (JPEG, PNG) i animowane pliki GIFs. -Tracker.Dialog.NoVideoEngine.Message3=Zalecane: przeinstalowanie programu Tracker z silnikiem wideo Xuggle. +Tracker.Dialog.NoVideoEngine.Message3=Zalecane: przeinstalowanie programu Tracker z silnikiem wideo FFMPeg. Tracker.Dialog.NoVideoEngine.Title=Brak silnika wideo -Tracker.Dialog.NoXuggle.Message1=Xuggle nie pracuje poprawnie. Upewnij si\u0119, \u017ce wymagane -Tracker.Dialog.NoXuggle.Message2=xuggle jar pliki znajduj\u0105 si\u0119 w katalogu domowym programu Tracker. Szczeg\u00f3\u0142y, -Tracker.Dialog.NoXuggle.Message3=znajdziesz w pliku Tracker_README.txt. -Tracker.Dialog.NoXuggle.Message4=By zainstalowa\u0107 Xuggle, pobierz najnowasz\u0105 wersj\u0119 programu Tracker -Tracker.Dialog.NoXuggle.Title=Xuggle niedost\u0119pny +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg nie pracuje poprawnie. Upewnij si\u0119, \u017ce wymagane +Tracker.Dialog.NoFFMPeg.Message2=ffmpeg jar pliki znajduj\u0105 si\u0119 w katalogu domowym programu Tracker. Szczeg\u00f3\u0142y, +Tracker.Dialog.NoFFMPeg.Message3=znajdziesz w pliku Tracker_README.txt. +Tracker.Dialog.NoFFMPeg.Message4=By zainstalowa\u0107 FFMPeg, pobierz najnowasz\u0105 wersj\u0119 programu Tracker +Tracker.Dialog.NoFFMPeg.Title=FFMPeg niedost\u0119pny Tracker.About.DefaultLocale=Lokalizacja domy\u015blna Tracker.About.CurrentLanguage=J\u0119zyk Tracker.Dialog.InsufficientMemory.Title=Niedostateczna ilo\u015b\u0107 pami\u0119ci @@ -878,7 +878,7 @@ TTrackBar.Memory.Menu.SetSize=Ustaw rozmiar pami\u0119ci... TTrackBar.Button.Version=Niedost\u0119pne: wersja TTrackBar.Popup.MenuItem.Upgrade=Aktualizuj teraz... TTrackBar.Popup.MenuItem.Ignore=Ignoruj -XuggleVideo.MenuItem.SmoothPlay=P\u0142ynne odtwarzanie (mo\u017ce by\u0107 wolne) +FFMPegVideo.MenuItem.SmoothPlay=P\u0142ynne odtwarzanie (mo\u017ce by\u0107 wolne) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=Rodzaj kalibracji @@ -907,13 +907,13 @@ WorldTView.Button.World=\u015awiat # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=Ostrze\u017cenia PrefsDialog.Checkbox.WarnIfNoEngine=Brak silnika wideo -PrefsDialog.Checkbox.WarnIfXuggleError=Niekluczowe b\u0142\u0119dy Xuggle +PrefsDialog.Checkbox.WarnIfFFMPegError=Niekluczowe b\u0142\u0119dy FFMPeg PropertiesDialog.Title=W\u0142a\u015bciwo\u015bci PropertiesDialog.Label.Author=Autorzy PropertiesDialog.Label.Contact=Kontakt TActions.Action.Properties=W\u0142a\u015bciwo\u015bci... TActions.Action.OpenBrowser=Otw\u00f3rz bibliotek\u0119 przegl\u0105darki... -TFrame.Progress.Xuggle=Xuggle \u0142adowana klatka +TFrame.Progress.FFMPeg=FFMPeg \u0142adowana klatka TFrame.Progress.ClickToCancel=(kliknij by skasowa\u0107) TFrame.Dialog.StalledVideo.Title=B\u0142\u0105d \u0142adowania wideo TFrame.Dialog.StalledVideo.Message0=Wideo zatrzymane podczas \u0142adowania. Mo\u017ce to by\u0107 sytuacja przej\u015bciowa. @@ -926,12 +926,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=Zatrzymaj TFrame.Dialog.StalledVideo.Button.Wait=Czekaj Tracker.Dialog.NoVideoEngine.Checkbox=Nie pokazuj wi\u0119cej TrackerIO.ZipFileFilter.Description=Plik ZIP(.zip) -TrackerIO.Dialog.ErrorFFMPEG.Message1=Xuggle napodka\u0142 poni\u017csze b\u0142\u0119dy podczas otwierania pliku wideo: +TrackerIO.Dialog.ErrorFFMPEG.Message1=FFMPeg napodka\u0142 poni\u017csze b\u0142\u0119dy podczas otwierania pliku wideo: TrackerIO.Dialog.ErrorFFMPEG.Message2=Nie wszystkie b\u0142\u0119dy s\u0105 kluczowe. Pe\u0142en opis b\u0142\u0119d\u00f3w znajduje si\u0119 w Pomoc|Komunikaty \u0142adowania. -TrackerIO.Dialog.ErrorFFMPEG.Message3=Je\u015bli Xuggle zawi\u00f3d\u0142 spr\u00f3buj otworzy\u0107 plik wideo za pomoc\u0105 QuickTime. +TrackerIO.Dialog.ErrorFFMPEG.Message3=Je\u015bli FFMPeg zawi\u00f3d\u0142 spr\u00f3buj otworzy\u0107 plik wideo za pomoc\u0105 QuickTime. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Wskaz\u00f3wka: Dla Mac OSX niezb\u0119dny jest Tracker z 32-bit Java VM. -TrackerIO.Dialog.ErrorFFMPEG.Title=B\u0142\u0105d Xuggle -TrackerIO.ErrorFFMPEG.LogMessage=Wi\u0119cej szczeg\u00f3\u0142\u00f3w po uruchomieniu ostrze\u017ce\u0144 Xuggle w oknie preferencji (Edytuj|Preferencje). +TrackerIO.Dialog.ErrorFFMPEG.Title=B\u0142\u0105d FFMPeg +TrackerIO.ErrorFFMPEG.LogMessage=Wi\u0119cej szczeg\u00f3\u0142\u00f3w po uruchomieniu ostrze\u017ce\u0144 FFMPeg w oknie preferencji (Edytuj|Preferencje). TToolBar.Button.OpenBrowser.Tooltip=Otw\u00f3rz cyfrow\u0105 bibliotek\u0119 OSP przegl\u0105darki # Additions by Doug Brown 2011-07-20 @@ -1187,17 +1187,17 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=Zmienna d\u0142ugo\u015bci klatki PrefsDialog.Button.NoEngine=Nic PrefsDialog.Dialog.SwitchToQT.Message=Prze\u0142\u0105czanie do QuickTime atak\u017ce zmienia Java VM do 32-bit. -PrefsDialog.Dialog.SwitchToXuggle32.Message=Prze\u0142\u0105czanie do Xuggle tak\u017ce zmienia Java VM do 32-bit. -PrefsDialog.Dialog.SwitchToXuggle64.Message=Prze\u0142\u0105czanie do Xuggle tak\u017ce zmienia Java VM do 64-bit. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=Prze\u0142\u0105czanie do FFMPeg tak\u017ce zmienia Java VM do 32-bit. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=Prze\u0142\u0105czanie do FFMPeg tak\u017ce zmienia Java VM do 64-bit. PrefsDialog.Dialog.SwitchVM.Title=Zmieniono Java VM PrefsDialog.Dialog.SwitchTo32.Message=Prze\u0142\u0105czanie do 32-bit Java VM tak\u017ce zmienia silnik wideo na QuickTime. -PrefsDialog.Dialog.SwitchTo64.Message=Prze\u0142\u0105czanie do 64-bit Java VM tak\u017ce zmienia silnik wideo na Xuggle. +PrefsDialog.Dialog.SwitchTo64.Message=Prze\u0142\u0105czanie do 64-bit Java VM tak\u017ce zmienia silnik wideo na FFMPeg. PrefsDialog.Dialog.SwitchEngine.Title=Silnik Wideo Zmieniono PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=Brak silnika wideo dla 64-bit Java VM. Mo\u017cliwe PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=nadal otwarcie obraz\u00f3w (JPEG, PNG) i animowanych GIFs. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Na pewno prze\u0142\u0105czy\u0107 do 64-bit VM? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=Brak Silnika Wideo 64-bit -PrefsDialog.Dialog.No32bitVMXuggle.Message=32-bit Java VM musi zosta\u0107 zainstalowana przed korzystaniem z Xuggle. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=32-bit Java VM musi zosta\u0107 zainstalowana przed korzystaniem z FFMPeg. PrefsDialog.Dialog.No32bitVMQT.Message=32-bit Java VM musi zosta\u0107 zainstalowana przed korzystaniem z QuickTime. PrefsDialog.Dialog.No32bitVM.Message=Wi\u0119cej informacji patrz Pomoc: Instalacja. PrefsDialog.Dialog.No32bitVM.Title=Wynmagany 32-bit VM @@ -1213,10 +1213,10 @@ Tracker.Dialog.Button.RelaunchNow=Tak, za\u0142aduj teraz Tracker.Dialog.Button.ShowPrefs=Nie, ale poka\u017c preferencje Tracker.Dialog.Button.ContinueWithoutEngine=Nie, kontynuuj bez wideo Tracker.Dialog.EngineProblems.Message1=Jeden lub wi\u0119cej silnik\u00f3w wideo jest azinstalowanych i nie pracuje poprawnie. -Tracker.Dialog.EngineProblems.Message2=Wi\u0119cej szczeg\u00f3\u0142\u00f3w patrz Pomoc|Diagnostyka|About Xuggle or QuickTime. -Tracker.Dialog.ReplaceXuggle.Message1=Zalecamu zast\u0105pienie obecnego silnika wideo Xuggle przez -Tracker.Dialog.ReplaceXuggle.Message2=Xuggle versja 3.4 dzi\u0119ki przeinstalowaniu Trackera (wersja 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=lub powy\u017cej) i wybierz Xuggle podczas instalacji. +Tracker.Dialog.EngineProblems.Message2=Wi\u0119cej szczeg\u00f3\u0142\u00f3w patrz Pomoc|Diagnostyka|About FFMPeg or QuickTime. +Tracker.Dialog.ReplaceFFMPeg.Message1=Zalecamu zast\u0105pienie obecnego silnika wideo FFMPeg przez +Tracker.Dialog.ReplaceFFMPeg.Message2=FFMPeg versja 3.4 dzi\u0119ki przeinstalowaniu Trackera (wersja 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=lub powy\u017cej) i wybierz FFMPeg podczas instalacji. TrackerIO.Dialog.DurationIsConstant.Message=Wszystkie czasy klatek s\u0105 r\u00f3wne TrackerIO.ZIPResourceFilter.Description=Plik Tracker ZIP (.trz) TToolbar.Button.Desktop.Tooltip=Wy\u015bwietl do\u0142\u0105czony plik HTML i/lub PDF @@ -1282,7 +1282,7 @@ TableTrackView.Dialog.NameColumn.Title=Tekst kolumny TToolBar.MenuItem.StretchOff=Prze\u0142\u0105duj # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Wersja Xuggle +PrefsDialog.Checkbox.WarnFFMPegVersion=Wersja FFMPeg PrefsDialog.Checkbox.WarnCopyFailed=B\u0142\u0105d sinika wideo kopii Tracker.Dialog.FailedToCopy.Title=B\u0142\u0105d pliku kopii Velocity.Dialog.Color.Title=Wybierz kolor pr\u0119dko\u015bci diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_pt.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_pt.properties index 3a29e94c..2061b269 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_pt.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_pt.properties @@ -740,7 +740,7 @@ PrefsDialog.Checkbox.DefaultSize=Usar padr PrefsDialog.Checkbox.HintsOn=Mostrar as dicas como padro PrefsDialog.Tab.Video.Title=Vídeo PrefsDialog.VideoPref.BorderTitle=Mecanismo de Vídeo -PrefsDialog.Button.Xuggle=Xuggle (recomendado) +PrefsDialog.Button.FFMPeg=FFMPeg (recomendado) PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=Gesto da memória indisponível quando Web Start é utilizado. PrefsDialog.Dialog.WebStart.Title=Modo Web Start @@ -755,9 +755,9 @@ PrefsDialog.Upgrades.Weekly=Semanalmente PrefsDialog.Upgrades.Monthly=Mensalmente PrefsDialog.Upgrades.Never=Nunca PrefsDialog.Button.CheckForUpgrade=Verificar Agora -PrefsDialog.Xuggle.Speed.BorderTitle=Reproduço de Vídeo -PrefsDialog.Xuggle.Slow=Suave (pode ser lenta) -PrefsDialog.Xuggle.Fast=Rápida (pode ser grosseira) +PrefsDialog.FFMPeg.Speed.BorderTitle=Reproduço de Vídeo +PrefsDialog.FFMPeg.Slow=Suave (pode ser lenta) +PrefsDialog.FFMPeg.Fast=Rápida (pode ser grosseira) PrefsDialog.CalibrationTool.BorderTitle=Ferramenta de Calibraço Padro Protractor.Name=Transferidor Protractor.New.Name=transferidor @@ -837,22 +837,22 @@ TMenuBar.Menu.MeasuringTools=Ferramentas de Medida TMenuBar.Menu.AngleUnits=Unidades de ângulo TMenuBar.MenuItem.Degrees=Graus TMenuBar.MenuItem.Radians=Radianos -Tracker.Dialog.NoXuggle.Title=Xuggle no encontrado -Tracker.Dialog.NoXuggle.Message1=Xuggle (multiplataforma de mecanismo vídeo) no está instalada. -Tracker.Dialog.NoXuggle.Message2=Descarregar Xuggle de http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=Acerca do Xuggle... -Tracker.Dialog.AboutXuggle.Title=Acerca do Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=Verso do Xuggle -Tracker.Dialog.AboutXuggle.Message.Home=Página do Xuggle: -Tracker.Dialog.AboutXuggle.Message.Path=Caminho do Xuggle: +Tracker.Dialog.NoFFMPeg.Title=FFMPeg no encontrado +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (multiplataforma de mecanismo vídeo) no está instalada. +Tracker.Dialog.NoFFMPeg.Message2=Descarregar FFMPeg de http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=Acerca do FFMPeg... +Tracker.Dialog.AboutFFMPeg.Title=Acerca do FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=Verso do FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Home=Página do FFMPeg: +Tracker.Dialog.AboutFFMPeg.Message.Path=Caminho do FFMPeg: Tracker.Dialog.NoVideoEngine.Message1=Nenhum mecanismo de vídeo foi encontrado! Como tal, o Tracker pode Tracker.Dialog.NoVideoEngine.Message2=abrir apenas imagens, sequências de imagens e GIFs animados. -Tracker.Dialog.NoVideoEngine.Message3=Para instalar o Xuggle, mecanismo de vídeo preferido pelo Tracker em +Tracker.Dialog.NoVideoEngine.Message3=Para instalar o FFMPeg, mecanismo de vídeo preferido pelo Tracker em Tracker.Dialog.NoVideoEngine.Message4=todas as plataformas, descarregue a última verso do instalador do Tracker. Tracker.Dialog.NoVideoEngine.Title=Falta de Mecanismo de Vídeo -Tracker.Dialog.NoXuggle.Message1=o Xuggle, mecanismo de vídeo preferido pelo Tracker, ainda no está instalado. -Tracker.Dialog.NoXuggle.Message2=Para instalar o Xuggle, descarregue a última verso do instalador do Tracker -Tracker.Dialog.NoXuggle.Title=falta o Xuggle +Tracker.Dialog.NoFFMPeg.Message1=o FFMPeg, mecanismo de vídeo preferido pelo Tracker, ainda no está instalado. +Tracker.Dialog.NoFFMPeg.Message2=Para instalar o FFMPeg, descarregue a última verso do instalador do Tracker +Tracker.Dialog.NoFFMPeg.Title=falta o FFMPeg Tracker.About.DefaultLocale=Local padro Tracker.About.CurrentLanguage=Idioma Tracker.Dialog.InsufficientMemory.Title=Memória insuficiente @@ -898,7 +898,7 @@ TTrackBar.Memory.Menu.SetSize=Definir o tamanho da mem TTrackBar.Button.Version=Agora disponível: verso TTrackBar.Popup.MenuItem.Upgrade=Atualizar Agora... TTrackBar.Popup.MenuItem.Ignore=Ignorar -XuggleVideo.MenuItem.SmoothPlay=Executar suavemente (poderá ser lento) +FFMPegVideo.MenuItem.SmoothPlay=Executar suavemente (poderá ser lento) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=Fita de Calibraço @@ -927,13 +927,13 @@ WorldTView.Button.World=Mundo # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=Avisos PrefsDialog.Checkbox.WarnIfNoEngine=Sem motor Vídeo -PrefsDialog.Checkbox.WarnIfXuggleError=Erros Xuggle no fatais +PrefsDialog.Checkbox.WarnIfFFMPegError=Erros FFMPeg no fatais PropertiesDialog.Title=Propriedades PropertiesDialog.Label.Author=Autor PropertiesDialog.Label.Contact=Contacto TActions.Action.Properties=Propriedades... TActions.Action.OpenBrowser=Abrir Navegador da Biblioteca... -TFrame.Progress.Xuggle=Janela de carregamento do Xuggle +TFrame.Progress.FFMPeg=Janela de carregamento do FFMPeg TFrame.Progress.ClickToCancel=(clicar para cancelar) TFrame.Dialog.StalledVideo.Title=Erro a carregar o Vídeo TFrame.Dialog.StalledVideo.Message0=O vídeo parou durante o carregamento. Isso pode ser temporário. @@ -946,12 +946,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=Parar TFrame.Dialog.StalledVideo.Button.Wait=esperar Tracker.Dialog.NoVideoEngine.Checkbox=No mostrar outra vez TrackerIO.ZipFileFilter.Description=Ficheiros ZIP -TrackerIO.Dialog.ErrorFFMPEG.Message1=O Xuggle encontrou os seguintes erros ao abrir o vídeo: +TrackerIO.Dialog.ErrorFFMPEG.Message1=O FFMPeg encontrou os seguintes erros ao abrir o vídeo: TrackerIO.Dialog.ErrorFFMPEG.Message2=Nem todos os erros so fatais. Para todas as mensagens de erro, escolher Ajuda|Menssagem. -TrackerIO.Dialog.ErrorFFMPEG.Message3=Se o Xuggle falhar, poderá abrir o vídeo com o QuickTime. +TrackerIO.Dialog.ErrorFFMPEG.Message3=Se o FFMPeg falhar, poderá abrir o vídeo com o QuickTime. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Nota: No Mac OSX, isto requer corer o Tracker numa 32-bit Java VM. -TrackerIO.Dialog.ErrorFFMPEG.Title=Erro no Xuggle -TrackerIO.ErrorFFMPEG.LogMessage=Para mais detalhes, ative os avisos do Xuggle na caixa de preferências (Editar|Preferências). +TrackerIO.Dialog.ErrorFFMPEG.Title=Erro no FFMPeg +TrackerIO.ErrorFFMPEG.LogMessage=Para mais detalhes, ative os avisos do FFMPeg na caixa de preferências (Editar|Preferências). TToolBar.Button.OpenBrowser.Tooltip=Abrir o Navegador da Biblioteca Digital da OSP # Additions by Doug Brown 2011-07-20 @@ -1076,7 +1076,7 @@ AlgorithmDialog.FiniteDifference.Message2=Velocidade: v[i] = (x[i+1] - x[i-1]) AlgorithmDialog.FiniteDifference.Message3=Aceleraço: a[i] = (2*x[i+2] - x[i+1] - 2*x[i] - x[i-1] + 2*x[i-2]) / (7*dt) AlgorithmDialog.BounceDetect.Message1=Este Algoritmo suaviza o cálculo de velocidades e aceleraçġes, mas também deteta variaçġes súbitas na velocidade. AlgorithmDialog.BounceDetect.Message2=Cuidado: pode produzir artefactos. Para mais informaçġes, consultar: -AlgorithmDialog.BounceDetect.Message3=http://gasstationwithoutpumps.wordpress.com/2011/11/08/tracker-video-analysis-tool-fixes/ +AlgorithmDialog.BounceDetect.Message3=http://www.ffmpeg.org/download.html. TMenuBar.Menu.Diagnostics=Diagnósticos # Additions by Doug Brown 2012-02-12 @@ -1209,17 +1209,17 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=Duraçġes variáveis dos Quadros PrefsDialog.Button.NoEngine=Nenhum PrefsDialog.Dialog.SwitchToQT.Message=Mudar para o QuickTime também altera a Java VM para 32-bit. -PrefsDialog.Dialog.SwitchToXuggle32.Message=Mudar para o Xuggle também altera a Java VM para 32-bit. -PrefsDialog.Dialog.SwitchToXuggle64.Message=Mudar para o Xuggle também altera a Java VM para 64-bit. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=Mudar para o FFMPeg também altera a Java VM para 32-bit. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=Mudar para o FFMPeg também altera a Java VM para 64-bit. PrefsDialog.Dialog.SwitchVM.Title=Java VM Alterada PrefsDialog.Dialog.SwitchTo32.Message=Mudar para a Java VM 32-bit também altera o motor de vídeo para QuickTime. -PrefsDialog.Dialog.SwitchTo64.Message=Mudar para a Java VM 64-bit também altera o motor de vídeo para Xuggle. +PrefsDialog.Dialog.SwitchTo64.Message=Mudar para a Java VM 64-bit também altera o motor de vídeo para FFMPeg. PrefsDialog.Dialog.SwitchEngine.Title=Motor de Vídeo alterado PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=No está disponível um motor de vídeo para a Java VM 64-bit. PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=Poderá ainda abrir imagens (JPEG, PNG) e GIFs animados. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Tem a certeza que quer alterar para uma Java VM a 64-bit? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=No existe motor de vídeo a 64-bit -PrefsDialog.Dialog.No32bitVMXuggle.Message=A Java VM a 32-bit tem de ser instalada antes de usar o Xuggle. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=A Java VM a 32-bit tem de ser instalada antes de usar o FFMPeg. PrefsDialog.Dialog.No32bitVMQT.Message=A Java VM a 32-bit tem de ser instalada antes de usar o QuickTime. PrefsDialog.Dialog.No32bitVM.Message=Para mais informaço consulte Ajuda: Instalaço. PrefsDialog.Dialog.No32bitVM.Title=É necessária uma VM a 32-bit @@ -1235,10 +1235,10 @@ Tracker.Dialog.Button.RelaunchNow=Sim, reiniciar agora Tracker.Dialog.Button.ShowPrefs=No, mas mostrar preferências Tracker.Dialog.Button.ContinueWithoutEngine=No, continuar sem vídeo Tracker.Dialog.EngineProblems.Message1=Um ou mais motores de vídeo esto instalados mas no funcionam. -Tracker.Dialog.EngineProblems.Message2=Para mais informaço ver Ajuda|Diagnósticos|Sobre o Xuggle ou QuickTime. -Tracker.Dialog.ReplaceXuggle.Message1=Recomenda-se que substitua o atual motor de vídeo Xuggle -Tracker.Dialog.ReplaceXuggle.Message2=pela verso 3.4 do Xuggle, reinstalando o Tracker (verso 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=ou superior) e selecionando Xuggle nas opçġes de instalaço. +Tracker.Dialog.EngineProblems.Message2=Para mais informaço ver Ajuda|Diagnósticos|Sobre o FFMPeg ou QuickTime. +Tracker.Dialog.ReplaceFFMPeg.Message1=Recomenda-se que substitua o atual motor de vídeo FFMPeg +Tracker.Dialog.ReplaceFFMPeg.Message2=pela verso 3.4 do FFMPeg, reinstalando o Tracker (verso 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=ou superior) e selecionando FFMPeg nas opçġes de instalaço. TrackerIO.Dialog.DurationIsConstant.Message=Todos os Quadros têm a mesma duraço (constante qps). TrackerIO.ZIPResourceFilter.Description=Ficheiro ZIP do Tracker (.trz) TToolbar.Button.Desktop.Tooltip=Mostrar documentos associados HTML e/ou PDF @@ -1304,7 +1304,7 @@ TableTrackView.Dialog.NameColumn.Title=Texto da Coluna TToolBar.MenuItem.StretchOff=Repor # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Verso Xuggle +PrefsDialog.Checkbox.WarnFFMPegVersion=Verso FFMPeg PrefsDialog.Checkbox.WarnCopyFailed=Erros de cópia do ficheiro do Motor de Vídeo Tracker.Dialog.FailedToCopy.Title=Erro ao copiar Ficheiro Velocity.Dialog.Color.Title=Escolher Cor para a Velocidade diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_pt_BR.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_pt_BR.properties index 3bd458b8..f46f8fc4 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_pt_BR.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_pt_BR.properties @@ -725,7 +725,7 @@ PrefsDialog.Checkbox.DefaultSize=Usar padr PrefsDialog.Checkbox.HintsOn=Mostrar as dicas como padro PrefsDialog.Tab.Video.Title=Vídeo PrefsDialog.VideoPref.BorderTitle=Mecanismo de Vídeo -PrefsDialog.Button.Xuggle=Xuggle (recomendado) +PrefsDialog.Button.FFMPeg=FFMPeg (recomendado) PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=Gerenciamento de memória indisponível quando Web Start é utilizado. PrefsDialog.Dialog.WebStart.Title=Modo Web Start @@ -740,9 +740,9 @@ PrefsDialog.Upgrades.Weekly=Semanalmente PrefsDialog.Upgrades.Monthly=Mensamente PrefsDialog.Upgrades.Never=Nunca PrefsDialog.Button.CheckForUpgrade=Verificar Agora -PrefsDialog.Xuggle.Speed.BorderTitle=Reproduço de Vídeo -PrefsDialog.Xuggle.Slow=Suave (pode ser lenta) -PrefsDialog.Xuggle.Fast=Rápida (pode ser grosseira) +PrefsDialog.FFMPeg.Speed.BorderTitle=Reproduço de Vídeo +PrefsDialog.FFMPeg.Slow=Suave (pode ser lenta) +PrefsDialog.FFMPeg.Fast=Rápida (pode ser grosseira) PrefsDialog.CalibrationTool.BorderTitle=Ferramenta de Calibragem Padro Protractor.Name=Transferidor Protractor.New.Name=transferidor @@ -822,22 +822,22 @@ TMenuBar.Menu.MeasuringTools=Ferramentas de Medidas TMenuBar.Menu.AngleUnits=Unidades de ângulo TMenuBar.MenuItem.Degrees=Graus TMenuBar.MenuItem.Radians=Radianos -Tracker.Dialog.NoXuggle.Title=Xuggle no encontrado -Tracker.Dialog.NoXuggle.Message1=Xuggle (multiplataforma de mecanismo vídeo) no está instalada. -Tracker.Dialog.NoXuggle.Message2=Download Xuggle de http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=Sobre Xuggle... -Tracker.Dialog.AboutXuggle.Title=Sobre Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=Verso do Xuggle -Tracker.Dialog.AboutXuggle.Message.Home=Xuggle home: -Tracker.Dialog.AboutXuggle.Message.Path=Xuggle path: +Tracker.Dialog.NoFFMPeg.Title=FFMPeg no encontrado +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (multiplataforma de mecanismo vídeo) no está instalada. +Tracker.Dialog.NoFFMPeg.Message2=Download FFMPeg de http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=Sobre FFMPeg... +Tracker.Dialog.AboutFFMPeg.Title=Sobre FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=Verso do FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Home=FFMPeg home: +Tracker.Dialog.AboutFFMPeg.Message.Path=FFMPeg path: Tracker.Dialog.NoVideoEngine.Message1=Nenhum mecanismo de vídeo foi encontrado! Sem nenhum, o Tracker pode Tracker.Dialog.NoVideoEngine.Message2=abrir apenas imagens, sequências de imagens e gifs animados. -Tracker.Dialog.NoVideoEngine.Message3=Para instalar o Xuggle, mecanismo de vídeo preferido pelo Tracker em +Tracker.Dialog.NoVideoEngine.Message3=Para instalar o FFMPeg, mecanismo de vídeo preferido pelo Tracker em Tracker.Dialog.NoVideoEngine.Message4=todas as plataformas, faça o download da última verso do instalador do Tracker. Tracker.Dialog.NoVideoEngine.Title=Falta de Mecanismo de Vídeo -Tracker.Dialog.NoXuggle.Message1=o Xuggle, mecanismo de vídeo preferido pelo Tracker, ainda no está instalado. -Tracker.Dialog.NoXuggle.Message2=Para instalar o Xuggle, faça o download da última verso do instalador do Tracker -Tracker.Dialog.NoXuggle.Title=faltando o Xuggle +Tracker.Dialog.NoFFMPeg.Message1=o FFMPeg, mecanismo de vídeo preferido pelo Tracker, ainda no está instalado. +Tracker.Dialog.NoFFMPeg.Message2=Para instalar o FFMPeg, faça o download da última verso do instalador do Tracker +Tracker.Dialog.NoFFMPeg.Title=faltando o FFMPeg Tracker.About.DefaultLocale=Local padro Tracker.About.CurrentLanguage=Idioma Tracker.Dialog.InsufficientMemory.Title=Memória Insuficiente @@ -883,7 +883,7 @@ TTrackBar.Memory.Menu.SetSize=Definir o tamanho da mem TTrackBar.Button.Version=Agora disponível: verso TTrackBar.Popup.MenuItem.Upgrade=Atualizar Agora... TTrackBar.Popup.MenuItem.Ignore=Ignorar -XuggleVideo.MenuItem.SmoothPlay=Executar Suavemente (poderá ser lento) +FFMPegVideo.MenuItem.SmoothPlay=Executar Suavemente (poderá ser lento) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=Fita de Calibraço @@ -912,13 +912,13 @@ WorldTView.Button.World=Mundo # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=Avisos PrefsDialog.Checkbox.WarnIfNoEngine=Sem mecanismos de Vídeo -PrefsDialog.Checkbox.WarnIfXuggleError=Erros do Xuggle +PrefsDialog.Checkbox.WarnIfFFMPegError=Erros do FFMPeg PropertiesDialog.Title=Propriedades PropertiesDialog.Label.Author=Autor PropertiesDialog.Label.Contact=Contato TActions.Action.Properties=Propriedades... TActions.Action.OpenBrowser=Abrir Navegador de Biblioteca... -TFrame.Progress.Xuggle=Xuggle carregando imagem +TFrame.Progress.FFMPeg=FFMPeg carregando imagem TFrame.Progress.ClickToCancel=(clique para cancelar) TFrame.Dialog.StalledVideo.Title=Erro ao carregar Vídeo TFrame.Dialog.StalledVideo.Message0=O vídeo travou durante o carregamento. Isto pode ser temporário. @@ -931,12 +931,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=Parar TFrame.Dialog.StalledVideo.Button.Wait=Esperar Tracker.Dialog.NoVideoEngine.Checkbox=No mostrar isto novamente TrackerIO.ZipFileFilter.Description=Arquivos ZIP -TrackerIO.Dialog.ErrorFFMPEG.Message1=Xuggle encontrou o seguinte erro ao abrir este vídeo: +TrackerIO.Dialog.ErrorFFMPEG.Message1=FFMPeg encontrou o seguinte erro ao abrir este vídeo: TrackerIO.Dialog.ErrorFFMPEG.Message2= Nem todos os erros so fatais. Para todas as mensagens de erro, escolha Ajuda | Log de mensagem -TrackerIO.Dialog.ErrorFFMPEG.Message3=Se o Xuggle falhar, você deve habilitar o QuickTime para abrir vídeos +TrackerIO.Dialog.ErrorFFMPEG.Message3=Se o FFMPeg falhar, você deve habilitar o QuickTime para abrir vídeos TrackerIO.Dialog.ErrorFFMPEG.MessageMac= Nota: No Mac OSX isso requer executar o Tracker em Java VM 32-bit. -TrackerIO.Dialog.ErrorFFMPEG.Title=Erro no Xuggle -TrackerIO.ErrorFFMPEG.LogMessage=Para mais detalhes, habilitar os avisos Xuggle na janela de prefêrencias (Editar|Preferências). +TrackerIO.Dialog.ErrorFFMPEG.Title=Erro no FFMPeg +TrackerIO.ErrorFFMPEG.LogMessage=Para mais detalhes, habilitar os avisos FFMPeg na janela de prefêrencias (Editar|Preferências). TToolBar.Button.OpenBrowser.Tooltip=Abrir a Biblioteca Digital OSP # Additions by Doug Brown 2011-07-20 @@ -1060,7 +1060,7 @@ AlgorithmDialog.FiniteDifference.Message2=Velocidade: v[i] = (x[i+1] - x[i-1]) AlgorithmDialog.FiniteDifference.Message3=Aceleraço: a[i] = (2*x[i+2] - x[i+1] - 2*x[i] - x[i-1] + 2*x[i-2]) / (7*dt) AlgorithmDialog.BounceDetect.Message1=Este algoritmo suaviza velocidades e aceleraçġes mas também detecta mudanças bruscas na velocidade. AlgorithmDialog.BounceDetect.Message2=Cuidado: pode produzir artefatos, para mais informaçġes: -AlgorithmDialog.BounceDetect.Message3=http://gasstationwithoutpumps.wordpress.com/2011/11/08/tracker-video-analysis-tool-fixes/ +AlgorithmDialog.BounceDetect.Message3=http://www.ffmpeg.org/download.html. TMenuBar.Menu.Diagnostics=Diagnósticos # Additions by Doug Brown 2012-02-12 @@ -1193,17 +1193,17 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=Variable frame durations PrefsDialog.Button.NoEngine=None PrefsDialog.Dialog.SwitchToQT.Message=Switching to QuickTime also changes the Java VM to 32-bit. -PrefsDialog.Dialog.SwitchToXuggle32.Message=Switching to Xuggle also changes the Java VM to 32-bit. -PrefsDialog.Dialog.SwitchToXuggle64.Message=Switching to Xuggle also changes the Java VM to 64-bit. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=Switching to FFMPeg also changes the Java VM to 32-bit. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=Switching to FFMPeg also changes the Java VM to 64-bit. PrefsDialog.Dialog.SwitchVM.Title=Java VM Changed PrefsDialog.Dialog.SwitchTo32.Message=Switching to a 32-bit Java VM also changes the video engine to QuickTime. -PrefsDialog.Dialog.SwitchTo64.Message=Switching to a 64-bit Java VM also changes the video engine to Xuggle. +PrefsDialog.Dialog.SwitchTo64.Message=Switching to a 64-bit Java VM also changes the video engine to FFMPeg. PrefsDialog.Dialog.SwitchEngine.Title=Video Engine Changed PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=No video engine is available for a 64-bit Java VM. You will PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=still be able to open images (JPEG, PNG) and animated GIFs. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Are you sure you wish to switch to a 64-bit VM? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=No 64-bit Video Engine -PrefsDialog.Dialog.No32bitVMXuggle.Message=A 32-bit Java VM must be installed before Xuggle can be used. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=A 32-bit Java VM must be installed before FFMPeg can be used. PrefsDialog.Dialog.No32bitVMQT.Message=A 32-bit Java VM must be installed before QuickTime can be used. PrefsDialog.Dialog.No32bitVM.Message=For more information, see Tracker Help: Installation. PrefsDialog.Dialog.No32bitVM.Title=32-bit VM Required @@ -1219,10 +1219,10 @@ Tracker.Dialog.Button.RelaunchNow=Yes, relaunch now Tracker.Dialog.Button.ShowPrefs=No, but show preferences Tracker.Dialog.Button.ContinueWithoutEngine=No, continue without video Tracker.Dialog.EngineProblems.Message1=One or more video engines are installed but not working. -Tracker.Dialog.EngineProblems.Message2=For more information see Help|Diagnostics|About Xuggle or QuickTime. -Tracker.Dialog.ReplaceXuggle.Message1=We recommend you replace your current Xuggle video engine -Tracker.Dialog.ReplaceXuggle.Message2=with Xuggle version 3.4 by reinstalling Tracker (version 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=or above) and selecting Xuggle in the installation options. +Tracker.Dialog.EngineProblems.Message2=For more information see Help|Diagnostics|About FFMPeg or QuickTime. +Tracker.Dialog.ReplaceFFMPeg.Message1=We recommend you replace your current FFMPeg video engine +Tracker.Dialog.ReplaceFFMPeg.Message2=with FFMPeg version 3.4 by reinstalling Tracker (version 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=or above) and selecting FFMPeg in the installation options. TrackerIO.Dialog.DurationIsConstant.Message=All frame durations are equal (constant fps). TrackerIO.ZIPResourceFilter.Description=Tracker ZIP File (.trz) TToolbar.Button.Desktop.Tooltip=Display associated HTML and/or PDF documents @@ -1288,7 +1288,7 @@ TableTrackView.Dialog.NameColumn.Title=Text Column TToolBar.MenuItem.StretchOff=Reset # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Xuggle Version +PrefsDialog.Checkbox.WarnFFMPegVersion=FFMPeg Version PrefsDialog.Checkbox.WarnCopyFailed=Video Engine File Copy Errors Tracker.Dialog.FailedToCopy.Title=File Copy Error Velocity.Dialog.Color.Title=Choose Velocity Color diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_ru.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_ru.properties index 218e4459..e5b403c7 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_ru.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_ru.properties @@ -719,7 +719,7 @@ PrefsDialog.Checkbox.DefaultSize=Use default PrefsDialog.Checkbox.HintsOn=Show hints by default PrefsDialog.Tab.Video.Title=Video PrefsDialog.VideoPref.BorderTitle=Video Engine -PrefsDialog.Button.Xuggle=Xuggle +PrefsDialog.Button.FFMPeg=FFMPeg PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=Memory management is unavailable when using Web Start. PrefsDialog.Dialog.WebStart.Title=Web Start Mode @@ -734,9 +734,9 @@ PrefsDialog.Upgrades.Weekly=Weekly PrefsDialog.Upgrades.Monthly=Monthly PrefsDialog.Upgrades.Never=Never PrefsDialog.Button.CheckForUpgrade=Check Now -PrefsDialog.Xuggle.Speed.BorderTitle=Xuggle Video Playback -PrefsDialog.Xuggle.Slow=Smooth (may be slow) -PrefsDialog.Xuggle.Fast=Fast (may be jerky) +PrefsDialog.FFMPeg.Speed.BorderTitle=FFMPeg Video Playback +PrefsDialog.FFMPeg.Slow=Smooth (may be slow) +PrefsDialog.FFMPeg.Fast=Fast (may be jerky) PrefsDialog.CalibrationTool.BorderTitle=Default Calibration Tool Protractor.Name=Protractor Protractor.New.Name=protractor @@ -816,23 +816,23 @@ TMenuBar.Menu.MeasuringTools=Measuring Tools TMenuBar.Menu.AngleUnits=Angle Units TMenuBar.MenuItem.Degrees=Degrees TMenuBar.MenuItem.Radians=Radians -Tracker.Dialog.NoXuggle.Title=Xuggle not found -Tracker.Dialog.NoXuggle.Message1=Xuggle (cross-platform video engine) is not installed. -Tracker.Dialog.NoXuggle.Message2=Download Xuggle from http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=About Xuggle... -Tracker.Dialog.AboutXuggle.Title=About Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=Xuggle version -Tracker.Dialog.AboutXuggle.Message.Home=Xuggle home: -Tracker.Dialog.AboutXuggle.Message.Path=Xuggle jar path: +Tracker.Dialog.NoFFMPeg.Title=FFMPeg not found +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (cross-platform video engine) is not installed. +Tracker.Dialog.NoFFMPeg.Message2=Download FFMPeg from http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=About FFMPeg... +Tracker.Dialog.AboutFFMPeg.Title=About FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=FFMPeg version +Tracker.Dialog.AboutFFMPeg.Message.Home=FFMPeg home: +Tracker.Dialog.AboutFFMPeg.Message.Path=FFMPeg jar path: Tracker.Dialog.NoVideoEngine.Message1=No video engine is installed. Without one, you Tracker.Dialog.NoVideoEngine.Message2=can only open images (JPEG, PNG) and animated GIFs. -Tracker.Dialog.NoVideoEngine.Message3=Recommended: reinstall Tracker with the Xuggle video engine. +Tracker.Dialog.NoVideoEngine.Message3=Recommended: reinstall Tracker with the FFMPeg video engine. Tracker.Dialog.NoVideoEngine.Title=No Video Engine -Tracker.Dialog.NoXuggle.Message1=Xuggle is not working correctly. Please be sure the required -Tracker.Dialog.NoXuggle.Message2=xuggle jar files are in the Tracker home directory. For details, -Tracker.Dialog.NoXuggle.Message3=see Tracker_README.txt in the Tracker home directory. -Tracker.Dialog.NoXuggle.Message4=To install Xuggle, download the latest Tracker installer from -Tracker.Dialog.NoXuggle.Title=Xuggle Unavailable +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg is not working correctly. Please be sure the required +Tracker.Dialog.NoFFMPeg.Message2=ffmpeg jar files are in the Tracker home directory. For details, +Tracker.Dialog.NoFFMPeg.Message3=see Tracker_README.txt in the Tracker home directory. +Tracker.Dialog.NoFFMPeg.Message4=To install FFMPeg, download the latest Tracker installer from +Tracker.Dialog.NoFFMPeg.Title=FFMPeg Unavailable Tracker.About.DefaultLocale=Default locale Tracker.About.CurrentLanguage=Language Tracker.Dialog.InsufficientMemory.Title=Insufficient Memory @@ -878,7 +878,7 @@ TTrackBar.Memory.Menu.SetSize=Set memory size... TTrackBar.Button.Version=Now available: version TTrackBar.Popup.MenuItem.Upgrade=Upgrade Now... TTrackBar.Popup.MenuItem.Ignore=Ignore -XuggleVideo.MenuItem.SmoothPlay=Smooth Play (may be slow) +FFMPegVideo.MenuItem.SmoothPlay=Smooth Play (may be slow) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=Calibration Tape @@ -907,13 +907,13 @@ WorldTView.Button.World=World # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=Warnings PrefsDialog.Checkbox.WarnIfNoEngine=No video engine -PrefsDialog.Checkbox.WarnIfXuggleError=Non-fatal Xuggle errors +PrefsDialog.Checkbox.WarnIfFFMPegError=Non-fatal FFMPeg errors PropertiesDialog.Title=Properties PropertiesDialog.Label.Author=Authors PropertiesDialog.Label.Contact=Contact TActions.Action.Properties=Properties... TActions.Action.OpenBrowser=Open Library Browser... -TFrame.Progress.Xuggle=Xuggle loading frame +TFrame.Progress.FFMPeg=FFMPeg loading frame TFrame.Progress.ClickToCancel=(click to cancel) TFrame.Dialog.StalledVideo.Title=Error Loading Video TFrame.Dialog.StalledVideo.Message0=The video has stalled while loading. This may be temporary. @@ -926,12 +926,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=Stop TFrame.Dialog.StalledVideo.Button.Wait=Wait Tracker.Dialog.NoVideoEngine.Checkbox=Don't show this again TrackerIO.ZipFileFilter.Description=ZIP file (.zip) -TrackerIO.Dialog.ErrorFFMPEG.Message1=Xuggle has encountered the following error while opening this video: +TrackerIO.Dialog.ErrorFFMPEG.Message1=FFMPeg has encountered the following error while opening this video: TrackerIO.Dialog.ErrorFFMPEG.Message2=Not all errors are fatal. For full error messages, choose Help|Message Log. -TrackerIO.Dialog.ErrorFFMPEG.Message3=If Xuggle fails, you may be able to open the video with QuickTime. +TrackerIO.Dialog.ErrorFFMPEG.Message3=If FFMPeg fails, you may be able to open the video with QuickTime. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Note: On Mac OSX this requires running Tracker in a 32-bit Java VM. -TrackerIO.Dialog.ErrorFFMPEG.Title=Xuggle Error -TrackerIO.ErrorFFMPEG.LogMessage=For more details, turn on Xuggle warnings in the preferences dialog (Edit|Preferences). +TrackerIO.Dialog.ErrorFFMPEG.Title=FFMPeg Error +TrackerIO.ErrorFFMPEG.LogMessage=For more details, turn on FFMPeg warnings in the preferences dialog (Edit|Preferences). TToolBar.Button.OpenBrowser.Tooltip=Open the OSP Digital Library Browser # Additions by Doug Brown 2011-07-20 @@ -1187,17 +1187,17 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=Variable frame durations PrefsDialog.Button.NoEngine=None PrefsDialog.Dialog.SwitchToQT.Message=Switching to QuickTime also changes the Java VM to 32-bit. -PrefsDialog.Dialog.SwitchToXuggle32.Message=Switching to Xuggle also changes the Java VM to 32-bit. -PrefsDialog.Dialog.SwitchToXuggle64.Message=Switching to Xuggle also changes the Java VM to 64-bit. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=Switching to FFMPeg also changes the Java VM to 32-bit. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=Switching to FFMPeg also changes the Java VM to 64-bit. PrefsDialog.Dialog.SwitchVM.Title=Java VM Changed PrefsDialog.Dialog.SwitchTo32.Message=Switching to a 32-bit Java VM also changes the video engine to QuickTime. -PrefsDialog.Dialog.SwitchTo64.Message=Switching to a 64-bit Java VM also changes the video engine to Xuggle. +PrefsDialog.Dialog.SwitchTo64.Message=Switching to a 64-bit Java VM also changes the video engine to FFMPeg. PrefsDialog.Dialog.SwitchEngine.Title=Video Engine Changed PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=No video engine is available for a 64-bit Java VM. You will PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=still be able to open images (JPEG, PNG) and animated GIFs. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Are you sure you wish to switch to a 64-bit VM? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=No 64-bit Video Engine -PrefsDialog.Dialog.No32bitVMXuggle.Message=A 32-bit Java VM must be installed before Xuggle can be used. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=A 32-bit Java VM must be installed before FFMPeg can be used. PrefsDialog.Dialog.No32bitVMQT.Message=A 32-bit Java VM must be installed before QuickTime can be used. PrefsDialog.Dialog.No32bitVM.Message=For more information, see Tracker Help: Installation. PrefsDialog.Dialog.No32bitVM.Title=32-bit VM Required @@ -1213,10 +1213,10 @@ Tracker.Dialog.Button.RelaunchNow=Yes, relaunch now Tracker.Dialog.Button.ShowPrefs=No, but show preferences Tracker.Dialog.Button.ContinueWithoutEngine=No, continue without video Tracker.Dialog.EngineProblems.Message1=One or more video engines are installed but not working. -Tracker.Dialog.EngineProblems.Message2=For more information see Help|Diagnostics|About Xuggle or QuickTime. -Tracker.Dialog.ReplaceXuggle.Message1=We recommend you replace your current Xuggle video engine -Tracker.Dialog.ReplaceXuggle.Message2=with Xuggle version 3.4 by reinstalling Tracker (version 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=or above) and selecting Xuggle in the installation options. +Tracker.Dialog.EngineProblems.Message2=For more information see Help|Diagnostics|About FFMPeg or QuickTime. +Tracker.Dialog.ReplaceFFMPeg.Message1=We recommend you replace your current FFMPeg video engine +Tracker.Dialog.ReplaceFFMPeg.Message2=with FFMPeg version 3.4 by reinstalling Tracker (version 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=or above) and selecting FFMPeg in the installation options. TrackerIO.Dialog.DurationIsConstant.Message=All frame durations are equal (constant fps). TrackerIO.ZIPResourceFilter.Description=Tracker ZIP File (.trz) TToolbar.Button.Desktop.Tooltip=Display associated HTML and/or PDF documents @@ -1282,7 +1282,7 @@ TableTrackView.Dialog.NameColumn.Title=Text Column TToolBar.MenuItem.StretchOff=Reset # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Xuggle Version +PrefsDialog.Checkbox.WarnFFMPegVersion=FFMPeg Version PrefsDialog.Checkbox.WarnCopyFailed=Video Engine File Copy Errors TrackerStarter.Warning.FailedToCopy1=Some video engine files could not be copied automatically. TrackerStarter.Warning.FailedToCopy2=The video engine may not work unless they are copied manually. diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_sk.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_sk.properties index 5d4b9620..17b5f0bb 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_sk.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_sk.properties @@ -721,7 +721,7 @@ PrefsDialog.Checkbox.DefaultSize=Pou\u017ei\u0165 prednastaven\u00e9 PrefsDialog.Checkbox.HintsOn=Zobrazi\u0165 prednastaven\u00e9 n\u00e1povede PrefsDialog.Tab.Video.Title=Video PrefsDialog.VideoPref.BorderTitle=Video Engine -PrefsDialog.Button.Xuggle=Xuggle (recommended) +PrefsDialog.Button.FFMPeg=FFMPeg (recommended) PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=Spr\u00e1va pa\u00e4te je nepr\u00edstupn\u00e1 pri pou\u017e\u00edvan\u00ed Web \u0161tartu PrefsDialog.Dialog.WebStart.Title=Web \u0161tart m\u00f3d @@ -736,9 +736,9 @@ PrefsDialog.Upgrades.Weekly=t\u00fd\u017edenne PrefsDialog.Upgrades.Monthly=mesa\u010dne PrefsDialog.Upgrades.Never=nikdy PrefsDialog.Button.CheckForUpgrade=H\u013eadaj teraz -PrefsDialog.Xuggle.Speed.BorderTitle=Xuggle Video Playback -PrefsDialog.Xuggle.Slow=Hladko (m\u00f4\u017ee by\u0165 pomal\u00e9) -PrefsDialog.Xuggle.Fast=r\u00fdchlo (m\u00f4\u017ee by\u0165 trhan\u00e9) +PrefsDialog.FFMPeg.Speed.BorderTitle=FFMPeg Video Playback +PrefsDialog.FFMPeg.Slow=Hladko (m\u00f4\u017ee by\u0165 pomal\u00e9) +PrefsDialog.FFMPeg.Fast=r\u00fdchlo (m\u00f4\u017ee by\u0165 trhan\u00e9) PrefsDialog.CalibrationTool.BorderTitle=Predvolen\u00fd kalibra\u010dn\u00fd n\u00e1stroj Protractor.Name=Uhlomer Protractor.New.Name=Uhlomer @@ -818,22 +818,22 @@ TMenuBar.Menu.MeasuringTools=Meracie n\u00e1stroje TMenuBar.Menu.AngleUnits=Jednotky uhla TMenuBar.MenuItem.Degrees=Stupne TMenuBar.MenuItem.Radians=Radi\u00e1ny -Tracker.Dialog.NoXuggle.Title=Xuggle nen\u00e1jden\u00fd -Tracker.Dialog.NoXuggle.Message1=Xuggle (multiplatformov\u00fd n\u00e1stroj na spracovanie video) nie je nain\u0161talovan\u00fd -Tracker.Dialog.NoXuggle.Message2=Stiahnu\u0165 Xuggle z http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=O programe Xuggle... -Tracker.Dialog.AboutXuggle.Title=O programe Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=Xuggle verzia -Tracker.Dialog.AboutXuggle.Message.Home=Xuggle home: -Tracker.Dialog.AboutXuggle.Message.Path=Xuggle path: +Tracker.Dialog.NoFFMPeg.Title=FFMPeg nen\u00e1jden\u00fd +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (multiplatformov\u00fd n\u00e1stroj na spracovanie video) nie je nain\u0161talovan\u00fd +Tracker.Dialog.NoFFMPeg.Message2=Stiahnu\u0165 FFMPeg z http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=O programe FFMPeg... +Tracker.Dialog.AboutFFMPeg.Title=O programe FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=FFMPeg verzia +Tracker.Dialog.AboutFFMPeg.Message.Home=FFMPeg home: +Tracker.Dialog.AboutFFMPeg.Message.Path=FFMPeg path: Tracker.Dialog.NoVideoEngine.Message1=Nebol n\u00e1jden\u00fd \u017eiaden program pre spracovanie Videa! Bez neho,Tracker m\u00f4\u017ee Tracker.Dialog.NoVideoEngine.Message2=otvori\u0165 len obr\u00e1zky, sekvencie obr\u00e1zkov a animovan\u00e9 gif s\u00fabory -Tracker.Dialog.NoVideoEngine.Message3=V pr\u00edpade in\u0161tal\u00e1cie Xuggle, Trackerom preferovan\u00fd program pre spracovanie Videa +Tracker.Dialog.NoVideoEngine.Message3=V pr\u00edpade in\u0161tal\u00e1cie FFMPeg, Trackerom preferovan\u00fd program pre spracovanie Videa Tracker.Dialog.NoVideoEngine.Message4=v r\u00e1mci v\u0161etk\u00fdch platforiem, stiahnite pre Tracker posledn\u00fa verziu in\u0161tala\u010dn\u00e9ho programu z Tracker.Dialog.NoVideoEngine.Title=Ch\u00fdbaj\u00faci program pre spracovanie Videa -Tracker.Dialog.NoXuggle.Message1=Xuggle, program pre spracovanie Videa preferovan\u00fd Trackerom, nebol dosia\u013e nain\u0161talovn\u00fd. -Tracker.Dialog.NoXuggle.Message2=Pre in\u0161tal\u00e1ciu Xuggle, stiahnite posledn\u00fa verziu in\u0161tala\u010dn\u00e9ho programu z -Tracker.Dialog.NoXuggle.Title=Ch\u00fdbaj\u00faci program Xuggle pre spracovanie videa +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg, program pre spracovanie Videa preferovan\u00fd Trackerom, nebol dosia\u013e nain\u0161talovn\u00fd. +Tracker.Dialog.NoFFMPeg.Message2=Pre in\u0161tal\u00e1ciu FFMPeg, stiahnite posledn\u00fa verziu in\u0161tala\u010dn\u00e9ho programu z +Tracker.Dialog.NoFFMPeg.Title=Ch\u00fdbaj\u00faci program FFMPeg pre spracovanie videa Tracker.About.DefaultLocale=Prednastaven\u00e9 umiestnenie Tracker.About.CurrentLanguage=jazyk Tracker.Dialog.InsufficientMemory.Title=Nedostatok pam\u00e4te @@ -879,7 +879,7 @@ TTrackBar.Memory.Menu.SetSize=Set memory size... TTrackBar.Button.Version=Moment\u00e1lne dostupn\u00e1:verzia TTrackBar.Popup.MenuItem.Upgrade=Aktualizova\u0165 teraz... TTrackBar.Popup.MenuItem.Ignore=Ignorova\u0165 -XuggleVideo.MenuItem.SmoothPlay=Plynul\u00e9 prehr\u00e1vanie (m\u00f4\u017ee by\u0165 pomal\u00e9) +FFMPegVideo.MenuItem.SmoothPlay=Plynul\u00e9 prehr\u00e1vanie (m\u00f4\u017ee by\u0165 pomal\u00e9) # Additions by Doug Brown CircleFootprint.Circle=kr\u00fa\u017eok @@ -908,13 +908,13 @@ WorldTView.Button.World=Re\u00e1lny poh\u013ead # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=Warnings PrefsDialog.Checkbox.WarnIfNoEngine=No video engine -PrefsDialog.Checkbox.WarnIfXuggleError=Non-fatal Xuggle errors +PrefsDialog.Checkbox.WarnIfFFMPegError=Non-fatal FFMPeg errors PropertiesDialog.Title=Properties PropertiesDialog.Label.Author=Author PropertiesDialog.Label.Contact=Contact TActions.Action.Properties=Properties... TActions.Action.OpenBrowser=Open Library Browser... -TFrame.Progress.Xuggle=Xuggle loading frame +TFrame.Progress.FFMPeg=FFMPeg loading frame TFrame.Progress.ClickToCancel=(click to cancel) TFrame.Dialog.StalledVideo.Title=Error Loading Video TFrame.Dialog.StalledVideo.Message0=The video has stalled while loading. This may be temporary. @@ -927,12 +927,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=Stop TFrame.Dialog.StalledVideo.Button.Wait=Wait Tracker.Dialog.NoVideoEngine.Checkbox=Don't show this again TrackerIO.ZipFileFilter.Description=ZIP files -TrackerIO.Dialog.ErrorFFMPEG.Message1=Xuggle has encountered the following error while opening this video: +TrackerIO.Dialog.ErrorFFMPEG.Message1=FFMPeg has encountered the following error while opening this video: TrackerIO.Dialog.ErrorFFMPEG.Message2=Not all errors are fatal. For full error messages, choose Help|Message Log. -TrackerIO.Dialog.ErrorFFMPEG.Message3=If Xuggle fails, you may be able to open the video with QuickTime. +TrackerIO.Dialog.ErrorFFMPEG.Message3=If FFMPeg fails, you may be able to open the video with QuickTime. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Note: On Mac OSX this requires running Tracker in a 32-bit Java VM. -TrackerIO.Dialog.ErrorFFMPEG.Title=Xuggle Error -TrackerIO.ErrorFFMPEG.LogMessage=For more details, turn on Xuggle warnings in the preferences dialog (Edit|Preferences). +TrackerIO.Dialog.ErrorFFMPEG.Title=FFMPeg Error +TrackerIO.ErrorFFMPEG.LogMessage=For more details, turn on FFMPeg warnings in the preferences dialog (Edit|Preferences). TToolBar.Button.OpenBrowser.Tooltip=Open the OSP Digital Library Browser # Additions by Doug Brown 2011-07-20 @@ -1189,17 +1189,17 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=Variable frame durations PrefsDialog.Button.NoEngine=None PrefsDialog.Dialog.SwitchToQT.Message=Switching to QuickTime also changes the Java VM to 32-bit. -PrefsDialog.Dialog.SwitchToXuggle32.Message=Switching to Xuggle also changes the Java VM to 32-bit. -PrefsDialog.Dialog.SwitchToXuggle64.Message=Switching to Xuggle also changes the Java VM to 64-bit. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=Switching to FFMPeg also changes the Java VM to 32-bit. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=Switching to FFMPeg also changes the Java VM to 64-bit. PrefsDialog.Dialog.SwitchVM.Title=Java VM Changed PrefsDialog.Dialog.SwitchTo32.Message=Switching to a 32-bit Java VM also changes the video engine to QuickTime. -PrefsDialog.Dialog.SwitchTo64.Message=Switching to a 64-bit Java VM also changes the video engine to Xuggle. +PrefsDialog.Dialog.SwitchTo64.Message=Switching to a 64-bit Java VM also changes the video engine to FFMPeg. PrefsDialog.Dialog.SwitchEngine.Title=Video Engine Changed PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=No video engine is available for a 64-bit Java VM. You will PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=still be able to open images (JPEG, PNG) and animated GIFs. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Are you sure you wish to switch to a 64-bit VM? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=No 64-bit Video Engine -PrefsDialog.Dialog.No32bitVMXuggle.Message=A 32-bit Java VM must be installed before Xuggle can be used. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=A 32-bit Java VM must be installed before FFMPeg can be used. PrefsDialog.Dialog.No32bitVMQT.Message=A 32-bit Java VM must be installed before QuickTime can be used. PrefsDialog.Dialog.No32bitVM.Message=For more information, see Tracker Help: Installation. PrefsDialog.Dialog.No32bitVM.Title=32-bit VM Required @@ -1215,10 +1215,10 @@ Tracker.Dialog.Button.RelaunchNow=Yes, relaunch now Tracker.Dialog.Button.ShowPrefs=No, but show preferences Tracker.Dialog.Button.ContinueWithoutEngine=No, continue without video Tracker.Dialog.EngineProblems.Message1=One or more video engines are installed but not working. -Tracker.Dialog.EngineProblems.Message2=For more information see Help|Diagnostics|About Xuggle or QuickTime. -Tracker.Dialog.ReplaceXuggle.Message1=We recommend you replace your current Xuggle video engine -Tracker.Dialog.ReplaceXuggle.Message2=with Xuggle version 3.4 by reinstalling Tracker (version 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=or above) and selecting Xuggle in the installation options. +Tracker.Dialog.EngineProblems.Message2=For more information see Help|Diagnostics|About FFMPeg or QuickTime. +Tracker.Dialog.ReplaceFFMPeg.Message1=We recommend you replace your current FFMPeg video engine +Tracker.Dialog.ReplaceFFMPeg.Message2=with FFMPeg version 3.4 by reinstalling Tracker (version 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=or above) and selecting FFMPeg in the installation options. TrackerIO.Dialog.DurationIsConstant.Message=All frame durations are equal (constant fps). TrackerIO.ZIPResourceFilter.Description=Tracker ZIP File (.trz) TToolbar.Button.Desktop.Tooltip=Display supplemental HTML and/or PDF documents @@ -1284,7 +1284,7 @@ TableTrackView.Dialog.NameColumn.Title=Text Column TToolBar.MenuItem.StretchOff=Reset # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Xuggle Version +PrefsDialog.Checkbox.WarnFFMPegVersion=FFMPeg Version PrefsDialog.Checkbox.WarnCopyFailed=Video Engine File Copy Errors Tracker.Dialog.FailedToCopy.Title=File Copy Error Velocity.Dialog.Color.Title=Choose Velocity Color diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_sl.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_sl.properties index 8965f812..16a1ce7e 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_sl.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_sl.properties @@ -724,7 +724,7 @@ PrefsDialog.Checkbox.DefaultSize=Uporabi privzeto PrefsDialog.Checkbox.HintsOn=Privzeto prika\u017Ei namige PrefsDialog.Tab.Video.Title=Video PrefsDialog.VideoPref.BorderTitle=Video pogon -PrefsDialog.Button.Xuggle=Xuggle (priporo\u010Deno) +PrefsDialog.Button.FFMPeg=FFMPeg (priporo\u010Deno) PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=\u010Ce uporablja\u0161 Web Start, upravljanje pomnilnika ni na voljo. PrefsDialog.Dialog.WebStart.Title=Na\u010Din Web Start @@ -739,9 +739,9 @@ PrefsDialog.Upgrades.Weekly=Tedensko PrefsDialog.Upgrades.Monthly=Mese\u010Dno PrefsDialog.Upgrades.Never=Nikoli PrefsDialog.Button.CheckForUpgrade=Preveri sedaj -PrefsDialog.Xuggle.Speed.BorderTitle=Xuggle Video Playback -PrefsDialog.Xuggle.Slow=Gladko (lahko je po\u010Dasno) -PrefsDialog.Xuggle.Fast=Hitro (lahko bo sunkovito) +PrefsDialog.FFMPeg.Speed.BorderTitle=FFMPeg Video Playback +PrefsDialog.FFMPeg.Slow=Gladko (lahko je po\u010Dasno) +PrefsDialog.FFMPeg.Fast=Hitro (lahko bo sunkovito) PrefsDialog.CalibrationTool.BorderTitle=Privzeto orodje za kalibracijo Protractor.Name=Kotomer Protractor.New.Name=kotomer @@ -821,22 +821,22 @@ TMenuBar.Menu.MeasuringTools=Merilna orodja TMenuBar.Menu.AngleUnits=Enote za kot TMenuBar.MenuItem.Degrees=Stopinje TMenuBar.MenuItem.Radians=Radiani -Tracker.Dialog.NoXuggle.Title=Ne najdem Xuggle -Tracker.Dialog.NoXuggle.Message1=Xuggle (platformno neodvisen video pogon) ni name\u0161\u010Den. -Tracker.Dialog.NoXuggle.Message2=Nalo\u017Ei Xuggle iz http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=Nekaj o Xuggle... -Tracker.Dialog.AboutXuggle.Title=Nekaj o Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=Verzija Xuggle -Tracker.Dialog.AboutXuggle.Message.Home=Xuggle dom: -Tracker.Dialog.AboutXuggle.Message.Path=Xuggle pot: +Tracker.Dialog.NoFFMPeg.Title=Ne najdem FFMPeg +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (platformno neodvisen video pogon) ni name\u0161\u010Den. +Tracker.Dialog.NoFFMPeg.Message2=Nalo\u017Ei FFMPeg iz http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=Nekaj o FFMPeg... +Tracker.Dialog.AboutFFMPeg.Title=Nekaj o FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=Verzija FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Home=FFMPeg dom: +Tracker.Dialog.AboutFFMPeg.Message.Path=FFMPeg pot: Tracker.Dialog.NoVideoEngine.Message1=ne najdem video pogona! Brez tega lahko Tracker Tracker.Dialog.NoVideoEngine.Message2=odpre le slike, zaporedja slik in animirane gif. -Tracker.Dialog.NoVideoEngine.Message3=Za namestitev Xuggle, ki je najbolj priporo\u010Dljiv video pogon za +Tracker.Dialog.NoVideoEngine.Message3=Za namestitev FFMPeg, ki je najbolj priporo\u010Dljiv video pogon za Tracker.Dialog.NoVideoEngine.Message4=vse platforme, nalo\u017Ei zadnji Tracker installer iz Tracker.Dialog.NoVideoEngine.Title=Manjka video pogon -Tracker.Dialog.NoXuggle.Message1=Xuggle, Trackerjev priporo\u010Dljiv video pogon, ni name\u0161\u010Den. -Tracker.Dialog.NoXuggle.Message2=Za namestitev Xuggle, nalo\u017Ei zadnji Tracker installer iz -Tracker.Dialog.NoXuggle.Title=Manjka Xuggle +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg, Trackerjev priporo\u010Dljiv video pogon, ni name\u0161\u010Den. +Tracker.Dialog.NoFFMPeg.Message2=Za namestitev FFMPeg, nalo\u017Ei zadnji Tracker installer iz +Tracker.Dialog.NoFFMPeg.Title=Manjka FFMPeg Tracker.About.DefaultLocale=Privzeti jezik Tracker.About.CurrentLanguage=Jezik Tracker.Dialog.InsufficientMemory.Title=Premajhen pomnilnik @@ -882,7 +882,7 @@ TTrackBar.Memory.Menu.SetSize=Nastavi velikost pomnilnika... TTrackBar.Button.Version=Sedaj na voljo: verzija TTrackBar.Popup.MenuItem.Upgrade=Posodobi sedaj... TTrackBar.Popup.MenuItem.Ignore=Ignoriraj -XuggleVideo.MenuItem.SmoothPlay=mehko predvajanje (je lahko po\u010Dasno) +FFMPegVideo.MenuItem.SmoothPlay=mehko predvajanje (je lahko po\u010Dasno) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=Merilni trak @@ -911,13 +911,13 @@ WorldTView.Button.World=Svet # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=Opozorila PrefsDialog.Checkbox.WarnIfNoEngine=Ni video pogona -PrefsDialog.Checkbox.WarnIfXuggleError=Ne usodne napake Xuggle +PrefsDialog.Checkbox.WarnIfFFMPegError=Ne usodne napake FFMPeg PropertiesDialog.Title=Lastnosti PropertiesDialog.Label.Author=Avtor PropertiesDialog.Label.Contact=Kontakt TActions.Action.Properties=Lastnosti... TActions.Action.OpenBrowser=Odpri brkljalnik knji\u017Enice... -TFrame.Progress.Xuggle=Xuggle loading frame +TFrame.Progress.FFMPeg=FFMPeg loading frame TFrame.Progress.ClickToCancel=(Klikni za brisanje) TFrame.Dialog.StalledVideo.Title=Napaka pri nalaganju videa TFrame.Dialog.StalledVideo.Message0=Nalaganje videa se je zaustavilo. Morda je to za\u010Dasno. @@ -930,12 +930,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=Stop TFrame.Dialog.StalledVideo.Button.Wait=\u010Cakaj Tracker.Dialog.NoVideoEngine.Checkbox=Tega ne prika\u017Ei ve\u010D TrackerIO.ZipFileFilter.Description=Datoteke ZIP -TrackerIO.Dialog.ErrorFFMPEG.Message1=Xuggle je naletel na naslednje napake pri odpiranju tega videa: +TrackerIO.Dialog.ErrorFFMPEG.Message1=FFMPeg je naletel na naslednje napake pri odpiranju tega videa: TrackerIO.Dialog.ErrorFFMPEG.Message2=Vse napake niso usodne. Za polna obvestila o napakah izberi Pomo\u010D|Zapis obvestil. -TrackerIO.Dialog.ErrorFFMPEG.Message3=\u010Ce Xuggle izpade, morda lahko odpre\u0161 video s QuickTime. +TrackerIO.Dialog.ErrorFFMPEG.Message3=\u010Ce FFMPeg izpade, morda lahko odpre\u0161 video s QuickTime. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Opomba: Na Mac OSX mora te\u010Di Tracker na 32-bitnem Java VM. -TrackerIO.Dialog.ErrorFFMPEG.Title=Napaka Xuggle -TrackerIO.ErrorFFMPEG.LogMessage=Za ve\u010D podrobnosti vklju\u010Di opozorila Xuggle v pogovornem oknu s preferencami (Edit|Preferences). +TrackerIO.Dialog.ErrorFFMPEG.Title=Napaka FFMPeg +TrackerIO.ErrorFFMPEG.LogMessage=Za ve\u010D podrobnosti vklju\u010Di opozorila FFMPeg v pogovornem oknu s preferencami (Edit|Preferences). TToolBar.Button.OpenBrowser.Tooltip=Odpri brkljalnik digitalne knji\u017Enice OSP # Additions by Doug Brown 2011-07-20 @@ -1194,17 +1194,17 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=Trajanje spremenljivega okvirja PrefsDialog.Button.NoEngine=Ni\u010D PrefsDialog.Dialog.SwitchToQT.Message=Preklop na QuickTime tudi spremeni JVM na 32-bitno verzijo. -PrefsDialog.Dialog.SwitchToXuggle32.Message=Preklop na Xuggle tudi spremeni JVM na 32-bitno verzijo. -PrefsDialog.Dialog.SwitchToXuggle64.Message=Preklop na Xuggle tudi spremeni JVM na 64-bitno verzijot. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=Preklop na FFMPeg tudi spremeni JVM na 32-bitno verzijo. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=Preklop na FFMPeg tudi spremeni JVM na 64-bitno verzijot. PrefsDialog.Dialog.SwitchVM.Title=Java VM je spremenjen PrefsDialog.Dialog.SwitchTo32.Message=Preklop na 32-bitni Java VM tudi spremeni video pogon na QuickTime. -PrefsDialog.Dialog.SwitchTo64.Message=Preklop na 64-bitni Java VM tudi spremeni video pogon na Xuggle. +PrefsDialog.Dialog.SwitchTo64.Message=Preklop na 64-bitni Java VM tudi spremeni video pogon na FFMPeg. PrefsDialog.Dialog.SwitchEngine.Title=Video pogon je spremenjen PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=Ni na voljo video pogona za 64-bitni Java VM. \u0161e vedno PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=bo\u0161 lahko odpiral slike (JPEG, PNG) in animirane GIF. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Ali res \u017Eeli\u0161 preklop na 64-bitni VM? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=Ni 64-bitnega Video pogona -PrefsDialog.Dialog.No32bitVMXuggle.Message=Pred uporabo Xuggle moramo namestiti 32-bitni Java VM. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=Pred uporabo FFMPeg moramo namestiti 32-bitni Java VM. PrefsDialog.Dialog.No32bitVMQT.Message=Pred uporabo QuickTime moramo namestiti 32-bitni Java VM. PrefsDialog.Dialog.No32bitVM.Message=Za ve\u010D informacij si oglej Pomo\u010D Trackerja: Namestitev. PrefsDialog.Dialog.No32bitVM.Title=Zahtevan je 32-bitni VM @@ -1220,10 +1220,10 @@ Tracker.Dialog.Button.RelaunchNow=Da, za\u017Eeni ponovno Tracker.Dialog.Button.ShowPrefs=Ne, vendar poka\u017Ei preference Tracker.Dialog.Button.ContinueWithoutEngine=Ne, nadaljuj brez videa Tracker.Dialog.EngineProblems.Message1=En ali ve\u010D video pogonov je name\u0161\u010Denih, a ne dela. -Tracker.Dialog.EngineProblems.Message2=Za ve\u010D informacij poglej Pomo\u010D|Diagnostika|O Xuggle ali QuickTime. -Tracker.Dialog.ReplaceXuggle.Message1=Priporo\u010Damo, da zamenjate trenutni video pogon Xuggle -Tracker.Dialog.ReplaceXuggle.Message2=z Xuggle verzije 3.4 s ponovno namestitvijo programa Tracker (verzija 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=ali ve\u010D) in pri opcijah namestitve izberete Xuggle. +Tracker.Dialog.EngineProblems.Message2=Za ve\u010D informacij poglej Pomo\u010D|Diagnostika|O FFMPeg ali QuickTime. +Tracker.Dialog.ReplaceFFMPeg.Message1=Priporo\u010Damo, da zamenjate trenutni video pogon FFMPeg +Tracker.Dialog.ReplaceFFMPeg.Message2=z FFMPeg verzije 3.4 s ponovno namestitvijo programa Tracker (verzija 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=ali ve\u010D) in pri opcijah namestitve izberete FFMPeg. TrackerIO.Dialog.DurationIsConstant.Message=Trajanja vseh okvirjev so enaka (konstantni fps). TrackerIO.ZIPResourceFilter.Description=Tracker ZIP File (.trz) TToolbar.Button.Desktop.Tooltip=Prikaz ustreznih dokumentov HTML oziroma PDF @@ -1289,7 +1289,7 @@ TableTrackView.Dialog.NameColumn.Title=Stolpec besedila TToolBar.MenuItem.StretchOff=Reset # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Xuggle Verzija +PrefsDialog.Checkbox.WarnFFMPegVersion=FFMPeg Verzija PrefsDialog.Checkbox.WarnCopyFailed=Napake pri kopiranju datoteke za video pogon Tracker.Dialog.FailedToCopy.Title=Napaka pri kopiranju datoteke Velocity.Dialog.Color.Title=Izbira barve hitrosti diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_sr.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_sr.properties index 065fbd16..a4040fa2 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_sr.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_sr.properties @@ -719,7 +719,7 @@ PrefsDialog.Checkbox.DefaultSize=Use default PrefsDialog.Checkbox.HintsOn=Show hints by default PrefsDialog.Tab.Video.Title=Video PrefsDialog.VideoPref.BorderTitle=Video Engine -PrefsDialog.Button.Xuggle=Xuggle +PrefsDialog.Button.FFMPeg=FFMPeg PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=Memory management is unavailable when using Web Start. PrefsDialog.Dialog.WebStart.Title=Web Start Mode @@ -734,9 +734,9 @@ PrefsDialog.Upgrades.Weekly=Weekly PrefsDialog.Upgrades.Monthly=Monthly PrefsDialog.Upgrades.Never=Never PrefsDialog.Button.CheckForUpgrade=Check Now -PrefsDialog.Xuggle.Speed.BorderTitle=Xuggle Video Playback -PrefsDialog.Xuggle.Slow=Smooth (may be slow) -PrefsDialog.Xuggle.Fast=Fast (may be jerky) +PrefsDialog.FFMPeg.Speed.BorderTitle=FFMPeg Video Playback +PrefsDialog.FFMPeg.Slow=Smooth (may be slow) +PrefsDialog.FFMPeg.Fast=Fast (may be jerky) PrefsDialog.CalibrationTool.BorderTitle=Default Calibration Tool Protractor.Name=Protractor Protractor.New.Name=protractor @@ -816,23 +816,23 @@ TMenuBar.Menu.MeasuringTools=Measuring Tools TMenuBar.Menu.AngleUnits=Angle Units TMenuBar.MenuItem.Degrees=Degrees TMenuBar.MenuItem.Radians=Radians -Tracker.Dialog.NoXuggle.Title=Xuggle not found -Tracker.Dialog.NoXuggle.Message1=Xuggle (cross-platform video engine) is not installed. -Tracker.Dialog.NoXuggle.Message2=Download Xuggle from http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=About Xuggle... -Tracker.Dialog.AboutXuggle.Title=About Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=Xuggle version -Tracker.Dialog.AboutXuggle.Message.Home=Xuggle home: -Tracker.Dialog.AboutXuggle.Message.Path=Xuggle jar path: +Tracker.Dialog.NoFFMPeg.Title=FFMPeg not found +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (cross-platform video engine) is not installed. +Tracker.Dialog.NoFFMPeg.Message2=Download FFMPeg from http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=About FFMPeg... +Tracker.Dialog.AboutFFMPeg.Title=About FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=FFMPeg version +Tracker.Dialog.AboutFFMPeg.Message.Home=FFMPeg home: +Tracker.Dialog.AboutFFMPeg.Message.Path=FFMPeg jar path: Tracker.Dialog.NoVideoEngine.Message1=No video engine is installed. Without one, you Tracker.Dialog.NoVideoEngine.Message2=can only open images (JPEG, PNG) and animated GIFs. -Tracker.Dialog.NoVideoEngine.Message3=Recommended: reinstall Tracker with the Xuggle video engine. +Tracker.Dialog.NoVideoEngine.Message3=Recommended: reinstall Tracker with the FFMPeg video engine. Tracker.Dialog.NoVideoEngine.Title=No Video Engine -Tracker.Dialog.NoXuggle.Message1=Xuggle is not working correctly. Please be sure the required -Tracker.Dialog.NoXuggle.Message2=xuggle jar files are in the Tracker home directory. For details, -Tracker.Dialog.NoXuggle.Message3=see Tracker_README.txt in the Tracker home directory. -Tracker.Dialog.NoXuggle.Message4=To install Xuggle, download the latest Tracker installer from -Tracker.Dialog.NoXuggle.Title=Xuggle Unavailable +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg is not working correctly. Please be sure the required +Tracker.Dialog.NoFFMPeg.Message2=ffmpeg jar files are in the Tracker home directory. For details, +Tracker.Dialog.NoFFMPeg.Message3=see Tracker_README.txt in the Tracker home directory. +Tracker.Dialog.NoFFMPeg.Message4=To install FFMPeg, download the latest Tracker installer from +Tracker.Dialog.NoFFMPeg.Title=FFMPeg Unavailable Tracker.About.DefaultLocale=Default locale Tracker.About.CurrentLanguage=Language Tracker.Dialog.InsufficientMemory.Title=Insufficient Memory @@ -878,7 +878,7 @@ TTrackBar.Memory.Menu.SetSize=Set memory size... TTrackBar.Button.Version=Now available: version TTrackBar.Popup.MenuItem.Upgrade=Upgrade Now... TTrackBar.Popup.MenuItem.Ignore=Ignore -XuggleVideo.MenuItem.SmoothPlay=Smooth Play (may be slow) +FFMPegVideo.MenuItem.SmoothPlay=Smooth Play (may be slow) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=Calibration Tape @@ -907,13 +907,13 @@ WorldTView.Button.World=World # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=Warnings PrefsDialog.Checkbox.WarnIfNoEngine=No video engine -PrefsDialog.Checkbox.WarnIfXuggleError=Non-fatal Xuggle errors +PrefsDialog.Checkbox.WarnIfFFMPegError=Non-fatal FFMPeg errors PropertiesDialog.Title=Properties PropertiesDialog.Label.Author=Authors PropertiesDialog.Label.Contact=Contact TActions.Action.Properties=Properties... TActions.Action.OpenBrowser=Open Library Browser... -TFrame.Progress.Xuggle=Xuggle loading frame +TFrame.Progress.FFMPeg=FFMPeg loading frame TFrame.Progress.ClickToCancel=(click to cancel) TFrame.Dialog.StalledVideo.Title=Error Loading Video TFrame.Dialog.StalledVideo.Message0=The video has stalled while loading. This may be temporary. @@ -926,12 +926,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=Stop TFrame.Dialog.StalledVideo.Button.Wait=Wait Tracker.Dialog.NoVideoEngine.Checkbox=Don't show this again TrackerIO.ZipFileFilter.Description=ZIP file (.zip) -TrackerIO.Dialog.ErrorFFMPEG.Message1=Xuggle has encountered the following error while opening this video: +TrackerIO.Dialog.ErrorFFMPEG.Message1=FFMPeg has encountered the following error while opening this video: TrackerIO.Dialog.ErrorFFMPEG.Message2=Not all errors are fatal. For full error messages, choose Help|Message Log. -TrackerIO.Dialog.ErrorFFMPEG.Message3=If Xuggle fails, you may be able to open the video with QuickTime. +TrackerIO.Dialog.ErrorFFMPEG.Message3=If FFMPeg fails, you may be able to open the video with QuickTime. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Note: On Mac OSX this requires running Tracker in a 32-bit Java VM. -TrackerIO.Dialog.ErrorFFMPEG.Title=Xuggle Error -TrackerIO.ErrorFFMPEG.LogMessage=For more details, turn on Xuggle warnings in the preferences dialog (Edit|Preferences). +TrackerIO.Dialog.ErrorFFMPEG.Title=FFMPeg Error +TrackerIO.ErrorFFMPEG.LogMessage=For more details, turn on FFMPeg warnings in the preferences dialog (Edit|Preferences). TToolBar.Button.OpenBrowser.Tooltip=Open the OSP Digital Library Browser # Additions by Doug Brown 2011-07-20 @@ -1187,17 +1187,17 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=Variable frame durations PrefsDialog.Button.NoEngine=None PrefsDialog.Dialog.SwitchToQT.Message=Switching to QuickTime also changes the Java VM to 32-bit. -PrefsDialog.Dialog.SwitchToXuggle32.Message=Switching to Xuggle also changes the Java VM to 32-bit. -PrefsDialog.Dialog.SwitchToXuggle64.Message=Switching to Xuggle also changes the Java VM to 64-bit. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=Switching to FFMPeg also changes the Java VM to 32-bit. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=Switching to FFMPeg also changes the Java VM to 64-bit. PrefsDialog.Dialog.SwitchVM.Title=Java VM Changed PrefsDialog.Dialog.SwitchTo32.Message=Switching to a 32-bit Java VM also changes the video engine to QuickTime. -PrefsDialog.Dialog.SwitchTo64.Message=Switching to a 64-bit Java VM also changes the video engine to Xuggle. +PrefsDialog.Dialog.SwitchTo64.Message=Switching to a 64-bit Java VM also changes the video engine to FFMPeg. PrefsDialog.Dialog.SwitchEngine.Title=Video Engine Changed PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=No video engine is available for a 64-bit Java VM. You will PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=still be able to open images (JPEG, PNG) and animated GIFs. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Are you sure you wish to switch to a 64-bit VM? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=No 64-bit Video Engine -PrefsDialog.Dialog.No32bitVMXuggle.Message=A 32-bit Java VM must be installed before Xuggle can be used. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=A 32-bit Java VM must be installed before FFMPeg can be used. PrefsDialog.Dialog.No32bitVMQT.Message=A 32-bit Java VM must be installed before QuickTime can be used. PrefsDialog.Dialog.No32bitVM.Message=For more information, see Tracker Help: Installation. PrefsDialog.Dialog.No32bitVM.Title=32-bit VM Required @@ -1213,10 +1213,10 @@ Tracker.Dialog.Button.RelaunchNow=Yes, relaunch now Tracker.Dialog.Button.ShowPrefs=No, but show preferences Tracker.Dialog.Button.ContinueWithoutEngine=No, continue without video Tracker.Dialog.EngineProblems.Message1=One or more video engines are installed but not working. -Tracker.Dialog.EngineProblems.Message2=For more information see Help|Diagnostics|About Xuggle or QuickTime. -Tracker.Dialog.ReplaceXuggle.Message1=We recommend you replace your current Xuggle video engine -Tracker.Dialog.ReplaceXuggle.Message2=with Xuggle version 3.4 by reinstalling Tracker (version 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=or above) and selecting Xuggle in the installation options. +Tracker.Dialog.EngineProblems.Message2=For more information see Help|Diagnostics|About FFMPeg or QuickTime. +Tracker.Dialog.ReplaceFFMPeg.Message1=We recommend you replace your current FFMPeg video engine +Tracker.Dialog.ReplaceFFMPeg.Message2=with FFMPeg version 3.4 by reinstalling Tracker (version 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=or above) and selecting FFMPeg in the installation options. TrackerIO.Dialog.DurationIsConstant.Message=All frame durations are equal (constant fps). TrackerIO.ZIPResourceFilter.Description=Tracker ZIP File (.trz) TToolbar.Button.Desktop.Tooltip=Display associated HTML and/or PDF documents @@ -1282,7 +1282,7 @@ TableTrackView.Dialog.NameColumn.Title=Text Column TToolBar.MenuItem.StretchOff=Reset # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Xuggle Version +PrefsDialog.Checkbox.WarnFFMPegVersion=FFMPeg Version PrefsDialog.Checkbox.WarnCopyFailed=Video Engine File Copy Errors Tracker.Dialog.FailedToCopy.Title=File Copy Error Velocity.Dialog.Color.Title=Choose Velocity Color diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_sv.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_sv.properties index 3e1f19dc..ed6e05ed 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_sv.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_sv.properties @@ -730,7 +730,7 @@ PrefsDialog.Checkbox.DefaultSize=Anv PrefsDialog.Checkbox.HintsOn=Visa tips genom default PrefsDialog.Tab.Video.Title=Video PrefsDialog.VideoPref.BorderTitle=Video spelare -PrefsDialog.Button.Xuggle=Xuggle (rekommenderas) +PrefsDialog.Button.FFMPeg=FFMPeg (rekommenderas) PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=Minnes hanteringen är inte tillgänglig när Web Start används. PrefsDialog.Dialog.WebStart.Title=Web Start Mode @@ -745,9 +745,9 @@ PrefsDialog.Upgrades.Weekly=Varje vecka PrefsDialog.Upgrades.Monthly=Varje mċnad PrefsDialog.Upgrades.Never=Aldrig PrefsDialog.Button.CheckForUpgrade=Sök nu -PrefsDialog.Xuggle.Speed.BorderTitle=Xuggle Video Playback -PrefsDialog.Xuggle.Slow=Smooth (kan vara lċngsam) -PrefsDialog.Xuggle.Fast=Fast (kan verka hoppande) +PrefsDialog.FFMPeg.Speed.BorderTitle=FFMPeg Video Playback +PrefsDialog.FFMPeg.Slow=Smooth (kan vara lċngsam) +PrefsDialog.FFMPeg.Fast=Fast (kan verka hoppande) PrefsDialog.CalibrationTool.BorderTitle=Default Kalibreringsverktyg Protractor.Name=Gradskiva Protractor.New.Name=gradskiva @@ -828,22 +828,22 @@ TMenuBar.Menu.MeasuringTools=M TMenuBar.Menu.AngleUnits=Vinkel enheter TMenuBar.MenuItem.Degrees=Grader TMenuBar.MenuItem.Radians=Radianer -Tracker.Dialog.NoXuggle.Title=Xuggle kunde inte hittas -Tracker.Dialog.NoXuggle.Message1=Xuggle (cross-platform video engine) är inte installerad. -Tracker.Dialog.NoXuggle.Message2=Download Xuggle frċn http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=Om Xuggle... -Tracker.Dialog.AboutXuggle.Title=Om Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=Xuggle version -Tracker.Dialog.AboutXuggle.Message.Home=Xuggle home: -Tracker.Dialog.AboutXuggle.Message.Path=Xuggle path: +Tracker.Dialog.NoFFMPeg.Title=FFMPeg kunde inte hittas +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (cross-platform video engine) är inte installerad. +Tracker.Dialog.NoFFMPeg.Message2=Download FFMPeg frċn http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=Om FFMPeg... +Tracker.Dialog.AboutFFMPeg.Title=Om FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=FFMPeg version +Tracker.Dialog.AboutFFMPeg.Message.Home=FFMPeg home: +Tracker.Dialog.AboutFFMPeg.Message.Path=FFMPeg path: Tracker.Dialog.NoVideoEngine.Message1=Ingen video spelare kunde hittas. Utan dessa kan Trakck bara Tracker.Dialog.NoVideoEngine.Message2=öppna bilder, blidsekvenser och animmated gifs. -Tracker.Dialog.NoVideoEngine.Message3=För att installera Xuggle, Trackers rekommenderade videospelare pċ +Tracker.Dialog.NoVideoEngine.Message3=För att installera FFMPeg, Trackers rekommenderade videospelare pċ Tracker.Dialog.NoVideoEngine.Message4=alla platformar, download den senaste Tracker installer frċn Tracker.Dialog.NoVideoEngine.Title=Videospelare saknas -Tracker.Dialog.NoXuggle.Message1=Xuggle, Tracker's rekommenderade videospelare, har inte installerats än. -Tracker.Dialog.NoXuggle.Message2=För att installera Xuggle, download den senaste Tracker installer from -Tracker.Dialog.NoXuggle.Title=Xuggle saknas +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg, Tracker's rekommenderade videospelare, har inte installerats än. +Tracker.Dialog.NoFFMPeg.Message2=För att installera FFMPeg, download den senaste Tracker installer from +Tracker.Dialog.NoFFMPeg.Title=FFMPeg saknas Tracker.About.DefaultLocale=Default placering Tracker.About.CurrentLanguage=Sprċk Tracker.Dialog.InsufficientMemory.Title=För lite minne @@ -889,7 +889,7 @@ TTrackBar.Memory.Menu.SetSize=S TTrackBar.Button.Version=Now available: version TTrackBar.Popup.MenuItem.Upgrade=Uppdatera nu... TTrackBar.Popup.MenuItem.Ignore=Ignorera -XuggleVideo.MenuItem.SmoothPlay=Smooth Play (kan vara lċngsam) +FFMPegVideo.MenuItem.SmoothPlay=Smooth Play (kan vara lċngsam) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=Kalibrerings mċttband @@ -918,13 +918,13 @@ WorldTView.Button.World=World # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=Varningar PrefsDialog.Checkbox.WarnIfNoEngine=Ingen video-spelare -PrefsDialog.Checkbox.WarnIfXuggleError=Non-fatal Xuggle fel +PrefsDialog.Checkbox.WarnIfFFMPegError=Non-fatal FFMPeg fel PropertiesDialog.Title=Egenskaper PropertiesDialog.Label.Author=Författare PropertiesDialog.Label.Contact=Kontakt TActions.Action.Properties=Egenskaper... TActions.Action.OpenBrowser=Öppna bliblioteks webläsaren... -TFrame.Progress.Xuggle=Xuggle lastar in bildrutor +TFrame.Progress.FFMPeg=FFMPeg lastar in bildrutor TFrame.Progress.ClickToCancel=(klicka för att stoppa) TFrame.Dialog.StalledVideo.Title=Fel inträffade under inläsning av video TFrame.Dialog.StalledVideo.Message0=Inlastning av video har stannat upp. Detta kan vara ett tillfälligt fel. @@ -937,12 +937,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=Stopp TFrame.Dialog.StalledVideo.Button.Wait=Vänta Tracker.Dialog.NoVideoEngine.Checkbox=Visa inte igen TrackerIO.ZipFileFilter.Description=ZIP filer -TrackerIO.Dialog.ErrorFFMPEG.Message1=Xuggle träffat pċ följande fel medan videon öppnades: +TrackerIO.Dialog.ErrorFFMPEG.Message1=FFMPeg träffat pċ följande fel medan videon öppnades: TrackerIO.Dialog.ErrorFFMPEG.Message2=Inte alla fel är fatala. För fullständigt felmeddelande öppna Help|Message Log. -TrackerIO.Dialog.ErrorFFMPEG.Message3=Om Xuggle misslyckas, kan det gċ att öppna videon med QuickTime. +TrackerIO.Dialog.ErrorFFMPEG.Message3=Om FFMPeg misslyckas, kan det gċ att öppna videon med QuickTime. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Note: I Mac OSX kräver detta att Tracker körs med 32-bit Java VM. -TrackerIO.Dialog.ErrorFFMPEG.Title=Xuggle Fel -TrackerIO.ErrorFFMPEG.LogMessage=För mer detajer, sätt pċ Xuggle varningar i inställningsdialogen (Edit|Preferences). +TrackerIO.Dialog.ErrorFFMPEG.Title=FFMPeg Fel +TrackerIO.ErrorFFMPEG.LogMessage=För mer detajer, sätt pċ FFMPeg varningar i inställningsdialogen (Edit|Preferences). TToolBar.Button.OpenBrowser.Tooltip=Öppna OSP Digital Library Browser # Additions by Doug Brown 2011-07-20 @@ -1200,17 +1200,17 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=Varierande bild separation PrefsDialog.Button.NoEngine=Ingen PrefsDialog.Dialog.SwitchToQT.Message=Byte till QuickTime ändrar ocksċ Java VM till 32-bit. -PrefsDialog.Dialog.SwitchToXuggle32.Message=Byte till Xuggle ändrar ocksċ Java VM till 32-bit. -PrefsDialog.Dialog.SwitchToXuggle64.Message=Switching to Xuggle ändrar ocksċ Java VM till 64-bit. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=Byte till FFMPeg ändrar ocksċ Java VM till 32-bit. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=Switching to FFMPeg ändrar ocksċ Java VM till 64-bit. PrefsDialog.Dialog.SwitchVM.Title=Java VM Ändrad PrefsDialog.Dialog.SwitchTo32.Message=Byte till 32-bit Java VM ändrar ocksċ videospelaren till QuickTime. -PrefsDialog.Dialog.SwitchTo64.Message=Byte till 64-bit Java VM ändrar ocksċ videospelaren till Xuggle. +PrefsDialog.Dialog.SwitchTo64.Message=Byte till 64-bit Java VM ändrar ocksċ videospelaren till FFMPeg. PrefsDialog.Dialog.SwitchEngine.Title=Videospelare ändrad PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=Ingen videospelare finn tillgänglig för 64-bit Java VM. Du kan PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=fortfarande öppna bilder images (JPEG, PNG) och animated GIFs. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Är du säker pċ att du vill byta till 64-bit VM? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=Ingen 64-bit Videospelare -PrefsDialog.Dialog.No32bitVMXuggle.Message=32-bit Java VM mċste vara installerad innan Xuggle kan brukas. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=32-bit Java VM mċste vara installerad innan FFMPeg kan brukas. PrefsDialog.Dialog.No32bitVMQT.Message=32-bit Java VM mċste vara installerad innane QuickTime kan brukas. PrefsDialog.Dialog.No32bitVM.Message=För mer information, se Tracker Help: Installation. PrefsDialog.Dialog.No32bitVM.Title=32-bit VM krävs @@ -1226,10 +1226,10 @@ Tracker.Dialog.Button.RelaunchNow=Ja, starta om Tracker.Dialog.Button.ShowPrefs=Nej, men visa inställningar Tracker.Dialog.Button.ContinueWithoutEngine=Nej, fortsätt utan video Tracker.Dialog.EngineProblems.Message1=En eller flera videospelare är installerade men fungerar ej. -Tracker.Dialog.EngineProblems.Message2=För mer information se Help|Diagnostics|About Xuggle eller QuickTime. -Tracker.Dialog.ReplaceXuggle.Message1=Vi rekommenderar att du ersätter din nuvarande Xuggle videospelare -Tracker.Dialog.ReplaceXuggle.Message2=med Xuggle version 3.4 genom att ominstallera Tracker (version 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=eller senare) och väljer Xuggle i installationen. +Tracker.Dialog.EngineProblems.Message2=För mer information se Help|Diagnostics|About FFMPeg eller QuickTime. +Tracker.Dialog.ReplaceFFMPeg.Message1=Vi rekommenderar att du ersätter din nuvarande FFMPeg videospelare +Tracker.Dialog.ReplaceFFMPeg.Message2=med FFMPeg version 3.4 genom att ominstallera Tracker (version 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=eller senare) och väljer FFMPeg i installationen. TrackerIO.Dialog.DurationIsConstant.Message=Uppspelningshastigheten är konstant (konstant fps). TrackerIO.ZIPResourceFilter.Description=Tracker ZIP File (.trz) @@ -1296,7 +1296,7 @@ TableTrackView.Dialog.NameColumn.Title=Text Kolumn TToolBar.MenuItem.StretchOff=Reset # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Xuggle Version +PrefsDialog.Checkbox.WarnFFMPegVersion=FFMPeg Version PrefsDialog.Checkbox.WarnCopyFailed=Video maskin Fil Kopieringsfel Tracker.Dialog.FailedToCopy.Title=Fil kopieringsfel Velocity.Dialog.Color.Title=Välj färg för hastighet diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_th_TH.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_th_TH.properties index e089c9e9..5fa46cf5 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_th_TH.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_th_TH.properties @@ -719,7 +719,7 @@ PrefsDialog.Checkbox.DefaultSize=\u0e43\u0e0a\u0e49\u0e04\u0e48\u0e32\u0e40\u0e2 PrefsDialog.Checkbox.HintsOn=\u0e41\u0e2a\u0e14\u0e07\u0e04\u0e48\u0e32\u0e17\u0e35\u0e48\u0e41\u0e19\u0e30\u0e19\u0e33\u0e17\u0e35\u0e48\u0e16\u0e39\u0e01\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e44\u0e27\u0e49 PrefsDialog.Tab.Video.Title=\u0e27\u0e34\u0e14\u0e35\u0e42\u0e2d PrefsDialog.VideoPref.BorderTitle=\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21\u0e40\u0e25\u0e48\u0e19\u0e27\u0e34\u0e14\u0e35\u0e42\u0e2d -PrefsDialog.Button.Xuggle=\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 Xuggle (\u0e41\u0e19\u0e30\u0e19\u0e33) +PrefsDialog.Button.FFMPeg=\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 FFMPeg (\u0e41\u0e19\u0e30\u0e19\u0e33) PrefsDialog.Button.QT=\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 QuickTime PrefsDialog.Dialog.WebStart.Message=\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e01\u0e32\u0e23\u0e2b\u0e19\u0e48\u0e27\u0e22\u0e04\u0e27\u0e32\u0e21\u0e08\u0e33\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e0a\u0e49\u0e44\u0e14\u0e49 \u0e02\u0e13\u0e30\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e40\u0e27\u0e1b\u0e44\u0e0b\u0e15\u0e4c PrefsDialog.Dialog.WebStart.Title=\u0e40\u0e23\u0e34\u0e48\u0e21\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e42\u0e21\u0e40\u0e14\u0e25\u0e08\u0e32\u0e01\u0e40\u0e27\u0e1b\u0e44\u0e0b\u0e15\u0e4c @@ -734,9 +734,9 @@ PrefsDialog.Upgrades.Weekly=\u0e23\u0e32\u0e22\u0e2a\u0e31\u0e1b\u0e14\u0e32\u0e PrefsDialog.Upgrades.Monthly=\u0e23\u0e32\u0e22\u0e40\u0e14\u0e37\u0e2d\u0e19 PrefsDialog.Upgrades.Never=\u0e44\u0e21\u0e48\u0e40\u0e04\u0e22 PrefsDialog.Button.CheckForUpgrade=\u0e15\u0e23\u0e32\u0e08\u0e2a\u0e2d\u0e1a\u0e15\u0e2d\u0e19\u0e19\u0e35\u0e49 -PrefsDialog.Xuggle.Speed.BorderTitle=\u0e40\u0e25\u0e48\u0e19\u0e27\u0e34\u0e14\u0e35\u0e42\u0e2d\u0e22\u0e49\u0e2d\u0e19\u0e01\u0e25\u0e31\u0e1a -PrefsDialog.Xuggle.Slow=\u0e40\u0e23\u0e35\u0e22\u0e1a (\u0e2d\u0e32\u0e08\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e0a\u0e49\u0e32\u0e25\u0e07) -PrefsDialog.Xuggle.Fast=\u0e40\u0e23\u0e47\u0e27 (\u0e2d\u0e32\u0e08\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e01\u0e23\u0e30\u0e15\u0e38\u0e01) +PrefsDialog.FFMPeg.Speed.BorderTitle=\u0e40\u0e25\u0e48\u0e19\u0e27\u0e34\u0e14\u0e35\u0e42\u0e2d\u0e22\u0e49\u0e2d\u0e19\u0e01\u0e25\u0e31\u0e1a +PrefsDialog.FFMPeg.Slow=\u0e40\u0e23\u0e35\u0e22\u0e1a (\u0e2d\u0e32\u0e08\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e0a\u0e49\u0e32\u0e25\u0e07) +PrefsDialog.FFMPeg.Fast=\u0e40\u0e23\u0e47\u0e27 (\u0e2d\u0e32\u0e08\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e01\u0e23\u0e30\u0e15\u0e38\u0e01) PrefsDialog.CalibrationTool.BorderTitle=\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e21\u0e37\u0e2d\u0e04\u0e48\u0e32\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19\u0e02\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e1b\u0e23\u0e31\u0e1a\u0e40\u0e17\u0e35\u0e22\u0e1a Protractor.Name=\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e21\u0e37\u0e2d\u0e04\u0e48\u0e32\u0e27\u0e31\u0e14\u0e21\u0e38\u0e21 Protractor.New.Name=\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e21\u0e37\u0e2d\u0e27\u0e31\u0e14\u0e04\u0e48\u0e32\u0e21\u0e38\u0e21 @@ -816,23 +816,23 @@ TMenuBar.Menu.MeasuringTools=\u0e40\u0e21\u0e19\u0e39\u0e40\u0e04\u0e23\u0e37\u0 TMenuBar.Menu.AngleUnits=\u0e2b\u0e19\u0e48\u0e27\u0e22\u0e02\u0e2d\u0e07\u0e21\u0e38\u0e21 TMenuBar.MenuItem.Degrees=\u0e2d\u0e07\u0e28\u0e32 TMenuBar.MenuItem.Radians=\u0e40\u0e23\u0e40\u0e14\u0e35\u0e22\u0e19 -Tracker.Dialog.NoXuggle.Title=\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 Xuggle -Tracker.Dialog.NoXuggle.Message1=\u0e22\u0e31\u0e07\u0e44\u0e21\u0e48\u0e25\u0e07\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 Xuggle (cross-platform video engine) -Tracker.Dialog.NoXuggle.Message2=Download \u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 Xuggle \u0e08\u0e32\u0e01 http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a Xuggle... -Tracker.Dialog.AboutXuggle.Title=\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=\u0e40\u0e27\u0e2d\u0e23\u0e4c\u0e0a\u0e31\u0e48\u0e19 Xuggle -Tracker.Dialog.AboutXuggle.Message.Home=Xuggle home: -Tracker.Dialog.AboutXuggle.Message.Path=Xuggle path: +Tracker.Dialog.NoFFMPeg.Title=\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 FFMPeg +Tracker.Dialog.NoFFMPeg.Message1=\u0e22\u0e31\u0e07\u0e44\u0e21\u0e48\u0e25\u0e07\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 FFMPeg (cross-platform video engine) +Tracker.Dialog.NoFFMPeg.Message2=Download \u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 FFMPeg \u0e08\u0e32\u0e01 http://www.xuggle.com/xuggler/downloads/. +Tracker.Action.AboutFFMPeg=\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a FFMPeg... +Tracker.Dialog.AboutFFMPeg.Title=\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=\u0e40\u0e27\u0e2d\u0e23\u0e4c\u0e0a\u0e31\u0e48\u0e19 FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Home=FFMPeg home: +Tracker.Dialog.AboutFFMPeg.Message.Path=FFMPeg path: Tracker.Dialog.NoVideoEngine.Message1=\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21\u0e17\u0e35\u0e48\u0e43\u0e0a\u0e49\u0e40\u0e1b\u0e34\u0e14\u0e27\u0e34\u0e14\u0e35\u0e42\u0e2d Tracker.Dialog.NoVideoEngine.Message2=\u0e40\u0e1b\u0e34\u0e14\u0e20\u0e32\u0e1e\u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19, \u0e25\u0e33\u0e14\u0e31\u0e1a\u0e20\u0e32\u0e1e, \u0e41\u0e25\u0e30\u0e20\u0e32\u0e1e\u0e40\u0e04\u0e25\u0e37\u0e48\u0e2d\u0e19\u0e44\u0e2b\u0e27. -Tracker.Dialog.NoVideoEngine.Message3=\u0e25\u0e07\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 Xuggle,\u0e43\u0e2b\u0e49\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e1a\u0e19 Tracker +Tracker.Dialog.NoVideoEngine.Message3=\u0e25\u0e07\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 FFMPeg,\u0e43\u0e2b\u0e49\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e1a\u0e19 Tracker Tracker.Dialog.NoVideoEngine.Title=\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21\u0e40\u0e1b\u0e34\u0e14\u0e27\u0e34\u0e14\u0e35\u0e42\u0e2d -Tracker.Dialog.NoXuggle.Message1=Xuggle is not working correctly. Please be sure the required -Tracker.Dialog.NoXuggle.Message2=xuggle jar files are in the Tracker home directory. For details, -Tracker.Dialog.NoXuggle.Message3=see Tracker_README.txt in the Tracker home directory. -Tracker.Dialog.NoXuggle.Message4=To install Xuggle, download the latest Tracker installer from -Tracker.Dialog.NoXuggle.Title=\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 Xuggle +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg is not working correctly. Please be sure the required +Tracker.Dialog.NoFFMPeg.Message2=xuggle jar files are in the Tracker home directory. For details, +Tracker.Dialog.NoFFMPeg.Message3=see Tracker_README.txt in the Tracker home directory. +Tracker.Dialog.NoFFMPeg.Message4=To install FFMPeg, download the latest Tracker installer from +Tracker.Dialog.NoFFMPeg.Title=\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 FFMPeg Tracker.About.DefaultLocale=\u0e20\u0e32\u0e29\u0e32\u0e17\u0e35\u0e48\u0e43\u0e0a\u0e49 Tracker.About.CurrentLanguage=\u0e20\u0e32\u0e29\u0e32 Tracker.Dialog.InsufficientMemory.Title=\u0e2b\u0e19\u0e48\u0e27\u0e22\u0e04\u0e27\u0e32\u0e21\u0e08\u0e33\u0e44\u0e21\u0e48\u0e40\u0e1e\u0e35\u0e22\u0e07\u0e1e\u0e2d @@ -878,7 +878,7 @@ TTrackBar.Memory.Menu.SetSize=\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e02\u0e19\u0e32\u TTrackBar.Button.Version=Now available: \u0e40\u0e27\u0e2d\u0e23\u0e4c\u0e0a\u0e31\u0e19 TTrackBar.Popup.MenuItem.Upgrade=\u0e2d\u0e31\u0e1e\u0e40\u0e01\u0e23\u0e14\u0e15\u0e2d\u0e19\u0e19\u0e35\u0e49... TTrackBar.Popup.MenuItem.Ignore=\u0e44\u0e21\u0e48\u0e2a\u0e19\u0e43\u0e08 -XuggleVideo.MenuItem.SmoothPlay=\u0e40\u0e25\u0e48\u0e19\u0e44\u0e14\u0e49\u0e15\u0e48\u0e2d\u0e40\u0e19\u0e37\u0e48\u0e2d\u0e07 (\u0e2d\u0e32\u0e08\u0e08\u0e30\u0e0a\u0e49\u0e32) +FFMPegVideo.MenuItem.SmoothPlay=\u0e40\u0e25\u0e48\u0e19\u0e44\u0e14\u0e49\u0e15\u0e48\u0e2d\u0e40\u0e19\u0e37\u0e48\u0e2d\u0e07 (\u0e2d\u0e32\u0e08\u0e08\u0e30\u0e0a\u0e49\u0e32) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=\u0e40\u0e17\u0e1b\u0e27\u0e31\u0e14\u0e1b\u0e23\u0e31\u0e1a\u0e40\u0e17\u0e35\u0e22\u0e1a @@ -907,13 +907,13 @@ WorldTView.Button.World=\u0e04\u0e27\u0e32\u0e21\u0e40\u0e1b\u0e47\u0e19\u0e08\u # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=\u0e04\u0e33\u0e40\u0e15\u0e37\u0e2d\u0e19 PrefsDialog.Checkbox.WarnIfNoEngine=\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21\u0e40\u0e25\u0e48\u0e19\u0e27\u0e34\u0e14\u0e35\u0e42\u0e2d -PrefsDialog.Checkbox.WarnIfXuggleError=\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 Xuggle \u0e40\u0e01\u0e34\u0e14\u0e04\u0e27\u0e32\u0e21\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14 +PrefsDialog.Checkbox.WarnIfFFMPegError=\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 FFMPeg \u0e40\u0e01\u0e34\u0e14\u0e04\u0e27\u0e32\u0e21\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14 PropertiesDialog.Title=\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34 PropertiesDialog.Label.Author=\u0e1c\u0e39\u0e49\u0e40\u0e02\u0e35\u0e22\u0e19 PropertiesDialog.Label.Contact=\u0e15\u0e34\u0e14\u0e15\u0e48\u0e2d TActions.Action.Properties=\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34... TActions.Action.OpenBrowser=\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e19\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e04\u0e49\u0e19\u0e2b\u0e32... -TFrame.Progress.Xuggle=\u0e01\u0e33\u0e25\u0e31\u0e07\u0e42\u0e2b\u0e25\u0e14 Xuggle +TFrame.Progress.FFMPeg=\u0e01\u0e33\u0e25\u0e31\u0e07\u0e42\u0e2b\u0e25\u0e14 FFMPeg TFrame.Progress.ClickToCancel=(\u0e04\u0e25\u0e34\u0e01\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01) TFrame.Dialog.StalledVideo.Title=\u0e01\u0e32\u0e23\u0e42\u0e2b\u0e25\u0e14\u0e27\u0e34\u0e14\u0e35\u0e42\u0e2d\u0e25\u0e49\u0e21\u0e40\u0e2b\u0e25\u0e27 TFrame.Dialog.StalledVideo.Message0=\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21\u0e2d\u0e32\u0e08\u0e2b\u0e22\u0e38\u0e14\u0e17\u0e33\u0e07\u0e32\u0e19\u0e0a\u0e31\u0e48\u0e27\u0e04\u0e23\u0e32\u0e27\u0e43\u0e19\u0e02\u0e13\u0e30\u0e42\u0e2b\u0e25\u0e14\u0e27\u0e34\u0e14\u0e35\u0e42\u0e2d @@ -926,12 +926,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=\u0e2b\u0e22\u0e38\u0e14 TFrame.Dialog.StalledVideo.Button.Wait=\u0e23\u0e2d Tracker.Dialog.NoVideoEngine.Checkbox=\u0e44\u0e21\u0e48\u0e41\u0e2a\u0e14\u0e07\u0e2a\u0e48\u0e27\u0e19\u0e19\u0e35\u0e49\u0e2d\u0e35\u0e01\u0e04\u0e23\u0e31\u0e49\u0e07 TrackerIO.ZipFileFilter.Description=ZIP files -TrackerIO.Dialog.ErrorFFMPEG.Message1= \u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 Xuggle \u0e1e\u0e1a\u0e04\u0e27\u0e32\u0e21\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14\u0e43\u0e19\u0e02\u0e13\u0e30\u0e17\u0e33\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e34\u0e14\u0e44\u0e1f\u0e25\u0e4c\u0e27\u0e34\u0e14\u0e35\u0e42\u0e2d\u0e19\u0e35\u0e49 +TrackerIO.Dialog.ErrorFFMPEG.Message1= \u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 FFMPeg \u0e1e\u0e1a\u0e04\u0e27\u0e32\u0e21\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14\u0e43\u0e19\u0e02\u0e13\u0e30\u0e17\u0e33\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e34\u0e14\u0e44\u0e1f\u0e25\u0e4c\u0e27\u0e34\u0e14\u0e35\u0e42\u0e2d\u0e19\u0e35\u0e49 TrackerIO.Dialog.ErrorFFMPEG.Message2=Not all errors are fatal. For full error messages, choose Help|Message Log. -TrackerIO.Dialog.ErrorFFMPEG.Message3=\u0e16\u0e49\u0e32 Xuggle \u0e25\u0e49\u0e21\u0e40\u0e2b\u0e25\u0e27, \u0e04\u0e38\u0e13\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e1b\u0e34\u0e14\u0e01\u0e31\u0e1a\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 QuickTime +TrackerIO.Dialog.ErrorFFMPEG.Message3=\u0e16\u0e49\u0e32 FFMPeg \u0e25\u0e49\u0e21\u0e40\u0e2b\u0e25\u0e27, \u0e04\u0e38\u0e13\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e1b\u0e34\u0e14\u0e01\u0e31\u0e1a\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 QuickTime TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Note: \u0e1a\u0e19\u0e23\u0e30\u0e1a\u0e1a Mac OSX \u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e43\u0e0a\u0e49 32-bit Java VM -TrackerIO.Dialog.ErrorFFMPEG.Title=Xuggle \u0e21\u0e35\u0e04\u0e27\u0e32\u0e21\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14\u0e40\u0e01\u0e34\u0e14\u0e02\u0e36\u0e49\u0e19 -TrackerIO.ErrorFFMPEG.LogMessage=\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e14\u0e35\u0e22\u0e14\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21,\u0e43\u0e2b\u0e49\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e40\u0e1b\u0e34\u0e14 Xuggle \u0e43\u0e19 preferences dialog (\u0e41\u0e01\u0e49\u0e44\u0e02|\u0e01\u0e32\u0e23\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32). +TrackerIO.Dialog.ErrorFFMPEG.Title=FFMPeg \u0e21\u0e35\u0e04\u0e27\u0e32\u0e21\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14\u0e40\u0e01\u0e34\u0e14\u0e02\u0e36\u0e49\u0e19 +TrackerIO.ErrorFFMPEG.LogMessage=\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e14\u0e35\u0e22\u0e14\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21,\u0e43\u0e2b\u0e49\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e40\u0e1b\u0e34\u0e14 FFMPeg \u0e43\u0e19 preferences dialog (\u0e41\u0e01\u0e49\u0e44\u0e02|\u0e01\u0e32\u0e23\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32). TToolBar.Button.OpenBrowser.Tooltip=\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e19 OSP Digital Library Browser # Additions by Doug Brown 2011-07-20 @@ -1187,17 +1187,17 @@ PrefsDialog.Checkbox.32BitVM=32 \u0e1a\u0e34\u0e15 PrefsDialog.Checkbox.WarnVariableDuration=\u0e40\u0e1b\u0e47\u0e19\u0e15\u0e31\u0e27\u0e41\u0e1b\u0e23\u0e0a\u0e48\u0e27\u0e07\u0e40\u0e27\u0e25\u0e32\u0e02\u0e2d\u0e07\u0e40\u0e1f\u0e23\u0e21 PrefsDialog.Button.NoEngine=\u0e44\u0e21\u0e48 PrefsDialog.Dialog.SwitchToQT.Message=\u0e2a\u0e25\u0e31\u0e1a\u0e40\u0e1b\u0e47\u0e19 QuickTime \u0e14\u0e49\u0e32\u0e22\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19 Java VM to 32-bit. -PrefsDialog.Dialog.SwitchToXuggle32.Message=\u0e2a\u0e25\u0e31\u0e1a\u0e40\u0e1b\u0e47\u0e19 Xuggle \u0e14\u0e49\u0e27\u0e22\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19 Java VM to 32-bit. -PrefsDialog.Dialog.SwitchToXuggle64.Message=\u0e2a\u0e25\u0e31\u0e1a\u0e40\u0e1b\u0e47\u0e19 Xuggle \u0e14\u0e49\u0e27\u0e22\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19 Java VM to 64-bit. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=\u0e2a\u0e25\u0e31\u0e1a\u0e40\u0e1b\u0e47\u0e19 FFMPeg \u0e14\u0e49\u0e27\u0e22\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19 Java VM to 32-bit. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=\u0e2a\u0e25\u0e31\u0e1a\u0e40\u0e1b\u0e47\u0e19 FFMPeg \u0e14\u0e49\u0e27\u0e22\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19 Java VM to 64-bit. PrefsDialog.Dialog.SwitchVM.Title=\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e41\u0e1b\u0e25\u0e07 Java VM PrefsDialog.Dialog.SwitchTo32.Message=\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e40\u0e1b\u0e47\u0e19 a 32-bit Java VM \u0e14\u0e49\u0e27\u0e22\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19 video engine to QuickTime. -PrefsDialog.Dialog.SwitchTo64.Message=\u0e2a\u0e25\u0e31\u0e1a\u0e40\u0e1b\u0e47\u0e19 a 64-bit Java VM \u0e14\u0e49\u0e27\u0e22\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19 the video engine to Xuggle. +PrefsDialog.Dialog.SwitchTo64.Message=\u0e2a\u0e25\u0e31\u0e1a\u0e40\u0e1b\u0e47\u0e19 a 64-bit Java VM \u0e14\u0e49\u0e27\u0e22\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19 the video engine to FFMPeg. PrefsDialog.Dialog.SwitchEngine.Title=\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21\u0e40\u0e1b\u0e34\u0e14\u0e27\u0e34\u0e14\u0e35\u0e42\u0e2d PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=\u0e44\u0e21\u0e48\u0e21\u0e35\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21\u0e40\u0e1b\u0e34\u0e14\u0e27\u0e34\u0e14\u0e35\u0e42\u0e2d \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a 64-bit Java VM. \u0e04\u0e38\u0e13\u0e08\u0e30 PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=\u0e22\u0e31\u0e07\u0e04\u0e07\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e1b\u0e34\u0e14\u0e20\u0e32\u0e1e (JPEG, PNG) \u0e41\u0e25\u0e30 animated GIFs \u0e44\u0e14\u0e49 PrefsDialog.Dialog.NoEngineIn64bitVM.Question=\u0e04\u0e38\u0e13\u0e41\u0e19\u0e48\u0e43\u0e08\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48\u0e17\u0e35\u0e48\u0e08\u0e30\u0e2a\u0e25\u0e31\u0e1a\u0e40\u0e1b\u0e47\u0e19 64-bit VM PrefsDialog.Dialog.NoEngineIn64bitVM.Title=\u0e44\u0e21\u0e48\u0e21\u0e35\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21\u0e40\u0e1b\u0e34\u0e14\u0e27\u0e34\u0e14\u0e35\u0e42\u0e2d 64-bit -PrefsDialog.Dialog.No32bitVMXuggle.Message=\u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e25\u0e07\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 32-bit Java \u0e01\u0e48\u0e2d\u0e19 Xuggle \u0e08\u0e36\u0e07\u0e08\u0e30\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e44\u0e14\u0e49 +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=\u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e25\u0e07\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 32-bit Java \u0e01\u0e48\u0e2d\u0e19 FFMPeg \u0e08\u0e36\u0e07\u0e08\u0e30\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e44\u0e14\u0e49 PrefsDialog.Dialog.No32bitVMQT.Message=\u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e25\u0e07\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 32-bit Java VM \u0e01\u0e48\u0e2d\u0e19 QuickTime \u0e08\u0e36\u0e07\u0e08\u0e30\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e44\u0e14\u0e49 PrefsDialog.Dialog.No32bitVM.Message=\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21, \u0e14\u0e39\u0e43\u0e19 Tracker Help: \u0e01\u0e32\u0e23\u0e15\u0e34\u0e14\u0e15\u0e31\u0e49\u0e07\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 PrefsDialog.Dialog.No32bitVM.Title=\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23 32-bit VM @@ -1213,10 +1213,10 @@ Tracker.Dialog.Button.RelaunchNow=\u0e43\u0e0a\u0e48, \u0e40\u0e23\u0e34\u0e48\u Tracker.Dialog.Button.ShowPrefs=\u0e44\u0e21\u0e48, \u0e41\u0e15\u0e48\u0e41\u0e2a\u0e14\u0e07\u0e01\u0e32\u0e23\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32 Tracker.Dialog.Button.ContinueWithoutEngine=\u0e44\u0e21\u0e48, \u0e17\u0e33\u0e15\u0e48\u0e2d\u0e42\u0e14\u0e22\u0e44\u0e21\u0e48\u0e21\u0e35\u0e27\u0e34\u0e14\u0e35\u0e42\u0e2d Tracker.Dialog.EngineProblems.Message1=\u0e27\u0e34\u0e14\u0e35\u0e42\u0e2d engines 1 \u0e15\u0e31\u0e27 \u0e2b\u0e23\u0e37\u0e2d\u0e21\u0e32\u0e01\u0e01\u0e27\u0e48\u0e32\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e15\u0e34\u0e14\u0e15\u0e31\u0e49\u0e07\u0e41\u0e15\u0e48\u0e44\u0e21\u0e48\u0e17\u0e33\u0e07\u0e32\u0e19 -Tracker.Dialog.EngineProblems.Message2=\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21\u0e14\u0e39\u0e43\u0e19 Help|\u0e08\u0e32\u0e01\u0e01\u0e32\u0e23\u0e27\u0e34\u0e19\u0e34\u0e08\u0e09\u0e31\u0e22|\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a Xuggle \u0e2b\u0e23\u0e37\u0e2d QuickTime -Tracker.Dialog.ReplaceXuggle.Message1=\u0e40\u0e23\u0e32\u0e41\u0e19\u0e30\u0e19\u0e33\u0e43\u0e2b\u0e49\u0e04\u0e38\u0e13\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19 Xuggle video engine \u0e1b\u0e31\u0e08\u0e08\u0e38\u0e1a\u0e31\u0e19\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 -Tracker.Dialog.ReplaceXuggle.Message2=\u0e14\u0e49\u0e27\u0e22 Xuggle \u0e40\u0e27\u0e2d\u0e23\u0e4c\u0e0a\u0e31\u0e19 3.4 \u0e14\u0e49\u0e27\u0e22\u0e01\u0e32\u0e23\u0e15\u0e34\u0e14\u0e15\u0e31\u0e49\u0e07Tracker (version 4.75 \u0e43\u0e2b\u0e21\u0e48 -Tracker.Dialog.ReplaceXuggle.Message3=\u0e2b\u0e23\u0e37\u0e2d\u0e43\u0e2b\u0e21\u0e48\u0e01\u0e27\u0e48\u0e32) \u0e41\u0e25\u0e30\u0e17\u0e33\u0e01\u0e32\u0e23\u0e40\u0e25\u0e37\u0e2d\u0e01 Xuggle \u0e43\u0e19\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e01\u0e32\u0e23\u0e15\u0e34\u0e14\u0e15\u0e31\u0e49\u0e07 +Tracker.Dialog.EngineProblems.Message2=\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21\u0e14\u0e39\u0e43\u0e19 Help|\u0e08\u0e32\u0e01\u0e01\u0e32\u0e23\u0e27\u0e34\u0e19\u0e34\u0e08\u0e09\u0e31\u0e22|\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a FFMPeg \u0e2b\u0e23\u0e37\u0e2d QuickTime +Tracker.Dialog.ReplaceFFMPeg.Message1=\u0e40\u0e23\u0e32\u0e41\u0e19\u0e30\u0e19\u0e33\u0e43\u0e2b\u0e49\u0e04\u0e38\u0e13\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19 FFMPeg video engine \u0e1b\u0e31\u0e08\u0e08\u0e38\u0e1a\u0e31\u0e19\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 +Tracker.Dialog.ReplaceFFMPeg.Message2=\u0e14\u0e49\u0e27\u0e22 FFMPeg \u0e40\u0e27\u0e2d\u0e23\u0e4c\u0e0a\u0e31\u0e19 3.4 \u0e14\u0e49\u0e27\u0e22\u0e01\u0e32\u0e23\u0e15\u0e34\u0e14\u0e15\u0e31\u0e49\u0e07Tracker (version 4.75 \u0e43\u0e2b\u0e21\u0e48 +Tracker.Dialog.ReplaceFFMPeg.Message3=\u0e2b\u0e23\u0e37\u0e2d\u0e43\u0e2b\u0e21\u0e48\u0e01\u0e27\u0e48\u0e32) \u0e41\u0e25\u0e30\u0e17\u0e33\u0e01\u0e32\u0e23\u0e40\u0e25\u0e37\u0e2d\u0e01 FFMPeg \u0e43\u0e19\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e01\u0e32\u0e23\u0e15\u0e34\u0e14\u0e15\u0e31\u0e49\u0e07 TrackerIO.Dialog.DurationIsConstant.Message=\u0e0a\u0e48\u0e27\u0e07\u0e40\u0e27\u0e25\u0e32\u0e02\u0e2d\u0e07\u0e40\u0e1f\u0e23\u0e21\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14\u0e40\u0e17\u0e48\u0e32\u0e01\u0e31\u0e19 (\u0e21\u0e35\u0e04\u0e48\u0e32\u0e04\u0e07\u0e17\u0e35\u0e48 fps) TrackerIO.ZIPResourceFilter.Description= ZIP \u0e44\u0e1f\u0e25\u0e4c Tracker (.trz) TToolbar.Button.Desktop.Tooltip=\u0e41\u0e2a\u0e14\u0e07 HTML \u0e17\u0e35\u0e48\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e02\u0e49\u0e2d\u0e07\u0e41\u0e25\u0e30/\u0e2b\u0e23\u0e37\u0e2d \u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23\u0e43\u0e19\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a PDF @@ -1282,7 +1282,7 @@ TableTrackView.Dialog.NameColumn.Title=\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4 TToolBar.MenuItem.StretchOff=\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19\u0e43\u0e2b\u0e21\u0e48 # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=\u0e40\u0e27\u0e2d\u0e23\u0e4c\u0e0a\u0e31\u0e48\u0e19 Xuggle +PrefsDialog.Checkbox.WarnFFMPegVersion=\u0e40\u0e27\u0e2d\u0e23\u0e4c\u0e0a\u0e31\u0e48\u0e19 FFMPeg PrefsDialog.Checkbox.WarnCopyFailed=Video Engine File Copy Errors Tracker.Dialog.FailedToCopy.Title=\u0e40\u0e01\u0e34\u0e14\u0e04\u0e27\u0e32\u0e21\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14\u0e01\u0e32\u0e23\u0e04\u0e31\u0e14\u0e25\u0e2d\u0e01\u0e44\u0e1f\u0e25\u0e4c Velocity.Dialog.Color.Title=\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e2a\u0e35\u0e02\u0e2d\u0e07\u0e04\u0e27\u0e32\u0e21\u0e40\u0e23\u0e47\u0e27 diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_tr.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_tr.properties index 3b28b423..acff9f50 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_tr.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_tr.properties @@ -719,7 +719,7 @@ PrefsDialog.Checkbox.DefaultSize=Varsay\u0131lan\u0131 kullan PrefsDialog.Checkbox.HintsOn=Varsay\u0131lan olarak ipuçlar\u0131n\u0131 göster PrefsDialog.Tab.Video.Title=Video PrefsDialog.VideoPref.BorderTitle=Video Motoru -PrefsDialog.Button.Xuggle=Xuggle +PrefsDialog.Button.FFMPeg=FFMPeg PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=Web Ba\u015Flat kullan\u0131rken bellek yönetimi kullan\u0131lamaz. PrefsDialog.Dialog.WebStart.Title=Web Ba\u015Flat Modu @@ -734,9 +734,9 @@ PrefsDialog.Upgrades.Weekly=Haftal\u0131k PrefsDialog.Upgrades.Monthly=Ayl\u0131k PrefsDialog.Upgrades.Never=Asla PrefsDialog.Button.CheckForUpgrade=\u015Eimdi Kontrol Et -PrefsDialog.Xuggle.Speed.BorderTitle=Xuggle Video Oynatma -PrefsDialog.Xuggle.Slow=Pürüzsüz (yava\u015F olabilir) -PrefsDialog.Xuggle.Fast=H\u0131zl\u0131 (sars\u0131nt\u0131l\u0131 olabilir) +PrefsDialog.FFMPeg.Speed.BorderTitle=FFMPeg Video Oynatma +PrefsDialog.FFMPeg.Slow=Pürüzsüz (yava\u015F olabilir) +PrefsDialog.FFMPeg.Fast=H\u0131zl\u0131 (sars\u0131nt\u0131l\u0131 olabilir) PrefsDialog.CalibrationTool.BorderTitle=Varsay\u0131lan Ayarlama Arac\u0131 Protractor.Name=Aç\u0131 Ölçer Protractor.New.Name=aç\u0131 ölçer @@ -816,23 +816,23 @@ TMenuBar.Menu.MeasuringTools= TMenuBar.Menu.AngleUnits=Aç\u0131 Birimleri TMenuBar.MenuItem.Degrees=Derece TMenuBar.MenuItem.Radians=Radyan -Tracker.Dialog.NoXuggle.Title=Xuggle bulunamad\u0131 -Tracker.Dialog.NoXuggle.Message1=Xuggle (çapraz-platform video motoru) yüklü de\u011Fil. -Tracker.Dialog.NoXuggle.Message2=Xuggle'\u0131 http://www.xuggle.com/xuggler/downloads/ adresinden indir. -Tracker.Action.AboutXuggle=Xuggle hakk\u0131nda... -Tracker.Dialog.AboutXuggle.Title=Xuggle hakk\u0131nda -Tracker.Dialog.AboutXuggle.Message.Version=Xuggle sürümü -Tracker.Dialog.AboutXuggle.Message.Home=Xuggle ana sayfa: -Tracker.Dialog.AboutXuggle.Message.Path=Xuggle jar yolu: +Tracker.Dialog.NoFFMPeg.Title=FFMPeg bulunamad\u0131 +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (çapraz-platform video motoru) yüklü de\u011Fil. +Tracker.Dialog.NoFFMPeg.Message2=FFMPeg'\u0131 http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=FFMPeg hakk\u0131nda... +Tracker.Dialog.AboutFFMPeg.Title=FFMPeg hakk\u0131nda +Tracker.Dialog.AboutFFMPeg.Message.Version=FFMPeg sürümü +Tracker.Dialog.AboutFFMPeg.Message.Home=FFMPeg ana sayfa: +Tracker.Dialog.AboutFFMPeg.Message.Path=FFMPeg jar yolu: Tracker.Dialog.NoVideoEngine.Message1=Hiçbir video motoru yüklü de\u011Fil. Bunlar olmadan, Tracker.Dialog.NoVideoEngine.Message2=(JPEG, PNG) görüntülerini açabilir ve GIF'leri canland\u0131rabilirsiniz. -Tracker.Dialog.NoVideoEngine.Message3=Tavsiye edilen: Takipçiyi Xuggle video motoru ile yeniden yükle. +Tracker.Dialog.NoVideoEngine.Message3=Tavsiye edilen: Takipçiyi FFMPeg video motoru ile yeniden yükle. Tracker.Dialog.NoVideoEngine.Title=Video Motoru Yok -Tracker.Dialog.NoXuggle.Message1=Xuggle düzgün çal\u0131\u015Fm\u0131yor. Gerekli xuggle jar dosyalar\u0131n\u0131n -Tracker.Dialog.NoXuggle.Message2=Takipçi ana dizininde oldu\u011Fundan emin olun. Ayr\u0131t\u0131lar için, -Tracker.Dialog.NoXuggle.Message3=Takipçi ana dizinindeki Tracker_README.txt dosyas\u0131na bak\u0131n. -Tracker.Dialog.NoXuggle.Message4=Xuggle'\u0131 yüklemek için, en son Takipçi yükleyici program\u0131n\u0131 \u015Fu adresten indirin: -Tracker.Dialog.NoXuggle.Title=Xuggle Kullan\u0131lam\u0131yor +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg düzgün çal\u0131\u015Fm\u0131yor. Gerekli ffmpeg jar dosyalar\u0131n\u0131n +Tracker.Dialog.NoFFMPeg.Message2=Takipçi ana dizininde oldu\u011Fundan emin olun. Ayr\u0131t\u0131lar için, +Tracker.Dialog.NoFFMPeg.Message3=Takipçi ana dizinindeki Tracker_README.txt dosyas\u0131na bak\u0131n. +Tracker.Dialog.NoFFMPeg.Message4=FFMPeg'\u0131 yüklemek için, en son Takipçi yükleyici program\u0131n\u0131 \u015Fu adresten indirin: +Tracker.Dialog.NoFFMPeg.Title=FFMPeg Kullan\u0131lam\u0131yor Tracker.About.DefaultLocale=Varsay\u0131lan Yerel Ayar Tracker.About.CurrentLanguage=Dil Tracker.Dialog.InsufficientMemory.Title=Yetersiz Bellek @@ -878,7 +878,7 @@ TTrackBar.Memory.Menu.SetSize=Bellek boyutunu ayarla... TTrackBar.Button.Version=\u015Eu an kullan\u0131lan: sürüm TTrackBar.Popup.MenuItem.Upgrade=\u015Eimdi Yükselt... TTrackBar.Popup.MenuItem.Ignore=Dikkate alma -XuggleVideo.MenuItem.SmoothPlay=Pürüzsüz Çal (yava\u015F olabilir) +FFMPegVideo.MenuItem.SmoothPlay=Pürüzsüz Çal (yava\u015F olabilir) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=Ayar \u015Eeridi @@ -907,13 +907,13 @@ WorldTView.Button.World=Yerel # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=Uyar\u0131lar PrefsDialog.Checkbox.WarnIfNoEngine=Video motoru bulunamad\u0131 -PrefsDialog.Checkbox.WarnIfXuggleError=Zararl\u0131 olmayan Xuggle hatalar\u0131 +PrefsDialog.Checkbox.WarnIfFFMPegError=Zararl\u0131 olmayan FFMPeg hatalar\u0131 PropertiesDialog.Title=Özellikler PropertiesDialog.Label.Author=Yazarlar PropertiesDialog.Label.Contact=Temas TActions.Action.Properties=Özellikler... TActions.Action.OpenBrowser=Kütüphane Taray\u0131c\u0131s\u0131n\u0131 Aç... -TFrame.Progress.Xuggle=Xuggle yükleme çerçevesi +TFrame.Progress.FFMPeg=FFMPeg yükleme çerçevesi TFrame.Progress.ClickToCancel=(iptal etmek için t\u0131klay\u0131n) TFrame.Dialog.StalledVideo.Title=Video Yükleme Hatas\u0131 TFrame.Dialog.StalledVideo.Message0=Video yüklenirken durdu. Bu durum geçici olabilir. @@ -926,12 +926,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=Dur TFrame.Dialog.StalledVideo.Button.Wait=Bekle Tracker.Dialog.NoVideoEngine.Checkbox=Bunu bir daha gösterme TrackerIO.ZipFileFilter.Description=ZIP dosyas\u0131 (.zip) -TrackerIO.Dialog.ErrorFFMPEG.Message1=Xuggle bu videoyu açarken a\u015Fa\u011F\u0131daki hatayla kar\u015F\u0131la\u015Ft\u0131: +TrackerIO.Dialog.ErrorFFMPEG.Message1=FFMPeg bu videoyu açarken a\u015Fa\u011F\u0131daki hatayla kar\u015F\u0131la\u015Ft\u0131: TrackerIO.Dialog.ErrorFFMPEG.Message2=Hatalar\u0131n hepsi de zararl\u0131 de\u011Fildir. Tam hata mesajlar\u0131 için, Yard\u0131m|Mesaj Giri\u015Fi seç. -TrackerIO.Dialog.ErrorFFMPEG.Message3=\u015Eayet Xuggle ba\u015Far\u0131s\u0131z olursa, QuickTime ile videoyu açman\u0131z mümkün olabilir. +TrackerIO.Dialog.ErrorFFMPEG.Message3=\u015Eayet FFMPeg ba\u015Far\u0131s\u0131z olursa, QuickTime ile videoyu açman\u0131z mümkün olabilir. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Not: Bu Mac OSX'te 32-bit Java VM de çal\u0131\u015Fan Takipçi gerektirir. -TrackerIO.Dialog.ErrorFFMPEG.Title=Xuggle Hatas\u0131 -TrackerIO.ErrorFFMPEG.LogMessage=Daha fazla bilgi için, tercihler ileti\u015Fimindeki Xuggle uyar\u0131lar\u0131n\u0131 aç\u0131n (Düzenle|Tercihler). +TrackerIO.Dialog.ErrorFFMPEG.Title=FFMPeg Hatas\u0131 +TrackerIO.ErrorFFMPEG.LogMessage=Daha fazla bilgi için, tercihler ileti\u015Fimindeki FFMPeg uyar\u0131lar\u0131n\u0131 aç\u0131n (Düzenle|Tercihler). TToolBar.Button.OpenBrowser.Tooltip=OSP Dijital Kütüphane Taray\u0131c\u0131s\u0131n\u0131 Aç # Additions by Doug Brown 2011-07-20 @@ -1187,17 +1187,17 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=De\u011Fi\u015Fken çerçeve süreleri PrefsDialog.Button.NoEngine=Hiçbiri PrefsDialog.Dialog.SwitchToQT.Message=QuickTime'a geçi\u015F yapmak ayn\u0131 zamanda Java VM'yi 32-bit'e dönü\u015Ftürür. -PrefsDialog.Dialog.SwitchToXuggle32.Message=Xuggle'a geçi\u015F yapmak ayn\u0131 zamanda Java VM'yi 32-bit'e dönü\u015Ftürür. -PrefsDialog.Dialog.SwitchToXuggle64.Message=Xuggle'a geçi\u015F yapmak ayn\u0131 zamanda Java VM'yi 64-bit'e dönü\u015Ftürür. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=FFMPeg'a geçi\u015F yapmak ayn\u0131 zamanda Java VM'yi 32-bit'e dönü\u015Ftürür. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=FFMPeg'a geçi\u015F yapmak ayn\u0131 zamanda Java VM'yi 64-bit'e dönü\u015Ftürür. PrefsDialog.Dialog.SwitchVM.Title=Java VM De\u011Fi\u015Ftirildi PrefsDialog.Dialog.SwitchTo32.Message=32-bit Java VM'ye geçi\u015F yapmak ayn\u0131 zamanda video motorunu QuickTime'a dönü\u015Ftürür. -PrefsDialog.Dialog.SwitchTo64.Message=64-bit Java VM'ye geçi\u015F yapmak ayn\u0131 zamanda video motorunu Xuggle'a dönü\u015Ftürür. +PrefsDialog.Dialog.SwitchTo64.Message=64-bit Java VM'ye geçi\u015F yapmak ayn\u0131 zamanda video motorunu FFMPeg'a dönü\u015Ftürür. PrefsDialog.Dialog.SwitchEngine.Title=Video Motoru De\u011Fi\u015Ftirildi PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=Hiçbir video motoru 64-bit Java VM için kullan\u0131labilir de\u011Fil. PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=Siz hala görüntüleri (JPEG, PNG) ve canland\u0131r\u0131lm\u0131\u015F GIF'leri açabilirsiniz. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=64-bit VM'ye geçi\u015F yapmay\u0131 istedi\u011Finize eminmisiniz? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=64-bit Video Motoru Yok -PrefsDialog.Dialog.No32bitVMXuggle.Message=Xuggle kullan\u0131lmadan önce 32-bit Java VM yüklenmek zorunda. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=FFMPeg kullan\u0131lmadan önce 32-bit Java VM yüklenmek zorunda. PrefsDialog.Dialog.No32bitVMQT.Message=QuickTime kullan\u0131lmadan önce 32-bit Java VM yüklenmek zorunda. PrefsDialog.Dialog.No32bitVM.Message=Daha fazla bilgi için, Takipçi Yard\u0131m'a Bak: Kurulum. PrefsDialog.Dialog.No32bitVM.Title=32-bit VM Zorunludur @@ -1213,10 +1213,10 @@ Tracker.Dialog.Button.RelaunchNow=Evet, \u015Fimdi yeniden ba\u015Flat Tracker.Dialog.Button.ShowPrefs=Hay\u0131r fakat tercihleri göster Tracker.Dialog.Button.ContinueWithoutEngine=Hay\u0131r, videosuz devam et Tracker.Dialog.EngineProblems.Message1=Bir veya daha fazla video motoru yüklü fakat çal\u0131\u015Fm\u0131yor. -Tracker.Dialog.EngineProblems.Message2=Daha fazla bilgi için Yard\u0131m|Te\u015Fhis|Xuggle veya QuickTime Hakk\u0131nda'ki bölüme bak\u0131n. -Tracker.Dialog.ReplaceXuggle.Message1=Biz \u015Fu anki Xuggle video motorunuz olan 3.4 versiyonunu ile, -Tracker.Dialog.ReplaceXuggle.Message2=yeniden Takipçi (version 4.75 veya üstü) program\u0131n\u0131 kurarak ve -Tracker.Dialog.ReplaceXuggle.Message3=kurulum seçeneklerinde Xuggle'\u0131 seçerek, de\u011Fi\u015Ftirmenizi tavsiye ederiz. +Tracker.Dialog.EngineProblems.Message2=Daha fazla bilgi için Yard\u0131m|Te\u015Fhis|FFMPeg veya QuickTime Hakk\u0131nda'ki bölüme bak\u0131n. +Tracker.Dialog.ReplaceFFMPeg.Message1=Biz \u015Fu anki FFMPeg video motorunuz olan 3.4 versiyonunu ile, +Tracker.Dialog.ReplaceFFMPeg.Message2=yeniden Takipçi (version 4.75 veya üstü) program\u0131n\u0131 kurarak ve +Tracker.Dialog.ReplaceFFMPeg.Message3=kurulum seçeneklerinde FFMPeg'\u0131 seçerek, de\u011Fi\u015Ftirmenizi tavsiye ederiz. TrackerIO.Dialog.DurationIsConstant.Message=Tüm çerçeve süreleri e\u015Fittir (sabit sçs). TrackerIO.ZIPResourceFilter.Description=Takipçi ZIP Dosyas\u0131 (.trz) TToolbar.Button.Desktop.Tooltip=HTML ve/veya PDF ile ili\u015Fkili belgeleri görüntüle @@ -1282,7 +1282,7 @@ TableTrackView.Dialog.NameColumn.Title=Metin S TToolBar.MenuItem.StretchOff=\u0130lk Durumuna Getir # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Xuggle Sürümü +PrefsDialog.Checkbox.WarnFFMPegVersion=FFMPeg Sürümü PrefsDialog.Checkbox.WarnCopyFailed=Video Motoru Dosya Kopyalama Hatalar\u0131 Tracker.Dialog.FailedToCopy.Title=Dosya Kopyalama Hatas\u0131 Velocity.Dialog.Color.Title=H\u0131z Rengini Seç diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_uk.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_uk.properties index 805963f0..d4aed467 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_uk.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_uk.properties @@ -718,7 +718,7 @@ PrefsDialog.Checkbox.DefaultSize=Use default PrefsDialog.Checkbox.HintsOn=Show hints by default PrefsDialog.Tab.Video.Title=Video PrefsDialog.VideoPref.BorderTitle=Video Engine -PrefsDialog.Button.Xuggle=Xuggle +PrefsDialog.Button.FFMPeg=FFMPeg PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=Memory management is unavailable when using Web Start. PrefsDialog.Dialog.WebStart.Title=Web Start Mode @@ -733,9 +733,9 @@ PrefsDialog.Upgrades.Weekly=Weekly PrefsDialog.Upgrades.Monthly=Monthly PrefsDialog.Upgrades.Never=Never PrefsDialog.Button.CheckForUpgrade=Check Now -PrefsDialog.Xuggle.Speed.BorderTitle=Xuggle Video Playback -PrefsDialog.Xuggle.Slow=Smooth (may be slow) -PrefsDialog.Xuggle.Fast=Fast (may be jerky) +PrefsDialog.FFMPeg.Speed.BorderTitle=FFMPeg Video Playback +PrefsDialog.FFMPeg.Slow=Smooth (may be slow) +PrefsDialog.FFMPeg.Fast=Fast (may be jerky) PrefsDialog.CalibrationTool.BorderTitle=Default Calibration Tool Protractor.Name=Protractor Protractor.New.Name=protractor @@ -815,23 +815,23 @@ TMenuBar.Menu.MeasuringTools=Measuring Tools TMenuBar.Menu.AngleUnits=Angle Units TMenuBar.MenuItem.Degrees=Degrees TMenuBar.MenuItem.Radians=Radians -Tracker.Dialog.NoXuggle.Title=Xuggle not found -Tracker.Dialog.NoXuggle.Message1=Xuggle (cross-platform video engine) is not installed. -Tracker.Dialog.NoXuggle.Message2=Download Xuggle from http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=About Xuggle... -Tracker.Dialog.AboutXuggle.Title=About Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=Xuggle version -Tracker.Dialog.AboutXuggle.Message.Home=Xuggle home: -Tracker.Dialog.AboutXuggle.Message.Path=Xuggle jar path: +Tracker.Dialog.NoFFMPeg.Title=FFMPeg not found +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (cross-platform video engine) is not installed. +Tracker.Dialog.NoFFMPeg.Message2=Download FFMPeg from http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=About FFMPeg... +Tracker.Dialog.AboutFFMPeg.Title=About FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=FFMPeg version +Tracker.Dialog.AboutFFMPeg.Message.Home=FFMPeg home: +Tracker.Dialog.AboutFFMPeg.Message.Path=FFMPeg jar path: Tracker.Dialog.NoVideoEngine.Message1=No video engine is installed. Without one, you Tracker.Dialog.NoVideoEngine.Message2=can only open images (JPEG, PNG) and animated GIFs. -Tracker.Dialog.NoVideoEngine.Message3=Recommended: reinstall Tracker with the Xuggle video engine. +Tracker.Dialog.NoVideoEngine.Message3=Recommended: reinstall Tracker with the FFMPeg video engine. Tracker.Dialog.NoVideoEngine.Title=No Video Engine -Tracker.Dialog.NoXuggle.Message1=Xuggle is not working correctly. Please be sure the required -Tracker.Dialog.NoXuggle.Message2=xuggle jar files are in the Tracker home directory. For details, -Tracker.Dialog.NoXuggle.Message3=see Tracker_README.txt in the Tracker home directory. -Tracker.Dialog.NoXuggle.Message4=To install Xuggle, download the latest Tracker installer from -Tracker.Dialog.NoXuggle.Title=Xuggle Unavailable +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg is not working correctly. Please be sure the required +Tracker.Dialog.NoFFMPeg.Message2=ffmpeg jar files are in the Tracker home directory. For details, +Tracker.Dialog.NoFFMPeg.Message3=see Tracker_README.txt in the Tracker home directory. +Tracker.Dialog.NoFFMPeg.Message4=To install FFMPeg, download the latest Tracker installer from +Tracker.Dialog.NoFFMPeg.Title=FFMPeg Unavailable Tracker.About.DefaultLocale=Default locale Tracker.About.CurrentLanguage=Language Tracker.Dialog.InsufficientMemory.Title=Insufficient Memory @@ -877,7 +877,7 @@ TTrackBar.Memory.Menu.SetSize=Set memory size... TTrackBar.Button.Version=Now available: version TTrackBar.Popup.MenuItem.Upgrade=Upgrade Now... TTrackBar.Popup.MenuItem.Ignore=Ignore -XuggleVideo.MenuItem.SmoothPlay=Smooth Play (may be slow) +FFMPegVideo.MenuItem.SmoothPlay=Smooth Play (may be slow) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=Calibration Tape @@ -906,13 +906,13 @@ WorldTView.Button.World=World # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=Warnings PrefsDialog.Checkbox.WarnIfNoEngine=No video engine -PrefsDialog.Checkbox.WarnIfXuggleError=Non-fatal Xuggle errors +PrefsDialog.Checkbox.WarnIfFFMPegError=Non-fatal FFMPeg errors PropertiesDialog.Title=Properties PropertiesDialog.Label.Author=Authors PropertiesDialog.Label.Contact=Contact TActions.Action.Properties=Properties... TActions.Action.OpenBrowser=Open Library Browser... -TFrame.Progress.Xuggle=Xuggle loading frame +TFrame.Progress.FFMPeg=FFMPeg loading frame TFrame.Progress.ClickToCancel=(click to cancel) TFrame.Dialog.StalledVideo.Title=Error Loading Video TFrame.Dialog.StalledVideo.Message0=The video has stalled while loading. This may be temporary. @@ -925,12 +925,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=Stop TFrame.Dialog.StalledVideo.Button.Wait=Wait Tracker.Dialog.NoVideoEngine.Checkbox=Don't show this again TrackerIO.ZipFileFilter.Description=ZIP file (.zip) -TrackerIO.Dialog.ErrorFFMPEG.Message1=Xuggle has encountered the following error while opening this video: +TrackerIO.Dialog.ErrorFFMPEG.Message1=FFMPeg has encountered the following error while opening this video: TrackerIO.Dialog.ErrorFFMPEG.Message2=Not all errors are fatal. For full error messages, choose Help|Message Log. -TrackerIO.Dialog.ErrorFFMPEG.Message3=If Xuggle fails, you may be able to open the video with QuickTime. +TrackerIO.Dialog.ErrorFFMPEG.Message3=If FFMPeg fails, you may be able to open the video with QuickTime. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Note: On Mac OSX this requires running Tracker in a 32-bit Java VM. -TrackerIO.Dialog.ErrorFFMPEG.Title=Xuggle Error -TrackerIO.ErrorFFMPEG.LogMessage=For more details, turn on Xuggle warnings in the preferences dialog (Edit|Preferences). +TrackerIO.Dialog.ErrorFFMPEG.Title=FFMPeg Error +TrackerIO.ErrorFFMPEG.LogMessage=For more details, turn on FFMPeg warnings in the preferences dialog (Edit|Preferences). TToolBar.Button.OpenBrowser.Tooltip=Open the OSP Digital Library Browser # Additions by Doug Brown 2011-07-20 @@ -1186,17 +1186,17 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=Variable frame durations PrefsDialog.Button.NoEngine=None PrefsDialog.Dialog.SwitchToQT.Message=Switching to QuickTime also changes the Java VM to 32-bit. -PrefsDialog.Dialog.SwitchToXuggle32.Message=Switching to Xuggle also changes the Java VM to 32-bit. -PrefsDialog.Dialog.SwitchToXuggle64.Message=Switching to Xuggle also changes the Java VM to 64-bit. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=Switching to FFMPeg also changes the Java VM to 32-bit. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=Switching to FFMPeg also changes the Java VM to 64-bit. PrefsDialog.Dialog.SwitchVM.Title=Java VM Changed PrefsDialog.Dialog.SwitchTo32.Message=Switching to a 32-bit Java VM also changes the video engine to QuickTime. -PrefsDialog.Dialog.SwitchTo64.Message=Switching to a 64-bit Java VM also changes the video engine to Xuggle. +PrefsDialog.Dialog.SwitchTo64.Message=Switching to a 64-bit Java VM also changes the video engine to FFMPeg. PrefsDialog.Dialog.SwitchEngine.Title=Video Engine Changed PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=No video engine is available for a 64-bit Java VM. You will PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=still be able to open images (JPEG, PNG) and animated GIFs. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=Are you sure you wish to switch to a 64-bit VM? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=No 64-bit Video Engine -PrefsDialog.Dialog.No32bitVMXuggle.Message=A 32-bit Java VM must be installed before Xuggle can be used. +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=A 32-bit Java VM must be installed before FFMPeg can be used. PrefsDialog.Dialog.No32bitVMQT.Message=A 32-bit Java VM must be installed before QuickTime can be used. PrefsDialog.Dialog.No32bitVM.Message=For more information, see Tracker Help: Installation. PrefsDialog.Dialog.No32bitVM.Title=32-bit VM Required @@ -1212,10 +1212,10 @@ Tracker.Dialog.Button.RelaunchNow=Yes, relaunch now Tracker.Dialog.Button.ShowPrefs=No, but show preferences Tracker.Dialog.Button.ContinueWithoutEngine=No, continue without video Tracker.Dialog.EngineProblems.Message1=One or more video engines are installed but not working. -Tracker.Dialog.EngineProblems.Message2=For more information see Help|Diagnostics|About Xuggle or QuickTime. -Tracker.Dialog.ReplaceXuggle.Message1=We recommend you replace your current Xuggle video engine -Tracker.Dialog.ReplaceXuggle.Message2=with Xuggle version 3.4 by reinstalling Tracker (version 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=or above) and selecting Xuggle in the installation options. +Tracker.Dialog.EngineProblems.Message2=For more information see Help|Diagnostics|About FFMPeg or QuickTime. +Tracker.Dialog.ReplaceFFMPeg.Message1=We recommend you replace your current FFMPeg video engine +Tracker.Dialog.ReplaceFFMPeg.Message2=with FFMPeg version 3.4 by reinstalling Tracker (version 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=or above) and selecting FFMPeg in the installation options. TrackerIO.Dialog.DurationIsConstant.Message=All frame durations are equal (constant fps). TrackerIO.ZIPResourceFilter.Description=Tracker ZIP File (.trz) TToolbar.Button.Desktop.Tooltip=Display associated HTML and/or PDF documents @@ -1281,7 +1281,7 @@ TableTrackView.Dialog.NameColumn.Title=Text Column TToolBar.MenuItem.StretchOff=Reset # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Xuggle Version +PrefsDialog.Checkbox.WarnFFMPegVersion=FFMPeg Version PrefsDialog.Checkbox.WarnCopyFailed=Video Engine File Copy Errors TrackerStarter.Warning.FailedToCopy1=Some video engine files could not be copied automatically. TrackerStarter.Warning.FailedToCopy2=The video engine may not work unless they are copied manually. diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_vi_VN.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_vi_VN.properties index fadc9225..1a392f76 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_vi_VN.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_vi_VN.properties @@ -719,7 +719,7 @@ PrefsDialog.Checkbox.DefaultSize=S\u1EED d\u1EE5ng m\u1EB7c \u0111\u1ECBnh PrefsDialog.Checkbox.HintsOn=Hi\u1EC7n g\u1EE3i \u00FD m\u1EB7c \u0111\u1ECBnh PrefsDialog.Tab.Video.Title=Video PrefsDialog.VideoPref.BorderTitle=c\u00F4ng c\u1EE5 video -PrefsDialog.Button.Xuggle=Xuggle +PrefsDialog.Button.FFMPeg=FFMPeg PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=Qu\u1EA3n l\u00ED b\u1ED9 nh\u1EDB kh\u00F4ng kh\u1EA3 d\u1EE5ng khi \u0111ang s\u1EED d\u1EE5ng Web Start PrefsDialog.Dialog.WebStart.Title=Ch\u1EBF \u0111\u1ED9 Web Start @@ -734,9 +734,9 @@ PrefsDialog.Upgrades.Weekly=H\u00E0ng tu\u1EA7n PrefsDialog.Upgrades.Monthly=H\u00E0ng th\u00E1ng PrefsDialog.Upgrades.Never=Kh\u00F4ng bao gi\u1EDD PrefsDialog.Button.CheckForUpgrade=Ki\u1EC3m tra ngay -PrefsDialog.Xuggle.Speed.BorderTitle=Xuggle Video playback -PrefsDialog.Xuggle.Slow=M\u01B0\u1EE3t (c\u00F3 th\u1EC3 ch\u1EADm) -PrefsDialog.Xuggle.Fast=Nhanh (c\u00F3 th\u1EC3 gi\u1EADt) +PrefsDialog.FFMPeg.Speed.BorderTitle=FFMPeg Video playback +PrefsDialog.FFMPeg.Slow=M\u01B0\u1EE3t (c\u00F3 th\u1EC3 ch\u1EADm) +PrefsDialog.FFMPeg.Fast=Nhanh (c\u00F3 th\u1EC3 gi\u1EADt) PrefsDialog.CalibrationTool.BorderTitle=c\u00F4ng c\u1EE5 t\u1ECDa \u0111\u1ED9 m\u1EB7c \u0111\u1ECBnh Protractor.Name=Th\u01B0\u1EDBc \u0111o g\u00F3c Protractor.New.Name=Th\u01B0\u1EDBc \u0111o g\u00F3c @@ -816,23 +816,23 @@ TMenuBar.Menu.MeasuringTools=c\u00F4ng c\u1EE5 \u0111o TMenuBar.Menu.AngleUnits=\u0110\u01A1n v\u1ECB \u0111o g\u00F3c TMenuBar.MenuItem.Degrees=\u0110\u1ED9 TMenuBar.MenuItem.Radians=Radian -Tracker.Dialog.NoXuggle.Title=Xugggle not found -Tracker.Dialog.NoXuggle.Message1=Xuggle (c\u00F4ng c\u1EE5 video n\u1EC1n t\u1EA3ng) kh\u00F4ng th\u1EC3 c\u00E0i \u0111\u1EB7t \u0111\u01B0\u1EE3c -Tracker.Dialog.NoXuggle.Message2=T\u1EA3i Xuggle t\u1EEB: http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=V\u1EC1 Xuggle\u2026 -Tracker.Dialog.AboutXuggle.Title=V\u1EC1 Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=Phi\u00EAn b\u1EA3n Xuggle -Tracker.Dialog.AboutXuggle.Message.Home=Trang ch\u1EE7 Xuggle: -Tracker.Dialog.AboutXuggle.Message.Path=\u0110\u01B0\u01A1\u0300ng d\u00E2\u0303n Xuggle jar: +Tracker.Dialog.NoFFMPeg.Title=Xugggle not found +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (c\u00F4ng c\u1EE5 video n\u1EC1n t\u1EA3ng) kh\u00F4ng th\u1EC3 c\u00E0i \u0111\u1EB7t \u0111\u01B0\u1EE3c +Tracker.Dialog.NoFFMPeg.Message2=T\u1EA3i FFMPeg t\u1EEB: http://www.xuggle.com/xuggler/downloads/. +Tracker.Action.AboutFFMPeg=V\u1EC1 FFMPeg\u2026 +Tracker.Dialog.AboutFFMPeg.Title=V\u1EC1 FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=Phi\u00EAn b\u1EA3n FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Home=Trang ch\u1EE7 FFMPeg: +Tracker.Dialog.AboutFFMPeg.Message.Path=\u0110\u01B0\u01A1\u0300ng d\u00E2\u0303n FFMPeg jar: Tracker.Dialog.NoVideoEngine.Message1=Kh\u00F4ng c\u00F3 c\u00F4ng c\u1EE5 video n\u00E0o \u0111\u01B0\u1EE3c c\u00E0i \u0111\u1EB7t. Kh\u00F4ng c\u00F3 n\u00F3, b\u1EA1n Tracker.Dialog.NoVideoEngine.Message2=Ch\u1EC9 c\u00F3 th\u1EC3 m\u1EDF \u1EA3nh (JPEG,PNG) v\u00E0 ho\u1EA1t h\u00ECnh GIFs. -Tracker.Dialog.NoVideoEngine.Message3=Khuy\u1EBFn c\u00E1o: c\u00E0i \u0111\u1EB7t l\u1EA1i Tracker b\u1EB1ng c\u00F4ng c\u1EE5 Xuggle video. +Tracker.Dialog.NoVideoEngine.Message3=Khuy\u1EBFn c\u00E1o: c\u00E0i \u0111\u1EB7t l\u1EA1i Tracker b\u1EB1ng c\u00F4ng c\u1EE5 FFMPeg video. Tracker.Dialog.NoVideoEngine.Title=Kh\u00F4ng c\u00F3 c\u00F4ng c\u1EE5 video -Tracker.Dialog.NoXuggle.Message1=Xuggle kh\u00F4ng ho\u1EA1t \u0111\u1ED9ng ch\u00EDnh x\u00E1c. H\u00E3y ch\u1EAFc ch\u1EAFn v\u1EC1 y\u00EAu c\u1EA7u -Tracker.Dialog.NoXuggle.Message2=c\u00E1c t\u1EC7p tin xuggle jar n\u1EB1m trong th\u01B0 m\u1EE5c ch\u00EDnh c\u1EE7a Tracker. \u0110\u1EC3 bi\u1EBFt chi ti\u1EBFt, -Tracker.Dialog.NoXuggle.Message3=xem Tracker_README.txt trong th\u01B0 m\u1EE5c ch\u00EDnh c\u1EE7a Tracker -Tracker.Dialog.NoXuggle.Message4=\u0110\u1EC3 c\u00E0i \u0111\u1EB7t Xuggle, h\u00E3y t\u1EA3i b\u1EA3n c\u00E0i \u0111\u0103t m\u1EDBi nh\u1EA5t t\u1EEB -Tracker.Dialog.NoXuggle.Title=Xuggle kh\u00F4ng c\u00F3 s\u1EB5n +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg kh\u00F4ng ho\u1EA1t \u0111\u1ED9ng ch\u00EDnh x\u00E1c. H\u00E3y ch\u1EAFc ch\u1EAFn v\u1EC1 y\u00EAu c\u1EA7u +Tracker.Dialog.NoFFMPeg.Message2=c\u00E1c t\u1EC7p tin xuggle jar n\u1EB1m trong th\u01B0 m\u1EE5c ch\u00EDnh c\u1EE7a Tracker. \u0110\u1EC3 bi\u1EBFt chi ti\u1EBFt, +Tracker.Dialog.NoFFMPeg.Message3=xem Tracker_README.txt trong th\u01B0 m\u1EE5c ch\u00EDnh c\u1EE7a Tracker +Tracker.Dialog.NoFFMPeg.Message4=\u0110\u1EC3 c\u00E0i \u0111\u1EB7t FFMPeg, h\u00E3y t\u1EA3i b\u1EA3n c\u00E0i \u0111\u0103t m\u1EDBi nh\u1EA5t t\u1EEB +Tracker.Dialog.NoFFMPeg.Title=FFMPeg kh\u00F4ng c\u00F3 s\u1EB5n Tracker.About.DefaultLocale=Ng\u00F4n ng\u1EEF m\u1EB7c \u0111\u1ECBnh Tracker.About.CurrentLanguage=Ng\u00F4n ng\u1EEF Tracker.Dialog.InsufficientMemory.Title=kh\u00F4ng \u0111\u1EE7 b\u1ED9 nh\u1EDB @@ -878,7 +878,7 @@ TTrackBar.Memory.Menu.SetSize=c\u00E0i \u0111\u1EB7t k\u00EDch th\u01B0\u1EDBc b TTrackBar.Button.Version=hi\u1EC7n c\u00F3 b\u00E2y gi\u1EDD: phi\u00EAn b\u1EA3n TTrackBar.Popup.MenuItem.Upgrade=n\u00E2ng c\u1EA5p ngay TTrackBar.Popup.MenuItem.Ignore=b\u1ECF qua -XuggleVideo.MenuItem.SmoothPlay=Ch\u1EA1y m\u01B0\u1EE3t (c\u00F3 th\u1EC3 ch\u1EADm) +FFMPegVideo.MenuItem.SmoothPlay=Ch\u1EA1y m\u01B0\u1EE3t (c\u00F3 th\u1EC3 ch\u1EADm) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=b\u0103ng c\u00E2n @@ -907,13 +907,13 @@ WorldTView.Button.World=Kh\u00F4ng gian # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=C\u1EA3nh b\u00E1o PrefsDialog.Checkbox.WarnIfNoEngine=Kh\u00F4ng c\u00F3 c\u00F4ng c\u1EE5 video -PrefsDialog.Checkbox.WarnIfXuggleError=Xuggle l\u1ED7i (kh\u00F4ng tr\u00E2\u0300m tro\u0323ng) +PrefsDialog.Checkbox.WarnIfFFMPegError=FFMPeg l\u1ED7i (kh\u00F4ng tr\u00E2\u0300m tro\u0323ng) PropertiesDialog.Title=Thu\u00F4\u0323c ti\u0301nh PropertiesDialog.Label.Author=T\u00E1c gi\u1EA3 PropertiesDialog.Label.Contact=Li\u00EAn h\u1EC7 TActions.Action.Properties=Thu\u00F4\u0323c ti\u0301nh... TActions.Action.OpenBrowser=M\u1EDF tr\u00ECnh duy\u1EC7t th\u01B0 vi\u1EC7n -TFrame.Progress.Xuggle=Xuggle t\u1EA3i khung +TFrame.Progress.FFMPeg=FFMPeg t\u1EA3i khung TFrame.Progress.ClickToCancel=(Nh\u1EA5p \u0111\u1EC3 h\u1EE7y) TFrame.Dialog.StalledVideo.Title=L\u1ED7i t\u1EA3i video TFrame.Dialog.StalledVideo.Message0=Video \u0111\u00E3 b\u1ECB tr\u1EC5 trong khi t\u1EA3i. \u0110\u00E2y c\u00F3 th\u1EC3 l\u00E0 t\u1EA1m th\u1EDDi @@ -926,12 +926,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=D\u1EEBng TFrame.Dialog.StalledVideo.Button.Wait=\u0110\u1EE3i Tracker.Dialog.NoVideoEngine.Checkbox=Kh\u00F4ng hi\u1EC3n th\u1ECB \u0111i\u1EC1u n\u00E0y n\u1EEFa TrackerIO.ZipFileFilter.Description=ZIP file (.zip) -TrackerIO.Dialog.ErrorFFMPEG.Message1=Xuggle \u0111\u00E3 g\u1EB7p ph\u1EA3i l\u1ED7i sau trong khi m\u1EDF video +TrackerIO.Dialog.ErrorFFMPEG.Message1=FFMPeg \u0111\u00E3 g\u1EB7p ph\u1EA3i l\u1ED7i sau trong khi m\u1EDF video TrackerIO.Dialog.ErrorFFMPEG.Message2=Kh\u00F4ng ph\u1EA3i t\u1EA5t c\u1EA3 c\u00E1c l\u1ED7i \u0111\u1EC1u kh\u00F4ng th\u1EC3 kh\u1EAFc ph\u1EE5c. \u0110\u1EC3 c\u00F3 c\u00E1c th\u00F4ng b\u00E1o l\u1ED7i \u0111\u1EA7y \u0111\u1EE7, ch\u1ECDn Help | Message Log. -TrackerIO.Dialog.ErrorFFMPEG.Message3=N\u1EBFu Xuggle th\u1EA5t b\u1EA1i, b\u1EA1n c\u00F3 th\u1EC3 m\u1EDF video v\u1EDBi QuickTime +TrackerIO.Dialog.ErrorFFMPEG.Message3=N\u1EBFu FFMPeg th\u1EA5t b\u1EA1i, b\u1EA1n c\u00F3 th\u1EC3 m\u1EDF video v\u1EDBi QuickTime TrackerIO.Dialog.ErrorFFMPEG.MessageMac=Ghi ch\u00FA: Trong Mac OSX y\u00EAu c\u1EA7u ch\u1EA1y Tracker trong b\u1EA3n java 32bit VM -TrackerIO.Dialog.ErrorFFMPEG.Title=L\u1ED7i Xuggle -TrackerIO.ErrorFFMPEG.LogMessage=\u0110\u1EC3 th\u00EAm chi ti\u1EBFt, b\u1EADt c\u1EA3nh b\u00E1o Xuggle trong h\u1ED9p tho\u1EA1i t\u00F9y ch\u1ECDn (Ch\u1EC9nh s\u1EEDa|T\u00F9y ch\u1ECDn) +TrackerIO.Dialog.ErrorFFMPEG.Title=L\u1ED7i FFMPeg +TrackerIO.ErrorFFMPEG.LogMessage=\u0110\u1EC3 th\u00EAm chi ti\u1EBFt, b\u1EADt c\u1EA3nh b\u00E1o FFMPeg trong h\u1ED9p tho\u1EA1i t\u00F9y ch\u1ECDn (Ch\u1EC9nh s\u1EEDa|T\u00F9y ch\u1ECDn) TToolBar.Button.OpenBrowser.Tooltip=M\u1EDF tr\u00ECnh duy\u1EC7t Th\u01B0 vi\u1EC7n s\u1ED1 OSP # Additions by Doug Brown 2011-07-20 @@ -1188,17 +1188,17 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=th\u1EDDi l\u01B0\u1EE3ng khung thay \u0111\u1ED5i PrefsDialog.Button.NoEngine=kh\u00F4ng c\u00F3 PrefsDialog.Dialog.SwitchToQT.Message=Chuy\u1EC3n sang QuickTime c\u0169ng thay \u0111\u1ED5i m\u00E1y \u1EA3o Java th\u00E0nh 32-bit. -PrefsDialog.Dialog.SwitchToXuggle32.Message=Chuy\u1EC3n sang Xuggle c\u0169ng thay \u0111\u1ED5i m\u00E1y \u1EA3o Java th\u00E0nh 32-bit -PrefsDialog.Dialog.SwitchToXuggle64.Message=chuy\u1EC3n sang xuggle c\u0169ng thay \u0111\u1ED5i m\u00E1y \u1EA3o java th\u00E0nh 64-bit +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=Chuy\u1EC3n sang FFMPeg c\u0169ng thay \u0111\u1ED5i m\u00E1y \u1EA3o Java th\u00E0nh 32-bit +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=chuy\u1EC3n sang xuggle c\u0169ng thay \u0111\u1ED5i m\u00E1y \u1EA3o java th\u00E0nh 64-bit PrefsDialog.Dialog.SwitchVM.Title=M\u00E1y \u1EA3o Java \u0111\u00E3 \u0111\u1ED5i PrefsDialog.Dialog.SwitchTo32.Message=Chuy\u1EC3n sang m\u1ED9t m\u00E1y \u1EA3o Java 32-bit c\u0169ng thay \u0111\u1ED5i c\u00F4ng c\u1EE5 video th\u00E0nh QuickTime. -PrefsDialog.Dialog.SwitchTo64.Message=Chuy\u1EC3n sang m\u1ED9t m\u00E1y \u1EA3o Java 64-bit c\u0169ng thay \u0111\u1ED5i c\u00F4ng c\u1EE5 video th\u00E0nh Xuggle +PrefsDialog.Dialog.SwitchTo64.Message=Chuy\u1EC3n sang m\u1ED9t m\u00E1y \u1EA3o Java 64-bit c\u0169ng thay \u0111\u1ED5i c\u00F4ng c\u1EE5 video th\u00E0nh FFMPeg PrefsDialog.Dialog.SwitchEngine.Title=C\u00F4ng c\u1EE5 video \u0111\u00E3 \u0111\u1ED5i PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=kh\u00F4ng c\u00F3 c\u00F4ng c\u1EE5 video ph\u00F9 h\u1EE3p cho m\u00E1y \u1EA3o Java 64-bit. B\u1EA1n s\u1EBD PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=v\u1EABn c\u00F3 th\u1EC3 m\u1EDF h\u00ECnh \u1EA3nh (JPEG, PNG) v\u00E0 GIF \u0111\u1ED9ng. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=B\u1EA1n c\u00F3 ch\u1EAFc mu\u1ED1n \u0111\u1ED5i sang m\u00E1y \u1EA3o 64-bit PrefsDialog.Dialog.NoEngineIn64bitVM.Title=Kh\u00F4ng c\u00F3 c\u00F4ng c\u1EE5 video 64-bit -PrefsDialog.Dialog.No32bitVMXuggle.Message=M\u1ED9t m\u00E1y \u1EA3o Java 32-bit ph\u1EA3i \u0111\u01B0\u1EE3c c\u00E0i \u0111\u1EB7t tr\u01B0\u1EDBc khi Xuggle c\u00F3 th\u1EC3 s\u1EED d\u1EE5ng +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=M\u1ED9t m\u00E1y \u1EA3o Java 32-bit ph\u1EA3i \u0111\u01B0\u1EE3c c\u00E0i \u0111\u1EB7t tr\u01B0\u1EDBc khi FFMPeg c\u00F3 th\u1EC3 s\u1EED d\u1EE5ng PrefsDialog.Dialog.No32bitVMQT.Message=M\u1ED9t m\u00E1y \u1EA3o Java 32-bit ph\u1EA3i \u0111\u01B0\u1EE3c c\u00E0i \u0111\u1EB7t tr\u01B0\u1EDBc khi QuickTime c\u00F3 th\u1EC3 s\u1EED d\u1EE5ng PrefsDialog.Dialog.No32bitVM.Message=\u0110\u1EC3 c\u00F3 th\u00EAm nhi\u1EC1u th\u00F4ng tin, xem \u1EDF Tracker Gi\u00FAp \u0111\u1EE1: C\u00E0i \u0111\u1EB7t PrefsDialog.Dialog.No32bitVM.Title=Y\u00EAu c\u1EA7u M\u00E1y \u1EA3o 32-bit @@ -1214,10 +1214,10 @@ Tracker.Dialog.Button.RelaunchNow=C\u00F3, b\u1EAFt \u0111\u1EA7u l\u1EA1i ngay Tracker.Dialog.Button.ShowPrefs=Kh\u00F4ng, nh\u01B0ng h\u00E3y hi\u1EC3n th\u1ECB h\u1EEFu \u00EDch Tracker.Dialog.Button.ContinueWithoutEngine=Kh\u00F4ng, ti\u1EBFp t\u1EE5c kh\u00F4ng c\u1EA7n video Tracker.Dialog.EngineProblems.Message1=M\u1ED9t ho\u1EB7c nhi\u1EC1u h\u01A1n c\u00F4ng c\u1EE5 video \u0111\u00E3 \u0111\u01B0\u1EE3c c\u00E0i \u0111\u1EB7t nh\u01B0ng kh\u00F4ng ho\u1EA1t \u0111\u1ED9ng -Tracker.Dialog.EngineProblems.Message2=\u0110\u1EC3 c\u00F3 th\u00EAm th\u00F4ng tin, xem Gi\u00FAp \u0111\u1EE1|Ch\u1EA9n \u0111o\u00E1n|V\u1EC1 Xuggle ho\u1EB7c QuickTime -Tracker.Dialog.ReplaceXuggle.Message1=Ch\u00FAng t\u00F4i khuy\u00EAn b\u1EA1n n\u00EAn thay th\u1EBF c\u00F4ng c\u1EE5 Xuggle video hi\u1EC7n t\u1EA1i -Tracker.Dialog.ReplaceXuggle.Message2=v\u1EDBi phi\u00EAn b\u1EA3n Xuggle 3.4 b\u1EB1ng c\u00E0i \u0111\u1EB7t l\u1EA1i Tracker (phi\u00EAn b\u1EA3n 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=ho\u1EB7c tr\u00EAn) v\u00E0 ch\u1ECDn Xuggle trong l\u1EF1a ch\u1ECDn c\u00E0i \u0111\u1EB7t +Tracker.Dialog.EngineProblems.Message2=\u0110\u1EC3 c\u00F3 th\u00EAm th\u00F4ng tin, xem Gi\u00FAp \u0111\u1EE1|Ch\u1EA9n \u0111o\u00E1n|V\u1EC1 FFMPeg ho\u1EB7c QuickTime +Tracker.Dialog.ReplaceFFMPeg.Message1=Ch\u00FAng t\u00F4i khuy\u00EAn b\u1EA1n n\u00EAn thay th\u1EBF c\u00F4ng c\u1EE5 FFMPeg video hi\u1EC7n t\u1EA1i +Tracker.Dialog.ReplaceFFMPeg.Message2=v\u1EDBi phi\u00EAn b\u1EA3n FFMPeg 3.4 b\u1EB1ng c\u00E0i \u0111\u1EB7t l\u1EA1i Tracker (phi\u00EAn b\u1EA3n 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=ho\u1EB7c tr\u00EAn) v\u00E0 ch\u1ECDn FFMPeg trong l\u1EF1a ch\u1ECDn c\u00E0i \u0111\u1EB7t TrackerIO.Dialog.DurationIsConstant.Message=t\u1EA5t c\u1EA3 th\u1EDDi l\u01B0\u1EE3ng khung nh\u01B0 nhau TrackerIO.ZIPResourceFilter.Description=t\u1EC7p Tracker zip (.trz) TToolbar.Button.Desktop.Tooltip=Hi\u1EC3n th\u1ECB t\u00E0i li\u1EC7u HTML v\u00E0 / ho\u1EB7c PDF k\u1EBFt h\u1EE3p @@ -1283,7 +1283,7 @@ TableTrackView.Dialog.NameColumn.Title=C\u1ED9t v\u0103n b\u1EA3n TToolBar.MenuItem.StretchOff=C\u00E0i l\u1EA1i # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Phi\u00EAn b\u1EA3n Xuggle +PrefsDialog.Checkbox.WarnFFMPegVersion=Phi\u00EAn b\u1EA3n FFMPeg PrefsDialog.Checkbox.WarnCopyFailed=T\u1EC7p c\u00F4ng c\u1EE5 video sao ch\u00E9p l\u1ED7i Tracker.Dialog.FailedToCopy.Title=T\u1EC7p sao ch\u00E9p l\u1ED7i Velocity.Dialog.Color.Title=Ch\u1ECDn m\u00E0u v\u1EADn t\u1ED1c diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_zh_CN.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_zh_CN.properties index b348aaa7..7aeb849f 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_zh_CN.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_zh_CN.properties @@ -720,7 +720,7 @@ PrefsDialog.Checkbox.DefaultSize=\u4f7f\u7528\u9ed8\u8ba4 PrefsDialog.Checkbox.HintsOn=\u9ed8\u8ba4\u663e\u793a\u63d0\u793a PrefsDialog.Tab.Video.Title=\u89c6\u9891 PrefsDialog.VideoPref.BorderTitle=\u89c6\u9891\u5f15\u64ce -PrefsDialog.Button.Xuggle=Xuggle (\u63a8\u8350) +PrefsDialog.Button.FFMPeg=FFMPeg (\u63a8\u8350) PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=\u4f7f\u7528Web Start\u65f6\u5185\u5b58\u7ba1\u7406\u4e0d\u53ef\u7528. PrefsDialog.Dialog.WebStart.Title=Web Start \u6a21\u5f0f @@ -735,9 +735,9 @@ PrefsDialog.Upgrades.Weekly=\u6bcf\u5468 PrefsDialog.Upgrades.Monthly=\u6bcf\u6708 PrefsDialog.Upgrades.Never=\u4ece\u4e0d PrefsDialog.Button.CheckForUpgrade=\u73b0\u5728\u68c0\u67e5 -PrefsDialog.Xuggle.Speed.BorderTitle=Xuggle\u64ad\u653e\u5f71\u7247 -PrefsDialog.Xuggle.Slow=\u5149\u6ed1 (\u53ef\u80fd\u4f1a\u53d8\u6162) -PrefsDialog.Xuggle.Fast=\u5feb\u901f (\u53ef\u80fd\u4f1a\u6709\u952f\u9f7f) +PrefsDialog.FFMPeg.Speed.BorderTitle=FFMPeg\u64ad\u653e\u5f71\u7247 +PrefsDialog.FFMPeg.Slow=\u5149\u6ed1 (\u53ef\u80fd\u4f1a\u53d8\u6162) +PrefsDialog.FFMPeg.Fast=\u5feb\u901f (\u53ef\u80fd\u4f1a\u6709\u952f\u9f7f) PrefsDialog.CalibrationTool.BorderTitle=\u9ed8\u8ba4\u5b9a\u6807\u5de5\u5177 Protractor.Name=\u91cf\u89d2\u5668 Protractor.New.Name=\u91cf\u89d2\u5668 @@ -817,22 +817,22 @@ TMenuBar.Menu.MeasuringTools=\u6d4b\u91cf\u5de5\u5177 TMenuBar.Menu.AngleUnits=\u89d2\u5ea6\u5355\u4f4d TMenuBar.MenuItem.Degrees=\u89d2\u5ea6 TMenuBar.MenuItem.Radians=\u5f27\u5ea6 -Tracker.Dialog.NoXuggle.Title=Xuggle\u672a\u627e\u5230 -Tracker.Dialog.NoXuggle.Message1=Xuggle (\u8de8\u5e73\u53f0\u89c6\u9891\u5f15\u64ce)\u672a\u5b89\u88c5. -Tracker.Dialog.NoXuggle.Message2=\u4ecehttp://www.xuggle.com/xuggler/downloads/ \u4e0b\u8f7dXuggle. -Tracker.Action.AboutXuggle=\u5173\u4e8eXuggle... -Tracker.Dialog.AboutXuggle.Title=\u5173\u4e8eXuggle -Tracker.Dialog.AboutXuggle.Message.Version=Xuggle\u7248\u672c -Tracker.Dialog.AboutXuggle.Message.Home=Xuggle\u4e3b\u9875: -Tracker.Dialog.AboutXuggle.Message.Path=Xuggle\u8def\u5f84: +Tracker.Dialog.NoFFMPeg.Title=FFMPeg\u672a\u627e\u5230 +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg (\u8de8\u5e73\u53f0\u89c6\u9891\u5f15\u64ce)\u672a\u5b89\u88c5. +Tracker.Dialog.NoFFMPeg.Message2=\u4ecehttp://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=\u5173\u4e8eFFMPeg... +Tracker.Dialog.AboutFFMPeg.Title=\u5173\u4e8eFFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=FFMPeg\u7248\u672c +Tracker.Dialog.AboutFFMPeg.Message.Home=FFMPeg\u4e3b\u9875: +Tracker.Dialog.AboutFFMPeg.Message.Path=FFMPeg\u8def\u5f84: Tracker.Dialog.NoVideoEngine.Message1=\u9ed8\u8ba4\u60c5\u51b5\u4e0b,Tracker\u53ef\u4ee5\u6253\u5f00\u52a8\u753bgif\u56fe\u50cf\u53ca\u56fe\u7247\u5e8f\u5217, Tracker.Dialog.NoVideoEngine.Message2=\u5982\u679c\u8981\u6253\u5f00\u5176\u4ed6\u7c7b\u578b\u7684\u89c6\u9891\u5219\u9700\u8981\u5176\u4ed6\u7684\u89c6\u9891\u5f15\u64ce. -Tracker.Dialog.NoVideoEngine.Message3=\u63a8\u8350\u5b89\u88c5\u81ea\u7531\u5f00\u6e90\u8de8\u5e73\u53f0\u89c6\u9891\u5f15\u64ceXuggle +Tracker.Dialog.NoVideoEngine.Message3=\u63a8\u8350\u5b89\u88c5\u81ea\u7531\u5f00\u6e90\u8de8\u5e73\u53f0\u89c6\u9891\u5f15\u64ceFFMPeg Tracker.Dialog.NoVideoEngine.Message4=\u6700\u65b0\u7248Tracker\u4e0b\u8f7d Tracker.Dialog.NoVideoEngine.Title=\u6ca1\u6709\u89c6\u9891\u5f15\u64ce -Tracker.Dialog.NoXuggle.Message1=Xuggle\u672a\u5b89\u88c5\u6216\u5de5\u4f5c\u4e0d\u6b63\u5e38(\u672a\u77e5\u539f\u56e0). -Tracker.Dialog.NoXuggle.Message2=\u4e0b\u8f7d\u6700\u65b0\u7684Xuggle\u5b89\u88c5 -Tracker.Dialog.NoXuggle.Title=Xuggle\u4e0d\u53ef\u7528 +Tracker.Dialog.NoFFMPeg.Message1=FFMPeg\u672a\u5b89\u88c5\u6216\u5de5\u4f5c\u4e0d\u6b63\u5e38(\u672a\u77e5\u539f\u56e0). +Tracker.Dialog.NoFFMPeg.Message2=\u4e0b\u8f7d\u6700\u65b0\u7684FFMPeg\u5b89\u88c5 +Tracker.Dialog.NoFFMPeg.Title=FFMPeg\u4e0d\u53ef\u7528 Tracker.About.DefaultLocale=\u9ed8\u8ba4\u533a\u57df Tracker.About.CurrentLanguage=\u8bed\u8a00 Tracker.Dialog.InsufficientMemory.Title=\u5185\u5b58\u4e0d\u8db3 @@ -878,7 +878,7 @@ TTrackBar.Memory.Menu.SetSize=\u8bbe\u7f6e\u5185\u5b58\u5927\u5c0f... TTrackBar.Button.Version=\u5f53\u524d\u53ef\u7528\u7248\u672c: version TTrackBar.Popup.MenuItem.Upgrade=\u73b0\u5728\u5347\u7ea7... TTrackBar.Popup.MenuItem.Ignore=\u5ffd\u7565 -XuggleVideo.MenuItem.SmoothPlay=\u5e73\u6ed1\u64ad\u653e(\u7a0d\u6162) +FFMPegVideo.MenuItem.SmoothPlay=\u5e73\u6ed1\u64ad\u653e(\u7a0d\u6162) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=\u5b9a\u6807\u5c3a @@ -907,13 +907,13 @@ WorldTView.Button.World=\u89c6\u9891 # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=\u8b66\u544a PrefsDialog.Checkbox.WarnIfNoEngine=\u6ca1\u6709\u89c6\u9891\u5f15\u64ce -PrefsDialog.Checkbox.WarnIfXuggleError=\u4e0d\u4e25\u91cd\u7684Xuggle\u9519\u8bef +PrefsDialog.Checkbox.WarnIfFFMPegError=\u4e0d\u4e25\u91cd\u7684FFMPeg\u9519\u8bef PropertiesDialog.Title=\u5c5e\u6027 PropertiesDialog.Label.Author=\u4f5c\u8005 PropertiesDialog.Label.Contact=\u8054\u7cfb TActions.Action.Properties=\u5c5e\u6027... TActions.Action.OpenBrowser=\u6253\u5f00\u5e93\u6d4f\u89c8\u5668... -TFrame.Progress.Xuggle=Xuggle\u6b63\u5728\u8f7d\u5165\u5e27 +TFrame.Progress.FFMPeg=FFMPeg\u6b63\u5728\u8f7d\u5165\u5e27 TFrame.Progress.ClickToCancel=(\u70b9\u51fb\u53d6\u6d88) TFrame.Dialog.StalledVideo.Title=\u8f7d\u5165\u89c6\u9891\u9519\u8bef TFrame.Dialog.StalledVideo.Message0=\u8f7d\u5165\u89c6\u9891\u65f6\u53d1\u751f\u672a\u77e5\u9519\u8bef,\u6709\u53ef\u80fd\u662f\u6682\u65f6\u7684. @@ -926,12 +926,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=\u7ec8\u6b62 TFrame.Dialog.StalledVideo.Button.Wait=\u7b49\u5f85 Tracker.Dialog.NoVideoEngine.Checkbox=\u4e0d\u518d\u663e\u793a\u8be5\u4fe1\u606f TrackerIO.ZipFileFilter.Description=ZIP\u6587\u4ef6 -TrackerIO.Dialog.ErrorFFMPEG.Message1=Xuggle\u5728\u6253\u5f00\u89c6\u9891\u65f6\u9047\u5230\u5982\u4e0b\u9519\u8bef: +TrackerIO.Dialog.ErrorFFMPEG.Message1=FFMPeg\u5728\u6253\u5f00\u89c6\u9891\u65f6\u9047\u5230\u5982\u4e0b\u9519\u8bef: TrackerIO.Dialog.ErrorFFMPEG.Message2=\u5e76\u975e\u6240\u6709\u7684\u9519\u8bef\u90fd\u662f\u4e25\u91cd\u9519\u8bef.\u66f4\u5b8c\u6574\u7684\u9519\u8bef\u4fe1\u606f\u8bf7\u9009\u62e9 \u5e2e\u52a9|\u4fe1\u606f\u8bb0\u5f55 \u67e5\u770b. -TrackerIO.Dialog.ErrorFFMPEG.Message3=\u5982\u679cXuggle\u5f15\u64ce\u5931\u8d25,\u60a8\u53ef\u4ee5\u8bd5\u7528QuickTime\u6253\u5f00\u89c6\u9891. +TrackerIO.Dialog.ErrorFFMPEG.Message3=\u5982\u679cFFMPeg\u5f15\u64ce\u5931\u8d25,\u60a8\u53ef\u4ee5\u8bd5\u7528QuickTime\u6253\u5f00\u89c6\u9891. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=\u6ce8\u610f: \u5728Mac OSX\u4e2d\u9700\u8981\u572832\u4f4dJava\u865a\u62df\u673a\u4e0a\u8fd0\u884cTracker. -TrackerIO.Dialog.ErrorFFMPEG.Title=Xuggle\u9519\u8bef -TrackerIO.ErrorFFMPEG.LogMessage=\u66f4\u591a\u4fe1\u606f,\u8bf7\u5728\u4e2a\u4eba\u504f\u597d\u8bbe\u5b9a(\u7f16\u8f91|\u4e2a\u4eba\u504f\u597d)\u5f00\u542fXuggle\u8b66\u544a\u4fe1\u606f. +TrackerIO.Dialog.ErrorFFMPEG.Title=FFMPeg\u9519\u8bef +TrackerIO.ErrorFFMPEG.LogMessage=\u66f4\u591a\u4fe1\u606f,\u8bf7\u5728\u4e2a\u4eba\u504f\u597d\u8bbe\u5b9a(\u7f16\u8f91|\u4e2a\u4eba\u504f\u597d)\u5f00\u542fFFMPeg\u8b66\u544a\u4fe1\u606f. TToolBar.Button.OpenBrowser.Tooltip=\u6253\u5f00\u5f00\u6e90\u7269\u7406(OPS)\u6570\u5b66\u5e93\u6d4f\u89c8\u5668 # Additions by Doug Brown 2011-07-20 diff --git a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_zh_TW.properties b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_zh_TW.properties index cfcb9148..3eefc6e7 100644 --- a/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_zh_TW.properties +++ b/src/org/opensourcephysics/cabrillo/tracker/resources/tracker_zh_TW.properties @@ -727,7 +727,7 @@ PrefsDialog.Checkbox.DefaultSize=\u4f7f\u7528\u9810\u8a2d PrefsDialog.Checkbox.HintsOn=\u9810\u8a2d\u986f\u793a\u63d0\u793a PrefsDialog.Tab.Video.Title=\u5f71\u7247 PrefsDialog.VideoPref.BorderTitle=\u5f71\u7247\u8655\u7406\u7a0b\u5f0f -PrefsDialog.Button.Xuggle=Xuggle (\u5efa\u8b70\u5b89\u88dd) +PrefsDialog.Button.FFMPeg=FFMPeg (\u5efa\u8b70\u5b89\u88dd) PrefsDialog.Button.QT=QuickTime PrefsDialog.Dialog.WebStart.Message=\u7576\u4f7f\u7528Web Start\u6642\u7121\u6cd5\u4f7f\u7528\u8a18\u61b6\u9ad4\u7ba1\u7406 PrefsDialog.Dialog.WebStart.Title=Web Start \u6a21\u5f0f @@ -742,9 +742,9 @@ PrefsDialog.Upgrades.Weekly=\u6bcf\u5468 PrefsDialog.Upgrades.Monthly=\u6bcf\u6708 PrefsDialog.Upgrades.Never=\u5f9e\u4e0d PrefsDialog.Button.CheckForUpgrade=\u99ac\u4e0a\u6aa2\u67e5 -PrefsDialog.Xuggle.Speed.BorderTitle=\u64ad\u653e\u5f71\u7247 -PrefsDialog.Xuggle.Slow=\u9806\u66a2 (\u53ef\u80fd\u6703\u8b8a\u6162) -PrefsDialog.Xuggle.Fast=\u5feb\u901f (\u53ef\u80fd\u51fa\u73fe\u92f8\u9f52) +PrefsDialog.FFMPeg.Speed.BorderTitle=\u64ad\u653e\u5f71\u7247 +PrefsDialog.FFMPeg.Slow=\u9806\u66a2 (\u53ef\u80fd\u6703\u8b8a\u6162) +PrefsDialog.FFMPeg.Fast=\u5feb\u901f (\u53ef\u80fd\u51fa\u73fe\u92f8\u9f52) PrefsDialog.CalibrationTool.BorderTitle=\u9810\u8a2d\u6821\u6b63\u5de5\u5177 Protractor.Name=\u91cf\u89d2\u5668 Protractor.New.Name=\u91cf\u89d2\u5668 @@ -824,22 +824,22 @@ TMenuBar.Menu.MeasuringTools=\u6e2c\u91cf\u5de5\u5177 TMenuBar.Menu.AngleUnits=\u89d2\u5ea6\u55ae\u4f4d TMenuBar.MenuItem.Degrees=\u89d2\u5ea6 TMenuBar.MenuItem.Radians=\u5f91\u5ea6 -Tracker.Dialog.NoXuggle.Title=\u6c92\u6709\u5b89\u88dd Xuggle -Tracker.Dialog.NoXuggle.Message1=\u6c92\u6709\u5b89\u88ddXuggle (\u8de8\u5e73\u53f0\u5f71\u7247\u8655\u7406\u7a0b\u5f0f). -Tracker.Dialog.NoXuggle.Message2=\u4e0b\u8f09 Xuggle from http://www.xuggle.com/xuggler/downloads/. -Tracker.Action.AboutXuggle=\u95dc\u65bc Xuggle... -Tracker.Dialog.AboutXuggle.Title=\u95dc\u65bc Xuggle -Tracker.Dialog.AboutXuggle.Message.Version=Xuggle \u7248\u672c -Tracker.Dialog.AboutXuggle.Message.Home=Xuggle \u9996\u9801: -Tracker.Dialog.AboutXuggle.Message.Path=Xuggle \u8def\u5f91: +Tracker.Dialog.NoFFMPeg.Title=\u6c92\u6709\u5b89\u88dd FFMPeg +Tracker.Dialog.NoFFMPeg.Message1=\u6c92\u6709\u5b89\u88ddFFMPeg (\u8de8\u5e73\u53f0\u5f71\u7247\u8655\u7406\u7a0b\u5f0f). +Tracker.Dialog.NoFFMPeg.Message2=\u4e0b\u8f09 FFMPeg from http://www.ffmpeg.org/download.html. +Tracker.Action.AboutFFMPeg=\u95dc\u65bc FFMPeg... +Tracker.Dialog.AboutFFMPeg.Title=\u95dc\u65bc FFMPeg +Tracker.Dialog.AboutFFMPeg.Message.Version=FFMPeg \u7248\u672c +Tracker.Dialog.AboutFFMPeg.Message.Home=FFMPeg \u9996\u9801: +Tracker.Dialog.AboutFFMPeg.Message.Path=FFMPeg \u8def\u5f91: Tracker.Dialog.NoVideoEngine.Message1=\u6c92\u6709\u5f71\u7247\u7a0b\u5f0f! \u96d6\u6c92\u6709 Tracker \u4ecd\u53ef\u4ee5 Tracker.Dialog.NoVideoEngine.Message2=\u50c5\u986f\u793a\u5716\u7247, \u5716\u7247\u96c6\u6216 animated gifs. -Tracker.Dialog.NoVideoEngine.Message3=\u6e96\u5099\u5b89\u88dd Xuggle, Tracker\u9810\u8a2d\u5f71\u7247\u8655\u7406\u7a0b\u5f0f +Tracker.Dialog.NoVideoEngine.Message3=\u6e96\u5099\u5b89\u88dd FFMPeg, Tracker\u9810\u8a2d\u5f71\u7247\u8655\u7406\u7a0b\u5f0f Tracker.Dialog.NoVideoEngine.Message4=\u8acb\u4e0b\u8f09\u6700\u65b0\u7248\u672cTracker installer Tracker.Dialog.NoVideoEngine.Title=\u7f3a\u5c11\u5f71\u7247\u8655\u7406\u7a0b\u5f0f -Tracker.Dialog.NoXuggle.Message1=\u6c92\u6709\u5b89\u88ddTracker\u9810\u8a2d\u5f71\u7247\u8655\u7406\u7a0b\u5f0f Xuggle. -Tracker.Dialog.NoXuggle.Message2=\u8acb\u4e0b\u8f09\u6700\u65b0\u7248\u672cTracker installer\u6703\u540c\u6642\u5b89\u88ddXuggle -Tracker.Dialog.NoXuggle.Title=\u7f3a\u5c11 Xuggle +Tracker.Dialog.NoFFMPeg.Message1=\u6c92\u6709\u5b89\u88ddTracker\u9810\u8a2d\u5f71\u7247\u8655\u7406\u7a0b\u5f0f FFMPeg. +Tracker.Dialog.NoFFMPeg.Message2=\u8acb\u4e0b\u8f09\u6700\u65b0\u7248\u672cTracker installer\u6703\u540c\u6642\u5b89\u88ddFFMPeg +Tracker.Dialog.NoFFMPeg.Title=\u7f3a\u5c11 FFMPeg Tracker.About.DefaultLocale=\u9810\u8a2d\u8a9e\u8a00 Tracker.About.CurrentLanguage=\u8a9e\u8a00 Tracker.Dialog.InsufficientMemory.Title=\u8a18\u61b6\u9ad4\u4e0d\u8db3 @@ -885,7 +885,7 @@ TTrackBar.Memory.Menu.SetSize=\u8a2d\u5b9a\u8a18\u61b6\u9ad4\u5927\u5c0f... TTrackBar.Button.Version=\u76ee\u524d\u53ef\u66f4\u65b0\u7248\u672c: TTrackBar.Popup.MenuItem.Upgrade=\u99ac\u4e0a\u66f4\u65b0... TTrackBar.Popup.MenuItem.Ignore=\u5ffd\u7565 -XuggleVideo.MenuItem.SmoothPlay=\u7de9\u6162\u64ad\u653e (\u53ef\u80fd\u8b8a\u6162) +FFMPegVideo.MenuItem.SmoothPlay=\u7de9\u6162\u64ad\u653e (\u53ef\u80fd\u8b8a\u6162) # Additions by Doug Brown 2011-02-05 CalibrationTapeMeasure.Name=Calibration Tape @@ -914,13 +914,13 @@ WorldTView.Button.World=\u5168\u90e8 # Additions by Doug Brown 2011-04-04 PrefsDialog.NoVideoWarning.BorderTitle=\u8b66\u544a PrefsDialog.Checkbox.WarnIfNoEngine=\u672a\u5b89\u88dd\u5f71\u50cf\u7a0b\u5f0fe -PrefsDialog.Checkbox.WarnIfXuggleError=\u975e\u81f4\u547d Xuggle \u932f\u8aa4 +PrefsDialog.Checkbox.WarnIfFFMPegError=\u975e\u81f4\u547d FFMPeg \u932f\u8aa4 PropertiesDialog.Title=\u5c6c\u6027 PropertiesDialog.Label.Author=\u4f5c\u8005 PropertiesDialog.Label.Contact=\u806f\u7e6b TActions.Action.Properties=\u5c6c\u6027... TActions.Action.OpenBrowser=\u958b\u555f\u7a0b\u5f0f\u5eab\u700f\u89bd\u5668... -TFrame.Progress.Xuggle=Xuggle \u8f09\u5165\u5f71\u683c +TFrame.Progress.FFMPeg=FFMPeg \u8f09\u5165\u5f71\u683c TFrame.Progress.ClickToCancel=(\u6309\u9375\u53d6\u6d88) TFrame.Dialog.StalledVideo.Title=\u8f09\u5165\u5f71\u6642\u51fa\u932f TFrame.Dialog.StalledVideo.Message0=\u8f09\u5165\u5f71\u7247\u6642\u767c\u751f\u66ab\u505c\u73fe\u8c61. \u6216\u8a31\u53ea\u662f\u66ab\u6642\u6027 @@ -933,12 +933,12 @@ TFrame.Dialog.StalledVideo.Button.Stop=\u505c\u6b62 TFrame.Dialog.StalledVideo.Button.Wait=\u7b49\u5019 Tracker.Dialog.NoVideoEngine.Checkbox=\u4e0d\u8981\u5728\u986f\u793a\u6b64\u8a0a\u606f TrackerIO.ZipFileFilter.Description=ZIP \u58d3\u7e2e\u6a94 -TrackerIO.Dialog.ErrorFFMPEG.Message1=Xuggle \u958b\u555f\u5f71\u7247\u6a94\u6642\u9047\u5230\u4ee5\u4e0b\u932f\u8aa4: +TrackerIO.Dialog.ErrorFFMPEG.Message1=FFMPeg \u958b\u555f\u5f71\u7247\u6a94\u6642\u9047\u5230\u4ee5\u4e0b\u932f\u8aa4: TrackerIO.Dialog.ErrorFFMPEG.Message2=\u4e26\u975e\u6240\u6709\u7684\u932f\u8aa4\u90fd\u662f\u7121\u6cd5\u7e7c\u7e8c\u7684. \u9078\u53d6 \u5e6b\u52a9|\u8a0a\u606f \u53ef\u89c0\u770b\u66f4\u4ed4\u7d30\u932f\u8aa4\u8cc7\u8a0a. -TrackerIO.Dialog.ErrorFFMPEG.Message3=\u5c31\u7b97 Xuggle \u7121\u6cd5\u958b\u555f\u5f71\u7247, \u53ef\u5617\u8a66\u6539\u7528 QuickTime \u958b\u555f. +TrackerIO.Dialog.ErrorFFMPEG.Message3=\u5c31\u7b97 FFMPeg \u7121\u6cd5\u958b\u555f\u5f71\u7247, \u53ef\u5617\u8a66\u6539\u7528 QuickTime \u958b\u555f. TrackerIO.Dialog.ErrorFFMPEG.MessageMac=\u6ce8\u610f: \u5c0d\u65bc Mac OSX \u7684\u7cfb\u7d71\u9700\u8981\u572832-bit Java VM \u74b0\u5883\u4e0b\u57f7\u884c\u672c\u8edf\u9ad4 Tracker. -TrackerIO.Dialog.ErrorFFMPEG.Title=Xuggle \u932f\u8aa4 -TrackerIO.ErrorFFMPEG.LogMessage=\u958b\u555f Xuggle (\u7de8\u8f2f|\u8a2d\u5b9a) \u53ef\u7372\u5f97\u66f4\u9032\u4e00\u6b65\u932f\u8aa4\u8cc7\u8a0a +TrackerIO.Dialog.ErrorFFMPEG.Title=FFMPeg \u932f\u8aa4 +TrackerIO.ErrorFFMPEG.LogMessage=\u958b\u555f FFMPeg (\u7de8\u8f2f|\u8a2d\u5b9a) \u53ef\u7372\u5f97\u66f4\u9032\u4e00\u6b65\u932f\u8aa4\u8cc7\u8a0a TToolBar.Button.OpenBrowser.Tooltip=\u958b\u555f OSP Digital Library \u700f\u89bd\u5668 # Additions by Doug Brown 2011-07-20 @@ -1195,17 +1195,17 @@ PrefsDialog.Checkbox.32BitVM=32-bit PrefsDialog.Checkbox.WarnVariableDuration=Variable frame durations PrefsDialog.Button.NoEngine=None PrefsDialog.Dialog.SwitchToQT.Message=\u82e5\u6539\u7528QuickTime \u5c07\u540c\u6642\u6539\u7528 32-bit Java VM. -PrefsDialog.Dialog.SwitchToXuggle32.Message=\u82e5\u6539\u7528 Xuggle \u4e26\u540c\u6642\u6539\u7528 32-bit Java VM. -PrefsDialog.Dialog.SwitchToXuggle64.Message=\u6539\u7528 Xuggle \u4e26\u540c\u6642\u6539\u7528 64-bit Java VM. +PrefsDialog.Dialog.SwitchToFFMPeg32.Message=\u82e5\u6539\u7528 FFMPeg \u4e26\u540c\u6642\u6539\u7528 32-bit Java VM. +PrefsDialog.Dialog.SwitchToFFMPeg64.Message=\u6539\u7528 FFMPeg \u4e26\u540c\u6642\u6539\u7528 64-bit Java VM. PrefsDialog.Dialog.SwitchVM.Title=Java VM Changed PrefsDialog.Dialog.SwitchTo32.Message=\u6539\u752832-bit Java VM \u540c\u6642\u6539\u7528 QuickTime \u8655\u7406\u5f71\u7247. -PrefsDialog.Dialog.SwitchTo64.Message=\u6539\u7528 64-bit Java VM \u540c\u6642\u6539\u7528 Xuggle \u8655\u7406\u5f71\u7247. +PrefsDialog.Dialog.SwitchTo64.Message=\u6539\u7528 64-bit Java VM \u540c\u6642\u6539\u7528 FFMPeg \u8655\u7406\u5f71\u7247. PrefsDialog.Dialog.SwitchEngine.Title=\u6539\u8b8a\u5f71\u7247\u8655\u7406\u7a0b\u5f0f PrefsDialog.Dialog.NoEngineIn64bitVM.Message1=\u6c92\u6709 64-bit Java VM \u7684\u5f71\u7247\u8655\u7406\u7a0b\u5f0f. \u4f60\u4ecd\u7136 PrefsDialog.Dialog.NoEngineIn64bitVM.Message2=\u53ef\u4ee5\u958b\u555f (JPEG, PNG) \u6216 animated GIFs\u7684\u5716\u50cf\u6a94. PrefsDialog.Dialog.NoEngineIn64bitVM.Question=\u662f\u5426\u78ba\u5b9a\u5207\u63db\u6210 64-bit VM? PrefsDialog.Dialog.NoEngineIn64bitVM.Title=\u7121 64-bit \u5f71\u7247\u8655\u7406\u7a0b\u5f0f -PrefsDialog.Dialog.No32bitVMXuggle.Message=\u4f7f\u7528Xuggle\u7a0b\u5f0f\u9700\u8981\u5b89\u88dd 32-bit Java VM +PrefsDialog.Dialog.No32bitVMFFMPeg.Message=\u4f7f\u7528FFMPeg\u7a0b\u5f0f\u9700\u8981\u5b89\u88dd 32-bit Java VM PrefsDialog.Dialog.No32bitVMQT.Message=\u4f7f\u7528QuickTime\u7a0b\u5f0f\u9700\u8981\u5b89\u88dd 32-bit Java VM PrefsDialog.Dialog.No32bitVM.Message=\u53ef\u65bc Tracker \u8aaa\u660e:\u5b89\u88dd \u9078\u55ae\u7372\u5f97\u66f4\u9032\u4e00\u6b65\u8aaa\u660e. PrefsDialog.Dialog.No32bitVM.Title=\u9700\u898132-bit VM @@ -1221,10 +1221,10 @@ Tracker.Dialog.Button.RelaunchNow=\u662f\u7684, \u91cd\u65b0\u555f\u52d5 Tracker.Dialog.Button.ShowPrefs=\u5426, \u4f46\u662f\u986f\u793a\u9810\u8a2d\u503c Tracker.Dialog.Button.ContinueWithoutEngine=\u5426, \u7e7c\u7e8c\u4f7f\u7528\u4f46\u7121\u6cd5\u8655\u7406\u5f71\u7247 Tracker.Dialog.EngineProblems.Message1=\u5b89\u88dd\u4e0d\u53ea\u4e00\u500b\u5f71\u7247\u8655\u7406\u7a0b\u5f0f\u4f46\u662f\u537b\u7121\u6cd5\u4f7f\u7528 -Tracker.Dialog.EngineProblems.Message2=\u8acb\u89c0\u770b \u8aaa\u660eHelp|\u8a3a\u65b7Diagnostics|\u95dc\u65bc Xuggle\u6216QuickTime. -Tracker.Dialog.ReplaceXuggle.Message1=\u5efa\u8b70\u4f60\u53d6\u4ee3\u76ee\u524d\u4f7f\u7528\u7684Xuggle \u5f71\u7247\u7a0b\u5f0f -Tracker.Dialog.ReplaceXuggle.Message2=\u4f7f\u7528 Xuggle 3.4\u7248 \u4e26\u91cd\u65b0\u5b89\u88ddTracker (\u7248\u672c 4.75 -Tracker.Dialog.ReplaceXuggle.Message3=\u6216\u66f4\u65b0\u7248) \u4e26\u9078\u64c7\u642d\u914d Xuggle \u7684\u7248\u672c. +Tracker.Dialog.EngineProblems.Message2=\u8acb\u89c0\u770b \u8aaa\u660eHelp|\u8a3a\u65b7Diagnostics|\u95dc\u65bc FFMPeg\u6216QuickTime. +Tracker.Dialog.ReplaceFFMPeg.Message1=\u5efa\u8b70\u4f60\u53d6\u4ee3\u76ee\u524d\u4f7f\u7528\u7684FFMPeg \u5f71\u7247\u7a0b\u5f0f +Tracker.Dialog.ReplaceFFMPeg.Message2=\u4f7f\u7528 FFMPeg 3.4\u7248 \u4e26\u91cd\u65b0\u5b89\u88ddTracker (\u7248\u672c 4.75 +Tracker.Dialog.ReplaceFFMPeg.Message3=\u6216\u66f4\u65b0\u7248) \u4e26\u9078\u64c7\u642d\u914d FFMPeg \u7684\u7248\u672c. TrackerIO.Dialog.DurationIsConstant.Message=\u6bcf\u500b\u5f71\u683c\u7684\u6642\u9593\u9593\u9694\u90fd\u76f8\u540c (\u56fa\u5b9a\u6bcf\u79d2\u5f71\u683c\u6578 fps). TrackerIO.ZIPResourceFilter.Description=Tracker ZIP \u58d3\u7e2e\u6a94 (.trz) TToolbar.Button.Desktop.Tooltip=\u986f\u793a\u95dc\u806f\u7684HTML\u7db2\u9801\u8207PDF\u8cc7\u6599 @@ -1290,7 +1290,7 @@ TableTrackView.Dialog.NameColumn.Title=Text Column TToolBar.MenuItem.StretchOff=\u91cd\u7f6e Reset # Additions by Doug Brown 2014-02-20 -PrefsDialog.Checkbox.WarnXuggleVersion=Xuggle \u7248\u672c +PrefsDialog.Checkbox.WarnFFMPegVersion=FFMPeg \u7248\u672c PrefsDialog.Checkbox.WarnCopyFailed=\u5f71\u7247\u7a0b\u5f0f\u8907\u88fd\u932f\u8aa4Video Engine File Copy Errors Tracker.Dialog.FailedToCopy.Title=\u6a94\u6848\u8907\u88fd\u932f\u8aa4File Copy Error Velocity.Dialog.Color.Title=\u9078\u64c7\u901f\u5ea6\u984f\u8272Choose Velocity Color