It is important we have an idea of the common usage of the i18nActiveRecord class. I will try to use i18nActiveRecord to perform the basic CRUD operations. I believe after this simple introduction, most of the questions you may have regarding its usage will be answered.

We will use the example of the Post AR of the yii blog demo. It will extend i18nActiveRecord instead of the CAtiveRecord class. In the PostController class we will have:

/**
 * Creates a new model.
 * If creation is successful, the browser will be redirected 
 * to the 'view' page.
 */
public function actionCreate(){
    $model=new Post;
    $model->setLocale(Yii::app()->locale->id);
    if(isset($_POST['Post']))
    {
        $model->attributes=$_POST['Post'];
        if($model->save())
            $this->redirect(array('view','id'=>$model->id));
    }
    $this->render('create',array(
        'model'=>$model,
    ));
}
/**
 * Updates a particular model.
 * If update is successful, the browser will be redirected 
 * to the 'view' page.
 */
public function actionUpdate(){
    $model=$this->loadModel();
    if(isset($_POST['Post']))
    {
        $model->attributes=$_POST['Post'];
        if($model->save())
            $this->redirect(array('view','id'=>$model->id));
    }
    $this->render('update',array(
        'model'=>$model,
    ));
}
/**
 * Displays a particular model.
 */
public function actionView()
{
    $post=$this->loadModel();
    $comment=$this->newComment($post);
    $this->render('view',array(
        'model'=>$post,
        'comment'=>$comment,
    ));
}
/**
 * Deletes a particular model.
 * If deletion is successful, the browser will be redirected 
 * to the 'index' page.
 */
public function actionDelete(){
    if(Yii::app()->request->isPostRequest)
    {
        // we only allow deletion via POST request
        $this->loadModel()->delete();
        // if AJAX request (triggered by deletion via admin grid view), 
        //we should not redirect the browser
        if(!isset($_GET['ajax']))
            $this->redirect(array('index'));
    }
    else
        throw new CHttpException(400,'Invalid request. 
                   Please do not repeat this request again.');
}
 
/**
 * Lists all models.
 */
public function actionIndex(){
    $criteria=new CDbCriteria(array(
        'condition'=>'status='.Post::STATUS_PUBLISHED,
        'order'=>'update_time DESC',
        'with'=>'commentCount',
    ));
    if(isset($_GET['tag']))
        $criteria->addSearchCondition('tags',$_GET['tag']);
    //using withI18n
    $post = Post::model()->withI18n(Yii::app()->locale->id);
    $dataProvider=new CActiveDataProvider($post, array(
        'pagination'=>array(
            'pageSize'=>Yii::app()->params['postsPerPage'],
        ),
        'criteria'=>$criteria,
    ));
    $this->render('index',array(
        'dataProvider'=>$dataProvider,
    ));
}
/**
 * Manages all models.
 */
public function actionAdmin(){
    $model=new Post('search');
    $model->setLocale(Yii::app()->locale->id);
    if(isset($_GET['Post']))
    $model->attributes=$_GET['Post'];
    $this->render('admin',array(
        'model'=>$model,
    ));
}
/**
 * Returns the data model based on the primary key given in the GET variable.
 * If the data model is not found, an HTTP exception will be raised.
 */
public function loadModel(){
    if($this->_model===null)
    {
        if(isset($_GET['id']))
        {
            if(Yii::app()->user->isGuest){
                $condition='status='.Post::STATUS_PUBLISHED. 
                    'OR status='.Post::STATUS_ARCHIVED;
            }
            else
                $condition='';
            $this->_model=Post::model()
                        ->withi18n(Yii::app()->locale->id)
                        ->findByPk($_GET['id'], $condition);
        }
        if($this->_model===null)
            throw new CHttpException(404,'The requested page does not exist.');
    }
    return $this->_model;
}

The other important method I should mention is the search() method of the Post class. You should modify it to read

/**
 * Retrieves the list of posts based on the current search/filter conditions.
 * @return CActiveDataProvider the data provider that can return the needed posts.
 */
public function search(){
    $criteria=new CDbCriteria;
    //using the default alias 'tr' for translation record
    $criteria->compare('tr.title',$this->title,true);
    $criteria->compare('status',$this->status);
    // 'Post' will not work because CActiveDataProvider will have 
    //to create a new Post object which will not have locale set
    return new CActiveDataProvider($this->withi18n(Yii::app()->locale->id),
         array( 
            'criteria'=>$criteria,
            'sort'=>array(
                'defaultOrder'=>'status, update_time DESC',
            ),
    ));
}

Download

i18nActiveRecord